Tomcat8源码编译及导入Eclipse中研究

摘要:
最近,由于需要修改Tomcat中的一些函数,我们不得不研究源代码的这部分并进行一些更改。目前,Tomcat的最新版本是8.0。下载源包、编译并将其导入Eclipse进行研究是很方便的。

最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改。

目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便。

1. Tomcat8源码编译步骤

1.1 先到Apache Tomcat 8.0官网下载最新版Source Code Distributions,解压到某个目录下,如D:apache-tomcat-8.0.5-src

1.2 使用ant编译

(1)安装ant

如果机器上已经安装了ant可以省略这一步,否则去ant官网下 载最新版ant Binary Distributions,解压到某个目录下,如D:Program Filesapache-ant-1.9.3,然后配置环境变量。要么新建个ANT_HOME,值为ant路径,然后在PATH中添加ant bin路 径为%ANT_HOME%/bin,要么直接在PATH中添加ant bin路径为D:Program Filesapache-ant-1.9.3in。配置好后,在cmd下运行ant  -version,如果显示版本说明配置成功,我们就可以随地使用ant了。

(2)编译Tomcat 8.0

非常简单,cmd进入到刚下载的源码路径下,用下面两个命令即可编译:

ant download
ant

"ant download"命令会下载编译Tomcat所需的依赖包。

这里有两个问题需要注意:

  • 依赖包下载到什么地方?在Linux或MacOX下,会默认下载到 “/usr/share/java” 目录,当然该目录普通用户是没有权限写的;在Windows下,默认下载到 "某个磁盘:usrsharejava" ,这的磁盘可能是C、D或其它,这一般取决于你把Tomcat源码放在哪个盘了,比如我的放在D盘,默认就下载在 "D:usrsharejava" 下。如果我想自己定义下载路径怎么办?
  • 如果用户是通过代理上网的,那么下载过程中就会出错。怎么解决?

熟悉ant的人应该知道怎么解决,就是通过配置文件build.properties来 设置。该配置文件在Tomcat源码路径下为 “build.properties.default” ,我们可以去掉.default后缀或直接新建一个build.properties都可以,当然我选择了前者,将 “build.properties.default” 修改为 “build.properties” 打开, 修改里面的base.path属性值为我们希望的下载路径并添加proxy代理配置,格式如下:

# ----- Proxy setup -----
# Uncomment if using a proxy server
proxy.host=proxy.domain
proxy.port=8080
proxy.use=on

# ----- Default Base Path for Dependent Packages -----
# Replace this path with the directory path where dependencies binaries
# should be downloaded
base.path=/home/me/some-place-to-download-to

根据自己的需要进行设置,注意如果不需要某项设置需要用#注释掉。

依赖包下载成功后(如果下载失败可以多试几次),执行ant即可编译,编译成功后当前路径下回多出个output文件夹,就是我们的编译结果。

附:

①如果你修改了部分源码,需要重新编译 ,直接进入到源码路径,执行ant命令即可。

②如果需要编译servlet和jsp API文档,进入到源码路径下执行如下命令:

ant -f dist.xml dist-javadoc

③如果需要编译extras扩展功能(commons-logging, webservices etc.),进入到源码路径下执行如下命令:

ant -f extras.xml

④如果需要编译成release版本,进入到源码路径下执行如下命令:

ant -f dist.xml release
2. 将Tomcat源码导入到Eclipse中研究

由于Tomcat不是Eclipse管理的项目,因此不能直接导入,需要新建一个Java项目,比如为Tomcat8,这时有两种方法就源码导入进来。

第一种:将所需要的源码包java和test(Junit测试用例,可选)两个文件夹直接拷贝到src下。

第二种:选中工程Tomcat8中的src目录,再选择File - > import -> File System,在From directory中选择tomcat源码包中的java文件夹并导入,在Into folder中选择我们刚新建的Tomcat8项目,Finish,然后记得将这两个文件夹标记为source code(怎么标记?右键选择者文件夹 -> Build Path -> Use as Source Folder)。

当然这样过后就不是完事了,这时会发现整个项目很多红叉,也就是缺少依赖包,在Build Path里加上下面的几个依赖包即可:

Java包需要下面四个jar包,注意版本可能不一样:

ant.jar
jaxrpc.jar
org.eclipse.jdt.core_3.8.3.v20130121-145325.jar
wsdl4j-1.5.1.jar

当然也可以在Eclipse中启动Tomcat,方法如下:

找到类:org.apache.catalina.startup.Bootstrap.java,从名字上也可以看出是启动类,如果你此时直接运行该类,会报如下错误:

Apr 02, 2014 3:27:38 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [D:workspaceTomcat8lib], exists: [false], isDirectory: [false], canRead: [false]
Apr 02, 2014 3:27:38 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [D:workspaceTomcat8lib], exists: [false], isDirectory: [false], canRead: [false]
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina load
WARNING: Can't load server.xml from D:workspaceTomcat8confserver.xml
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina load
WARNING: Can't load server.xml from D:workspaceTomcat8confserver.xml
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina start
SEVERE: Cannot start server. Server instance is not configured.

