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,如下图所示

参考:
[2]Tomcat 7 源码分析 - 下载 tomcat source code 并导入eclipse
Tomcat启动分析(二)-自己编译Tomcat的更多相关文章
- [转]Tomcat启动分析
[转]Tomcat启动分析 原帖 http://docs.huihoo.com/apache/tomcat/heavyz/01-startup.html 以下摘录了部分 --------------- ...
- Tomcat启动分析(转自:http://docs.huihoo.com/apache/tomcat/heavyz/01-startup.html)
Tomcat启动分析 1 - Tomcat Server的组成部分 1.1 - Server A Server element represents the entire Catalina servl ...
- Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)
原文:http://www.cnblogs.com/heshan664754022/archive/2013/03/27/2984357.html Tomcat启动分析(我们为什么要配置CATALIN ...
- Tomcat源码分析一:编译Tomcat源码
Tomcat源码分析一:编译Tomcat源码 1 内容介绍 在之前的<Servlet与Tomcat运行示例>一文中,给大家带来如何在Tomcat中部署Servlet应用的相关步骤,本文将就 ...
- Tomcat源码分析 (七)----- Tomcat 启动过程(二)
在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomcat的初始化,包括server.xml的解析.实例化各大组件.初始化组件等逻 ...
- Tomcat启动分析(一)-从脚本到main函数分析
当我们在Linux下启动tomcat的时候,通过ps查看其进程信息为,接下来的内容我们就以此进行分析: [tomcat@fdd ~]$ ps -ef |grep java tomcat : tty1 ...
- SpringBoot源码解析:tomcat启动分析
>> spring与tomcat的启动分析:war包形式 tomcat:xml加载规范 1.contex-param: 初始化参数 2.listener-class: contextloa ...
- Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程
Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计 Connector要实现的 ...
- maven项目使用tomcat启动报错:Server Tomcat v8.5 Server at localhost failed to start
背景说明:1)该项目为maven项目,使用的maven的本地仓库里有不少之前使用过下载的jar包: 2)从svn下载该项目后,无报错情况: 3)部署到tomcat启动报错 如下 : 4)在网上搜索了很 ...
随机推荐
- .netcore 中使用开源的AOP框架 AspectCore
AspectCore Project 介绍 什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect- ...
- 通过C#代码调用Dynamics 365 Web API执行批量操作
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- [转]uipath team svn
本文转自:https://docs.uipath.com/studio/docs/svn-version-control SVN Version Control Suggest Edits Openi ...
- 微信两种签名算法MD5和HMAC-SHA256
在做微信接口开发的过程中, 有时候发现会提示签名校验失败, 一模一样的签名逻辑就是有些接口跑步通, 找了一圈发现挺坑的; 原来是有些接口的signType签名类型有区别, 有些接口signType要求 ...
- JS For
JS For 循环可以将代码块执行指定的次数. JavaScript 循环 document.write(cars[0] + "<br>"); document.wri ...
- 微信小程序获取input输入框内容
1.wxml <input class="weui-input" type='number' bindinput="emailInput"/> ...
- 【新人填坑008】django升级2.x后报'WSGIRequest' object has no attribute 'session',
1.X 到2.x后中间件定义的名字也有所不同 改一下就好了 在setting文件中将原先的 MIDDLEWARE_CLASS 改成MIDDLEWARE 如果还运行不成功 注释掉标白线的那一行 删掉也 ...
- go语言设计模式之abstract factory
这个代码太多了,调了一晚上. 只能立图证明我测试通过了哈. 真的是工厂的工厂,有点深.
- MySQL 的 4 种隔离级别,你了解么?
1.什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做.事务的结束 ...
- leetcode 1041. 困于环中的机器人
题目地址 : https://leetcode-cn.com/problems/robot-bounded-in-circle/ 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方.机器人可以 ...