文档章节

编写自己的tomcat, 并运行tomcat源码于eclipse中

xpbug
 xpbug
发布于 2012/04/15 13:10
字数 1213
阅读 2573
收藏 24
点赞 0
评论 2

最近慢慢闲了,打算圆了以前留下的愿望。就是把tomcat的源码都走一边。可以帮助我更深层次的理解一个web服务器的工作原理。

这个周末,我便埋出了第一步。将基于eclipse的整个tomcat的源码开发环境创建成功,并成功的调试tomcat源码。下面记录我所做的事情。

JDK 1.6

下载oracle或者IBM JDK 1.6版本。1.6是必须的,因为tomcat7的明确要求JDK1.6来build。

准备eclipse

1. 到http://www.eclipse.org/downloads/下载一个eclipse。我下载的是最新的Indigo版本。选择的是IDE for Java EE developers。

2. 给eclipse安装SVN插件,tomcat的源代码使用的版本控制工具是SVN。我们需要用SVN来同步源码。http://www.eclipse.org/subversive/downloads.php提供了SVN插件的安装步骤。

准备ANT

http://ant.apache.org/选择1.8.3的版本下载。

设置环境变量

添加环境变量JAVA_HOME和ANT_HOME。将%ANT_HOME%\bin添加到PATH中。

创建目录管理你的文件

为了更好的管理你的文件,你最好组织一下自己的文件结构,我的文件结构如下。后面所有的工作都基于我下面的文件结构。

job - 工作的根目录。

apache-ant-1.8.3是ant的home。

downloads - 刚才网上下载的所有原始文件都在这里面。此文件对于tomcat运行没有影响。

eclipse - eclipse indigo for java ee developers

jad - 反编译工具。此文件对于tomcat运行也没有影响。

screen - 用于保存我屏幕截图的。对于tomcat运行没影响。

tomcat-build-download - 重要文件,在build tomcat的时候,build会自动下载一下tomcat所依赖的包。所有的依赖会自动下载都这个文件下。

tomcat-compile-dependence - tomcat源码导入eclipse之后编译的时候所依赖的包都存放在这个文件下面。

workspace - eclipse的工作目录。

workspace\tc7.0.x - 从svn同步下来的tomcat源码。

workspace\tomcat - 为tomcat源码创建的java项目。

下载源码

1,打开eclipse,转到SVN Repository exploring。

2,创建一个新的repository。URL为tomcat的repository地址http://svn.apache.org/repos/asf/tomcat。可以从tomcat官网找到。

 3. 结束以后,将看到eclipse左边栏中创建好的repository。展开repository,找到最近版本的tomcat 7.0.x. 展开, 选择trunk.右键点击,在菜单中选择"check out".

4, 文件tc7.0.x将会被下载到workspace目录,于是产生了目录 workspace\tc7.0.x 。

Build源码

在下载好的tc7.0.x目录下面,可以找到BUILDING.txt。这个文件里面给出了详细的Build方法。也列出了所有的build命令。如果大家只是想快速进行下去,可以按照我下面写的步骤快速搭建你的环境。

1,在下载好的文件下面,找到build.properties.default. 复制这个文件,到同级目录并重命名为build.properties.

2,打开build.properties, 找到base.path,替换此行,改为base.path=C:/job/tomcat-build-download.   Base path声明了tomcat build所依赖的外部资源的目录。Build过程中所有的网络依赖资源,都下载到此目录下面。

3,在tc7.0.x目录下运行命令ant.

ant成功后,外部依赖会下载到base.path下面。Source code会被build成可运行文件,输出到\job\workspace\tc7.0.x\output中。

导入eclipse

1,创建一个空的eclipse java project。起名为tomcat.

2,点击项目->右键菜单->import... -> File System->

3, 点击Finish,将会完成导入。

4,源代码成功的导入到eclipse中,但是存在编译错误。这是因为缺失了一些编译所依赖的包。下面我们找出所有的依赖包,将他们放入目录tomcat-compile-dependence中。

5,在build的时候,ant会下载一些依赖包,当完成编译以后,ant会把一些依赖包删除掉。为了把所有的依赖包重新下载一边,需要在tc7.0.x目录下运行命令ant extras

6,找到下面的jar,把他们copy到tomcat-compile-dependence中。

C:\job\apache-ant-1.8.3\lib\ant.jar

C:\job\tomcat-build-download\ecj-3.7.2\ecj-3.7.2.jar

C:\job\tomcat-build-download\jaxrpc-1.1-rc4\geronimo-spec-jaxrpc-1.1-rc4.jar

C:\job\tomcat-build-download\wsdl4j-1.6.2\wsdl4j-1.6.2.jar

7,将tomcat-compile-dependence中所有的包导入project的build path中。tomcat编译通过。

在eclipse中运行源码

打开run as configuration...

点击run,就能跑起来了。