说没有配置服务器实例,从警告语句可以知道原因:当前项目路径下没有lib和conf这两个文件夹,从而找不到服务器配置文件server.xml,当然也就不能实例化服务器了。

解决方法有两个:

①将这两个文件夹直接拷贝到项目工程下

那么这两个文件夹在哪?去Tomcat源码路径里我们可以看到只有conf配置文件夹没有lib文件夹,其实这也是我编译Tomcat的原因:lib在编译后的output文件夹中的build文件夹里,conf这里也有。当然你也可以直接从官网下载二进制包,里面是编译好的Tomcat,根路径就有这两个文件夹。将build下面的conf和lib文件夹直接拷贝到项目里,再次运行,启动成功。

Apr 02, 2014 3:37:58 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:Program FilesJavajre7in;C:WindowsSunJavain;C:Windowssystem32;C:Windows;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;D:Program FilesTortoiseGitin;C:Program Files (x86)Windows Kits8.1Windows Performance Toolkit;C:Program FilesMicrosoft SQL Server110ToolsBinn;D:Program FilesGowin;D:Program FilesVisual Leak DetectorinWin32;D:Program FilesVisual Leak DetectorinWin64;D:Program FilesJavajdk1.7.0_51\bin;D:Program Filesapache-maven-3.2.1in;D:Program FilesGitcmd;.
Apr 02, 2014 3:38:00 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Apr 02, 2014 3:38:00 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2254 ms
Apr 02, 2014 3:38:00 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Apr 02, 2014 3:38:00 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/@VERSION@
Apr 02, 2014 3:38:00 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Apr 02, 2014 3:38:00 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Apr 02, 2014 3:38:00 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/29  config=null
Apr 02, 2014 3:38:00 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 386 ms

②添加VM虚拟机运行参数

第二种方法就是添加VM参数,指定这两个文件夹的具体路径,用VM的-D参数指定catalina.home属性值为具体的路径,具体方法如下:

Run as -> Run Configuration... - > Arguments -> VM arguments中设置:

-Dcatalina.home="D:/apache-tomcat-8.0.5-src/output/build"

然后Run就可以启动了。

本文转自:http://www.cnblogs.com/lanxuezaipiao/p/3640923.html

免责声明:文章转载自《Tomcat8源码编译及导入Eclipse中研究》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇selenium 难定位元素,时间插件,下拉框定位,string如何为自己的网站添加关键字下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#皮肤使用例子.

         前段时间一直在出差,没时间写学习笔记.意识到这样对自己的学习是非常不好的,所以把自己练习的这个帖出来了,例子很简单请高手不要见笑.希望对和我一样的菜鸟有所帮助,因为所要的东西都简单故没有帖上来了,有需要的朋友可以和我联系我可以发邮件.希望能认识更多有理想的有上进心的同好之人. 1.      下载皮肤(扩展名为*.SSK)及IrisSki...

配置Nginx和Apache允许指定域名CORS跨域访问

 前后端分离开发,导致前端项目需要跨域请求后端接口,解决方法有很多,本文只介绍两个: 1. 修改后端程序代码实现允许跨域请求 2. 修改服务器配置文件实现允许跨域请求 正文: 方法1:修改后端程序代码实现允许跨域请求  以ThinkPHP为例,为了一劳永逸,直接在入口文件index.php中加入代码: header("Access-Control-Allo...

windwos源码安装mysql

进入官网下载相关的mysql安装文件,解压到指定目录如E:mysql-5.7.23-winx64下,然后进入该目录下新建data文件夹与my.ini文件,在my.ini文件中 [mysqld] port = 3306 basedir=E:/mysql-5.7.23-winx64 datadir=E:/mysql-5.7.23-winx64/data ma...

技术基础 | 重要指标和告警

本文节选自DataStax Cassandra文档,点击这里查看更多相关信息。 监控Apache Cassandra®和DataStax Enterprise(DSE)集群是一项非常重要的工作,它帮助您识别集群中的问题并及时地应对并缓解问题。 Apache Cassandra和DSE都公开了用于观察和分析的指标。Cassandra通过使用Java管理扩展...

(转)使用CruiseControl+SVN+ANT实现持续集成之二

1. 环境搭建1.1. 下载及目录介绍 从官方站点http://cruisecontrol.sourceforge.net/download.html下载一份最新的 CC 压缩包,最新的版本号为2.8.4 下载了cruisecontrol-bin-2.8.4.zip 直接解压到E盘下,文件结构如下图: apache-ant-1.7.0:CC中使用...

abp vnext2.0核心组件之模块加载组件源码解析

abp vnext是abp官方在abp的基础之上构建的微服务框架,说实话,看完核心组件源码的时候,很兴奋,整个框架将组件化的细想运用的很好,真的超级解耦.老版整个框架依赖Castle的问题,vnext对其进行了解耦,支持AutoFac或者使用.Net Core的默认容器.vnext依然沿用EF core为主,其余ORM为辅助的思想,当然EF core来实现...