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	omcat]是我的tomcat源码存放目录,注意:必须联网编译
G:learning	omcat>ant ide-eclipse

编译完成后,就可以将tomcat导入到Eclipse中,如下所示

image

发现有一些依赖不存在,那么我们就修改依赖

需要增加ANT_HOME和TOMCAT_LIBS_BASE两个变量,入下图所示,

image

大家在设置变量值得时候一定要搞清楚自己编译时下载JAR包的位置

image

完成后就可以正常编译了。

image

2.1.3 运行项目

这个与我们平时运行项目一样,如下图所示:

image

运行完成后,我们访问:http://localhost:8080,如下图所示

image

接下来大家就可以以DEBUG模式进行Tomcat调试了。

2.2 将tomcat源码编译为发布版本

#在源码目录中直接执行ant即可
G:learning	omcat>ant

完成后会生成G:learning omcatoutputuild目录,这个目录里面的内容看起来大家都很熟悉了,这与官网下载的发布版本一模一样。

大家启动G:learning omcatoutputuildinstartup.bat就可以运行tomcat了。

运行完后访问:http://localhost:8080,如下图所示

image

参考:

[1]eclipse 导入tomcat7源码

[2]Tomcat 7 源码分析 - 下载 tomcat source code 并导入eclipse

原文地址:https://www.cnblogs.com/wlzjdm/p/6972121.html