能在eclipse中运行,自然就能debug。

2013年1月29日,更新

更新原因: 因为tomcat的源码是运行在eclipse中,并直接运行的java类启动tomcat的. 突然有一天,我写了一个application, 并放在tomcat的webApps下面. 我想remote debug我的application. 这需要开启tomcat的remote debug模式. 其实,就是开启jvm的debug模式, 开启方法如下图:

如过想开启tomcat的log,还需要在VM arguments中添加:

-Djava.util.logging.config.file=d:\servers\tomcatSrc\src\output\build\conf\logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager


© 著作权归作者所有

共有 人打赏支持
xpbug
粉丝 300
博文 97
码字总数 125336
作品 0
浦东
程序员
加载中

评论(2)

leo-lin
leo-lin
请教下,我的tomcat源码已编译成功,远程调试tomcat应用输入的vm参数是:
-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1233

但是却提示错误:
Error occurred during initialization of VM
agent library failed to init: jdwp
ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.
不知你有没有遇到这种情况83
jakic
jakic
这么牛逼
eclipse导入tomcat源码-tomcat 6.x 源码阅读

2013-09-03 : 从大学开始学习java到现在已经有3年多,工作有一年多,起初工作还是java方面的,最近切到python。心理总有一直不踏实的感觉,觉得缺少点东西,没有自己的想法,很少问自己为什么...

douglaswei ⋅ 2013/09/04 ⋅ 2

eclipse导入tomcat 8.0x源码

1、安装Ant Ant下载地址:http://ant.apache.org/bindownload.cgi 下载完成以后,解压到相应目录,例如我解压到了D:open-softapache-ant-1.9.6文件夹 然后配置Ant的环境变量,增加 ANT_HOME...

二两豆腐 ⋅ 2016/04/12 ⋅ 0

Eclipse导入Tomcat源码

想要研究下Tomcat的体系结构或者源码,最好将Tomcat的源码导入到ide中,编写实例进行代码跟踪(debug)。 这里参考了网上一些资料,将自己操作过程记个流水账。 准备: 1.Tomcat源码下载 这个...

jxlgzwh ⋅ 2014/05/24 ⋅ 0

Eclipse轻松玩转SmartFramework

SmartFramework框架和 SmartSample都是使用Maven构建,使用IDEA开发的。对于像我这样使用Eclipse,又不熟悉Maven的人来说,想玩转smart多少有些难度。这里是我在Eclipse中运行smart-sample的...

大漠真人 ⋅ 2013/11/24 ⋅ 2

JAVA EE Eclipse下配置Tomcat服务器

在进行Java web编程之前,必须要进行web服务器的配置,这里选择在Java EE(版本) Eclipse中进行服务器的配置。当然了,在安装Java EE Eclipse之前要先安装JDK,并且要在环境变量中配置好JDK...

似水的流年 ⋅ 2017/12/29 ⋅ 0

Eclipse 二次开发项目 在线调试求方法

因为是二次开发,部分代码没有源码,只能在已经编译后的项目上进行调试,目前使用Tomcat,在 Eclipse 编写代码后,需要打包为jar手动放入Tomcat的运行项目下的WEB-INFlib,重启Tomcat生效,但...

梁某某 ⋅ 2013/10/09 ⋅ 8

Tomcat源码学习(一) 源码编译和导入Eclipse

由于现在项目相对比较轻松,而且项目是研究SOA和Web Service的,因此这里我要对一些相关的开源技术做一些研究。接下来我要写的文章是Tomcat源码系列的文章,文章(一)是关于Tomcat源码编译和如...

光石头 ⋅ 2011/05/16 ⋅ 0

Tomcat Web应用服务器、开发工具Myeclipse 和 jdk的关系

JRE是JAVA 程序运行的基础,它提供了JVM等JAVA运行环境 而JDK是给开发JAVA程序的人员提供了包括JRE在内的基本环境以及一些开发工具,例如JAVAC,所以装JDK后会有两个JRE,一个是单独的,一个...

LYQ1990 ⋅ 2016/05/04 ⋅ 0

eclipse 导入tomcat 7 源码

如果需要学习 tomcat 7 源码的,最后不过的方法,是将源码导入到 ide 环境,跟踪、调试、测试等,这里谈一下如何导入 tomcat 7 的源码。 一、安装 ant tamcat 源码使用 ant 构建,若没有安装...

peiquan ⋅ 2014/11/21 ⋅ 0

Tomcat 源码的获取与部署

目的:获取tomcat源码,部署到eclipse进而分析tomcat的架构体系。 准备工作: svn客户端下载 ant下载,环境变量path配置到ant下面的bin tomcat项目的源码地址: http://svn.apache.org/repo...

张大凡 ⋅ 2013/01/26 ⋅ 8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 32分钟前 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 37分钟前 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 昨天 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部