编写自己的tomcat, 并运行tomcat源码于eclipse中
为什么80%的码农都做不了架构师?>>>
最近慢慢闲了,打算圆了以前留下的愿望。就是把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
转载于:https://my.oschina.net/xpbug/blog/53610
编写自己的tomcat, 并运行tomcat源码于eclipse中相关推荐
- java源码导入eclipse_如何导入外部的源码到eclipse中
用struts,spring等框架开发也有两年的时间了,一直很少去阅读其源码,每次在eclipse编码的过程中想要看某一个类的源码,ctrl点击总是出现source not found的提示,也没有去 ...
- 关于eclipse的源码翻阅(Eclipse中,open declaration;open implementation;open super implementation )
open declaration:是打开该方法的接口文件(一般没实在意义,只是简单一句): open implementation:是打开具体实现该方法的类文件(具体逻辑的处理地方,方法的主要实现的地 ...
- Tomcat集群实现源码级别剖析
随着互联网快速发展,各种各样供外部访问的系统越来越多且访问量越来越大,以前Web容器可以包揽接收-逻辑处理-响应整个请求生命周期的工作,现在为了构建让更多用户访问更强大的系统,人们通过不断地业务解耦. ...
- Tomcat 处理 HTTP 请求源码分析(下)【转】
原文地址:https://www.infoq.cn/article/zh-tomcat-http-request-2 很多开源应用服务器都是集成 tomcat 作为 web container 的,而 ...
- Qt编写安防楼宇对讲管理平台源码
Qt编写安防楼宇对讲管理平台源码 同时集成了楼宇对讲.住户报警.门禁控制.公共报警.视频监控等模块. 系统管理部分包括系统配置.对讲配置.住户配置.公共配置.监控配置.地图管理.视频联动.用户管理.区 ...
- cocos2dx 圆盘抽奖_cocos2d编写的类似幸运大转盘抽奖源码
压缩包内容概览: cocos2d编写的类似幸运大转盘抽奖源码-帮你选择 ; 随机 ; 程序委托 ; 背高清 ; 背 ipad ; 返回 ; 默认 ; 默认@2x ; 图标-72 ; 图标@2x ; 我 ...
- 【深度学习实战03】——YOLO tensorflow运行及源码解析
本文章是深度学习实战系列第三讲文章,以运行代码+源码分析 为主: 转载请注明引用自:https://blog.csdn.net/c20081052/article/details/80260726 首 ...
- ubuntu1804系统运行smplify-x源码
这里写自定义目录标题 ubuntu1804系统运行smplify-x源码 1. Installation 2.Summary of possible issues **Issue 1: ImportE ...
- 蜘蛛池源码php,PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错...
一.源码说明: PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错版源码下载,搭建好php环境之后,设置404.php,而后将域名泛解析,修改目录下的domains文件,启动即可 ...
- c语言打印空心数字图形,(完整word版)C语言编写打印实心和空心菱形【源码】
<(完整word版)C语言编写打印实心和空心菱形[源码]>由会员分享,可在线阅读,更多相关<(完整word版)C语言编写打印实心和空心菱形[源码](13页珍藏版)>请在人人文库 ...
最新文章
- 2018.10.26 NOIP模拟 瓶子 (dp/贪心)
- 批处理(cmd)的学习记录
- spring + hibernate
- C++Breadth First Search 广度优先搜索(附完整源码)
- 时任上海来伊份互联网事业群总裁王戈钧 :传统企业(线上+线下)移动互联网改造...
- 【ArcGIS Pro微课1000例】0013:NOAA全球1km分辨率DEM下载及拼接教程(附已拼接成果下载地址)
- C语言指针变量与一维数组
- 在java中jvm目录_JVM具体在哪个文件夹下的
- Python--Flask初学Demo(11.10)
- 译 - Cassandra 数据建模的基本规则
- python程序员专用壁纸_程序员如何一键“Get”高清壁纸?
- Maven下载及安装教程
- win10下安装Jekyll(rubyinstaller-devkit)
- android ip地址扫描仪,通过IP地址添加网络扫描仪(适用于CC2软件Mac OS)
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)
- html把圆形分成10份,CSS八等分圆的实现示例
- vnc远程桌面精灵,细数三款可能你没有使用过的vnc远程桌面精灵
- 【工具】可以在线免费收发邮件的十几个临时邮箱网站
- 数学建模常用算法—灰色预测
- TCP/IP——从wireshark看TCP(一)
热门文章
- Jquery 使用技巧总结
- 查询数据库中所有的表的信息
- vc++HOOK API黑客外挂编程必知必会
- MyBatis中解决字段名与实体类属性名不相同的冲突
- heidsql(mysql)安装教程和mysql修改密码
- SpringMVC+Spring+Mybatis简单总结
- Kattis - missinggnomesD Missing Gnomes (思路题)
- 动态规划-最长不下降子序列
- C++primer 7.4节练习
- 【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线 二分+SPFA