为了方便分析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,如下图所示

参考:

[1]eclipse 导入tomcat7源码

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

Tomcat启动分析(二)-自己编译Tomcat的更多相关文章

  1. [转]Tomcat启动分析

    [转]Tomcat启动分析 原帖 http://docs.huihoo.com/apache/tomcat/heavyz/01-startup.html 以下摘录了部分 --------------- ...

  2. 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 ...

  3. Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)

    原文:http://www.cnblogs.com/heshan664754022/archive/2013/03/27/2984357.html Tomcat启动分析(我们为什么要配置CATALIN ...

  4. Tomcat源码分析一:编译Tomcat源码

    Tomcat源码分析一:编译Tomcat源码 1 内容介绍 在之前的<Servlet与Tomcat运行示例>一文中,给大家带来如何在Tomcat中部署Servlet应用的相关步骤,本文将就 ...

  5. Tomcat源码分析 (七)----- Tomcat 启动过程(二)

    在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomcat的初始化,包括server.xml的解析.实例化各大组件.初始化组件等逻 ...

  6. Tomcat启动分析(一)-从脚本到main函数分析

    当我们在Linux下启动tomcat的时候,通过ps查看其进程信息为,接下来的内容我们就以此进行分析: [tomcat@fdd ~]$ ps -ef |grep java tomcat : tty1 ...

  7. SpringBoot源码解析:tomcat启动分析

    >> spring与tomcat的启动分析:war包形式 tomcat:xml加载规范 1.contex-param: 初始化参数 2.listener-class: contextloa ...

  8. Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程

    Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计   Connector要实现的 ...

  9. maven项目使用tomcat启动报错:Server Tomcat v8.5 Server at localhost failed to start

    背景说明:1)该项目为maven项目,使用的maven的本地仓库里有不少之前使用过下载的jar包: 2)从svn下载该项目后,无报错情况: 3)部署到tomcat启动报错 如下 : 4)在网上搜索了很 ...

随机推荐

  1. Python【day 18】面向对象-类和类的关系

    一.昨日内容回顾 成员 1.变量 1.成员变量--最常见 1.写法: 变量前面加了self就是成员变量 这里的self表示当前对象 一般是在构造方法中定义 2.调用: 对象.成员变量 3.作用: 可以 ...

  2. ArcGIS api for JavaScript 3.27 聚合(cluster)

    基础聚合:只聚合,不显示聚合的数量 // Basic Clustering require([ "esri/map", "esri/layers/FeatureLayer ...

  3. [Linux] 常见的并发模型

    进程&线程(Apache) C10K问题异步非阻塞(Nginx,Libevent,NodeJS) 开发时复杂度高协程 (Golang Erlang lua) goroutine channel ...

  4. powershell之utf-8编码

    每次启动powershell后输入:chcp 65001

  5. Spring汇总

    如今做Java尤其是web几乎是避免不了和Spring打交道了,但是Spring是这样的大而全,新鲜名词不断产生,学起来给人一种凌乱的感觉,我就在这里总结一下,理顺头绪. Spring Spring ...

  6. 2019 SDN上机第5次作业

    2019 SDN上机第5次作业 1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于: 描述官方教程实现了一个什么样的交换机功能? 答:官方教程实现了一 ...

  7. Android开发笔记:Android开发环境搭建

    基于Eclipse开发 1. 安装JDK 首先进入JDK下载页面,选择需要的版本下载安装. JDK 下载地址:https://www.oracle.com/technetwork/java/javas ...

  8. Ubuntu sudo 免密码

    sudo visudo 这里默认打开的是 nano 编辑器,不习惯可以把默认编辑器换成 vim, 参考 Ubuntu 修改默认编辑器 test ALL=NOPASSWD: ALL

  9. Linux 学习记录五(软件的安装升级).

    一.gcc gcc是Linux上面最标准的C语言的编译程序,用来源代码的编译链接. gcc -c hello.c 编译产生目标文件hello.o gcc -O hello.c 编译产生目标文件,并进行 ...

  10. Linux 编译工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake

    前言 编译器的主要工作流程: 源码(Source Code)>> 预处理器(Preprocessor)>> 编译器(Compiler)>> 汇编程序(Assembl ...