Tomcat启动分析(二)-自己编译Tomcat
为了方便分析Tomcat源码,利用大家习惯的方式来进行Debug调试,那么如何将Tomcat源码导入到Eclipse呢,这就是本文的重点
1 准备
1.1 获取Tomcat源码
获取tomcat源码有多种方式
1)Git方式从github获取,地址:https://github.com/apache/tomcat 或者 git://git.apache.org/tomcat.git
2)SVN方式从Apache官网获取,地址:http://svn.apache.org/repos/asf/tomcat/
3)直接下载源码,地址:http://tomcat.apache.org/download-[tomcat-version]0.cgi
下载下来之后,首先建议大家先看一下BUILDING.txt,这个文档中有详细的编译说明,包括编译依赖、编译过程。同时阅读build.xml,这个里面会有各种编译参数
1.2 安装配置ant
获取ant,地址:http://ant.apache.org/bindownload.cgi
下载后解压,并配置ANT_HOME及将%ANT_HOME%/bin添加到path中,方式同JDK一样
1.3 安装配置JDK
这个没有什么要说的,很基本的。不过需要注意的是在building.txt中会有当前源码对JDK版本的要求。
2 编译
2.1 将tomcat源码编译为eclipse可导入的项目
在执行之前大家先看两项内容
2.1.1 building.txt中的说明
(3.2) Building 1. The build is controlled by creating a ${tomcat.source}/build.properties file. It is recommended to always create the file, because of unfortunate default value of base.path property. You may start with the following content for the file: # ----- 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 //重点:需要将build.properties.default重命名为build.properties,并且修改bath.path为源码存放目录 2. Configure base.path property by adding it to the ${tomcat.source}/build.properties file. The base.path property specifies the place where Tomcat dependencies required by the build are downloaded. It is recommended to place this directory outside of the source tree, so that you do not waste your time re-downloading the libraries. * NOTE: The default value of the base.path property configures the build script to download the libraries required to build Tomcat to the ${user.home}/tomcat-build-libs directory. * NOTE: Users accessing the Internet through a proxy must use the properties file to indicate to Ant the proxy configuration. The following properties should be added to the ${tomcat.source}/build.properties file. proxy.use=true proxy.host=proxy.domain proxy.port=8080 proxy.user=username proxy.password=password See Apache Ant documentation for the <setproxy> task for details.
2.1.2 build.xml
<!-- ============================ IDE Support ============================ –> //可以将源码编译为Eclipse或者NetBeans项目 <!-- ============================ Eclipse ================================ --> <target name="ide-eclipse" depends="download-compile, extras-webservices-prepare, download-test-compile" description="Prepares the source tree to be built in Eclipse"> <!-- Copy the sample project files into the root directory --> <copy file="${tomcat.home}/res/ide-support/eclipse/eclipse.project" tofile="${tomcat.home}/.project"/> <copy file="${tomcat.home}/res/ide-support/eclipse/eclipse.classpath" tofile="${tomcat.home}/.classpath"/> <!-- Copy compiler settings file --> <mkdir dir="${tomcat.home}/.settings" /> <copy file="${tomcat.home}/res/ide-support/eclipse/org.eclipse.jdt.core.prefs.properties" tofile="${tomcat.home}/.settings/org.eclipse.jdt.core.prefs"/> <echo>Eclipse project files created. Read the Building page on the Apache Tomcat documentation site for details on how to configure your Eclipse workspace.</echo> </target> <!-- ============================ NetBeans =============================== --> <target name="ide-netbeans" depends="-ide-netbeans-protect,-ide-netbeans-create" description="Create NetBeans project files only if none exist"> </target> <target name="-ide-netbeans-protect" if="tomcat-nb.home.exists" depends="-ide-netbeans-check"> <!-- Protect existing NetBeans project files --> <echo>NetBeans project files already exist and have been protected! Use the "ide-netbeans-replace" target if you wish to overwrite them.</echo> </target> <target name="-ide-netbeans-check"> <!-- protect existing files if the NetBeans project directory exists --> <condition property="tomcat-nb.home.exists"> <available file="${tomcat-nb.home}" type="dir"/> </condition> </target> <target name="ide-netbeans-replace" depends="-ide-netbeans-create"> <!-- Bypass protection of any existing NetBeans project files --> </target> <target name="-ide-netbeans-create" unless="tomcat-nb.home.exists"> <!-- Unconditionally create or overwrite default NetBeans project files --> <property name="tomcat-nb.dist" value="${tomcat.home}/res/ide-support/netbeans" /> <mkdir dir="${tomcat-nb.home}/"/> <copy todir="${tomcat-nb.home}" overwrite="true"> <fileset dir="${tomcat-nb.dist}"/> </copy> <echo>NetBeans project files created. Read the Building page on the Apache Tomcat documentation site for details on how to customise your NetBeans project.</echo> </target>
2.1.3 编译项目
#执行如下命令,其中[G:\learning\tomcat]是我的tomcat源码存放目录,注意:必须联网编译
G:\learning\tomcat>ant ide-eclipse
编译完成后,就可以将tomcat导入到Eclipse中,如下所示
发现有一些依赖不存在,那么我们就修改依赖
需要增加ANT_HOME和TOMCAT_LIBS_BASE两个变量,入下图所示,
大家在设置变量值得时候一定要搞清楚自己编译时下载JAR包的位置
完成后就可以正常编译了。
2.1.3 运行项目
这个与我们平时运行项目一样,如下图所示:
运行完成后,我们访问:http://localhost:8080,如下图所示
接下来大家就可以以DEBUG模式进行Tomcat调试了。
2.2 将tomcat源码编译为发布版本
#在源码目录中直接执行ant即可
G:\learning\tomcat>ant
完成后会生成G:\learning\tomcat\output\build目录,这个目录里面的内容看起来大家都很熟悉了,这与官网下载的发布版本一模一样。
大家启动G:\learning\tomcat\output\build\bin\startup.bat就可以运行tomcat了。
运行完后访问:http://localhost:8080,如下图所示
参考: