美文网首页
编译Tomcat9源码

编译Tomcat9源码

作者: qiongleee | 来源:发表于2017-01-17 22:22 被阅读0次

    参考:http://tomcat.apache.org/tomcat-9.0-doc/building.html

    1.下载JDK8

    安装JDK8

    编译Tomcat9需要安装JDK8
    下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

    设置环境变量:

    JAVA_HOME
    D:\dev\Java\jdk1.8.0_72
    PATH新增:%JAVA_HOME%\bin

    2.安装Ant1.9.5或者更高版本

    下载地址:http://ant.apache.org/bindownload.cgi

    解压到D:\dev\ant

    设置环境变量:

    ANT_HOME
    D:\dev\ant\apache-ant-1.9.6
    PATH新增:%ANT_HOME%\bin

    3.获取Tomcat9的源码

    地址:http://archive.apache.org/dist/tomcat/tomcat-9/
    下载是windows版的源码即zip版的源码:apache-tomcat-9.0.0.M17-src.zip

    然后将其解压到一个目录下(D:\dev\workspace),即源码所在目录是:D:\dev\workspace\apache-tomcat-9.0.0.M17-src。

    4.配置下载区域

    编译Tomcat要下载大量的依赖库。强烈推荐为这些库配置下载区域。
    进入tomcat源码的目录,
    即D:\dev\workspace\apache-tomcat-9.0.0.M17-src,

    将其中的build.properties.default文件重命名为build.properties,
    并修改base.path为:
    base.path=D:/dev/workspace/apache-tomcat-9.0.0.M17-src/../lib-tomcat9

    5.编译Tomcat

    ${tomcat.source}表示tomcat源码所在目录。
    cd ${tomcat.source}
    ant


    cd D:\dev\workspace\apache-tomcat-9.0.0.M17-src
    ant

    运行这条命令将要下载编译Tomcat所需要的库文件到base.path指定的目录中。
    一旦编译成功,一个可用的Tomcat将会被产生在${tomcat.source}/output/build目录中,且能够被脚本启动和关闭。

    6.使用Eclipse编译

    (1)生成Eclipse项目

    Ant的target 提供一种便捷下载所有二进制依赖关系,和在源代码树的根目录下创建Eclipse项目及classpath文件。
    cd ${tomcat.source}
    ant ide-eclipse

    即:
    cd D:\dev\eclipse\workspace\tomcat
    ant ide-eclipse

    (2)增加Classpath变量

    启动Eclipse,打开Preferences对话框,选择Java->Build Path->Classpath Variables,增加两个Classpath Variables:

    TOMCAT_LIBS_BASE:

    D:/dev/workspace/apache-tomcat-9.0.0.M3-src/../lib-tomcat9
    (路径和在build.properties中的base.path设置一样,即存放的是已经下载的二进制依赖)

    ANT_HOME:

    D:\dev\ant\apache-ant-1.9.6
    (Ant的根目录)

    (3)配置JRE:

    打开Preferences对话框,
    选择Java->Installed JREs->Add。选择JRE Home:D:\dev\Java\jdk1.8.0_72;
    选择Java -> Compiler,设置Compiler compliance level 等于当前JDK的版本(1.8),默认一般是最新版本。

    单击OK,设置完成。

    (4)导入Tomcat源码到Eclipse中

    File->Import->General->Existing Projects into Workspace->选择Tomcat源码的根目录,单击完成即可导入。
    导入完成之后,项目自动完成编译。

    (5)启动

    在Eclipse中找到org.apache.catalina.startup.Bootstrap,使用它作为主类,选中右击“Run As->Run configurations”,然后双击”Java Aplication”就会出来一个新的”Bootstrap”:
    进行如下设置:
    Name:Bootstrap start
    Project:apache-tomcat-9.0.0.M17-src
    Main class(Search而来):org.apache.catalina.startup.Bootstrap

    Program arguments:start
    VM arguments:-Dcatalina.home="D:\dev\workspace\apache-tomcat-9.0.0.M17-src\output\build"

    单击Apply,即可保存设置
    接着单击Run,Tomcat即可启动。

    打开浏览器,输入http://127.0.0.1:8080/examples/ 看看例子。

    (6)停止

    与(5)同样的方法设置Bootstrap stop,不同之处在于Program arguments:stop

    (7)调试Tomcat源码的方法
    选中org.apache.catalina.startup.Bootstrap,单击右键Debug As->Debug configurations

    7.简单的源代码阅读指南

    包名 用途
    javax servlet/jsp/el相关的api
    org.apache.catalina tomcat自身架构
    org.apache.coyote http、ajp协议实现相关的类
    org.apache.el 实现el规范
    org.apache.jasper 实现jsp规范、编译jsp文件
    org.apache.juli tomcat的日志系统
    org.apache.naming jndi实现
    org.apache.tomcat tomcat的工具包、net、digester xml解析器

    阅读顺序:
    可以从org.apache.catalina.startup.Bootstrap这个类开始看起,
    然后到org.apache.catalina.startup.Catalina,
    在Catalina类中会触发conf/server.xml文件的解析,
    这时要看org.apache.tomcat.util.digester中的类,
    解析的过程中会用到org.apache.catalina.startup包中的很多RuleSet类,
    server.xml文件解析完后,会生成org.apache.catalina.core包中的各种StandardXXX类的实例,
    比如StandardServer、StandardService、StandardEngine等等,
    这些Standard组件都是有生命周期的,接着会调用他们的init、start等方法,
    会触发下面这些组件进入init、start状态
    org.apache.catalina.connector.Connector
    org.apache.coyote.http11.Http11Protocol
    org.apache.tomcat.util.net.JIoEndpoint
    在JIoEndpoint(或NioEndpoint、AprEndpoint)中会监听8080这样的端口,
    有请求进来了,就进行相关的io操作,接着转到org.apache.coyote包中的相应类进行协议解析,
    生成org.apache.catalina.connector.Request和org.apache.catalina.connector.Response实例,
    然后转到各种Valve、应用Filter,最后到达应用的Servlet/JSP。

    下图描述了Tomcat7的核心架构:

    Tomcat7核心架构图

    相关文章

      网友评论

          本文标题:编译Tomcat9源码

          本文链接:https://www.haomeiwen.com/subject/rkfvbttx.html