tomcat7编译
2016-04-16 02:30
549 查看
本文是Tomcat源代码阅读系列的第一篇文章,在阅读Tomcat源代码之前,我们首先需要将Tomcat的源代码在IDE里面运行起来,这样方便我们阅读的过程中调试。本文总结一下在IDEA 或者 Eclipse中运行Tomcat源代码环境的搭建过程,同时我们通过Maven来负责项目的构建。
在进行搭建之前,我们首先来说一下总体的思路。我们知道Tomcat运行的时候,一部分是源代码编译以后的可运行的Jar,另外一部分则是运行时的环境(也就是我们从官方下载下来的二进制分发包中的一系列的配置文件以及目录结构,说的更直白点就是CATALINA_HOME环境变量指定的目录),本文对于第一部分采用IntelliJ IDEA 运行tomcat-7.0.42 tag的源代码,而对于第二部分运行环境,我们则直接采用tomcat-7.0.42的二进制分发包。明白了上述的思路以后,咋们就来一步步的搭建吧。
首先咋们来看看搭建完成以后的总体的目录结构,然后再一步步的去分解搭建过程。笔者搭建完以后,最终的运行结构如下图所示:
下面分别解释一下上图工程结构中涉及到的文件和目录:
.idea和tomcat-study.iml是IntelliJ IDEA的文件,如果你用Eclipse的话不会存在这两个东东 。
catalina-home是从官方下载的7.0.42的二进制分发包解压后的目录
target是Maven编译项目以后生成的文件夹,熟悉Maven的读者应该很熟悉此目录
tomcat-7.0.42-sourcecode是从Tomcat 官方仓库 下载的tags的源代码
pom.xml是Maven的配置文件,此工程中有两个pom.xml,这里运用了Maven聚合的特性。
了解了最终的结构以后,咋们就来一步步的搭建它吧。
本文假设我们将项目放在
create project structure
我们通过apache-tomcat-7.0.42的 官方地址 下载它。具体的过程如下:
download apache-tomcat-7.0.42 binary distribution
接下来我们从Tomcat的 官方SVN仓库 下载Tomcat
7.0.42源代码,具体的步骤如下:
download Tomcat 7.0.42 source code
在这一步中,我们将7.0.42的源代码迁入到了tomcat-7.0.42-sourcecode目录中。
因为我们通过maven来对项目进行构建,这就需要我们来创建一个pom.xml文件,具体过程如下:
create aggregation child project pom.xml
用你喜欢的编辑器打开pom.xml然后用下面的内容替换它的内容:
pom.xml
对于pom.xml文件我们需要注意以下几点:
因为下载代码不符合Maven默认的目录结构约定,因此需要修改
因为Tomcat源代码的编译需要wsdl4j,jaxrpc,ecj等jar包,因此需要增加相关的依赖。
这一步我么在Tomcat目录中创建pom.xml文件,这里采用了Maven中聚合的概念.具体过程如下:
create root pom.xml
用你喜欢的编辑器打开刚创建的空的pom.xml文件,修改它的内容如下:
~/develop/java/Tomcat/pom.xml
这一步需要注意,要用IDEA 打开项目根目录的pom.xml文件(也就是~/develop/java/Tomcat/pom.xml)
终于到激动人心的时刻了,我们知道任何Java程序都会有一个
IDEA中创建一个运行配置,其中最主要的就是VM options的配置了,在VM options里面填写如下的参数:
VM options
配置好后,IntelliJ IDEA的配置界面如下:
点击运行,即可看到Tomcat已经启动了,日志已经打到了IntelliJ IDEA的控制台上了,这个时候可以启动浏览器输入 http://127.0.0.1:8080 看看是否启动成功。
接下来,咋们在Bootstrap的main方法中,增加一句
console log
上面就是Tomcat7.0.42源代码在IntelliJ IDEA运行环境搭建的完整的过程。因为笔者日常开发采用的是IntelliJ IDEA,所以本文就只写了IntelliJ IDEA的搭建,但是本文采用了Maven来进行构建的,理论上来说其它IDE,比如Eclipse,只要支持Maven,则可以采用本文同样的方法进行,用Eclipse开发的童鞋,按照本文的步骤理论上也是可以运行起来的。
最后,列出几个笔者在搭建的过程中遇到的几个小问题。
迁出的时候变为了乱码,导致Maven在编译的时候编译不过,大家可以复制
另外本文最终搭建好的环境,我已经放在Github上了,不想搭建的童鞋可以直接clone一份使用。 Github仓库地址
在进行搭建之前,我们首先来说一下总体的思路。我们知道Tomcat运行的时候,一部分是源代码编译以后的可运行的Jar,另外一部分则是运行时的环境(也就是我们从官方下载下来的二进制分发包中的一系列的配置文件以及目录结构,说的更直白点就是CATALINA_HOME环境变量指定的目录),本文对于第一部分采用IntelliJ IDEA 运行tomcat-7.0.42 tag的源代码,而对于第二部分运行环境,我们则直接采用tomcat-7.0.42的二进制分发包。明白了上述的思路以后,咋们就来一步步的搭建吧。
首先咋们来看看搭建完成以后的总体的目录结构,然后再一步步的去分解搭建过程。笔者搭建完以后,最终的运行结构如下图所示:
下面分别解释一下上图工程结构中涉及到的文件和目录:
.idea和tomcat-study.iml是IntelliJ IDEA的文件,如果你用Eclipse的话不会存在这两个东东 。
catalina-home是从官方下载的7.0.42的二进制分发包解压后的目录
target是Maven编译项目以后生成的文件夹,熟悉Maven的读者应该很熟悉此目录
tomcat-7.0.42-sourcecode是从Tomcat 官方仓库 下载的tags的源代码
pom.xml是Maven的配置文件,此工程中有两个pom.xml,这里运用了Maven聚合的特性。
了解了最终的结构以后,咋们就来一步步的搭建它吧。
第一步 创建项目目录结构
本文假设我们将项目放在 ~/develop/java目录中。
create project structure
1 2 3 4 | cd ~/develop/java mkdir Tomcat cd Tomcat touch pom.xml |
第二步 下载Tomcat 7.0.42二进制分发包
我们通过apache-tomcat-7.0.42的 官方地址 下载它。具体的过程如下:download apache-tomcat-7.0.42 binary distribution
1 2 3 4 | cd ~/develop/java/Tomcat wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.tar.gz tar -zxvf apache-tomcat-7.0.42.tar.gz rm apache-tomcat-7.0.42.tar.gz mv apache-tomcat-7.0.42 catalina-home |
第三步 下载Tomcat 7.0.42 源代码
接下来我们从Tomcat的 官方SVN仓库 下载Tomcat7.0.42源代码,具体的步骤如下:
download Tomcat 7.0.42 source code
1 2 | cd ~/develop/java/Tomcat svn co http://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_42/ tomcat-7.0.42-sourcecode |
第四步 创建聚合模块pom.xml
因为我们通过maven来对项目进行构建,这就需要我们来创建一个pom.xml文件,具体过程如下:create aggregation child project pom.xml
1 2 | cd ~/develop/java/Tomcat/tomcat-7.0.42-sourcecode touch pom.xml |
pom.xml
1 2 3 4 | <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.apache.tomcat</groupId> <artifactId>Tomcat7.0</artifactId> <name>Tomcat7.0</name> <version>7.0</version> <build> <finalName>Tomcat7.0</finalName> <sourceDirectory>java</sourceDirectory> <testSourceDirectory>test</testSourceDirectory> <resources> <resource> <directory>java</directory> </resource> </resources> <testResources> <testResource> <directory>test</directory> </testResource> </testResources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3</version> <configuration> <encoding>UTF-8</encoding> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> <dependency> <groupId>ant</groupId> <artifactId>ant</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>javax.xml</groupId> <artifactId>jaxrpc</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.eclipse.jdt.core.compiler</groupId> <artifactId>ecj</artifactId> <version>4.2.2</version> </dependency> </dependencies> </project> |
因为下载代码不符合Maven默认的目录结构约定,因此需要修改
resources和
testResources为
java和
test,而不是默认的
src/main/resource和
src/test/resource,修改
sourceDirectory和
testSourceDirectory为,
java和
test,而不是默认的
src/main/java和
src/test/java.
因为Tomcat源代码的编译需要wsdl4j,jaxrpc,ecj等jar包,因此需要增加相关的依赖。
第五步 创建项目的根pom.xml文件
这一步我么在Tomcat目录中创建pom.xml文件,这里采用了Maven中聚合的概念.具体过程如下:create root pom.xml
1 2 | cd ~/develop/java/Tomcat touch pom.xml |
~/develop/java/Tomcat/pom.xml
1 2 3 4 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.imtiger</groupId> <artifactId>tomcat-study</artifactId> <name>Tomcat 7.0 Study</name> <version>1.0</version> <packaging>pom</packaging> <modules> <module>tomcat-7.0.42-sourcecode</module> </modules> </project> |
第六步 用IntelliJ IDEA 打开项目根目录的pom.xml
这一步需要注意,要用IDEA 打开项目根目录的pom.xml文件(也就是~/develop/java/Tomcat/pom.xml)
第七步 运行Tomcat
终于到激动人心的时刻了,我们知道任何Java程序都会有一个 public static void main(String… args)的入口,Tomcat本身是用Java写的,因此它也不例外,对于Tomcat来说,入口类是
org.apache.catalina.startup.Bootstrap,我们找到这个类,然后在IntelliJ
IDEA中创建一个运行配置,其中最主要的就是VM options的配置了,在VM options里面填写如下的参数:
VM options
1 2 3 4 | -Dcatalina.home=catalina-home -Dcatalina.base=catalina-home -Djava.endorsed.dirs=catalina-home/endorsed -Djava.io.tmpdir=catalina-home/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=catalina-home/conf/logging.properties |
点击运行,即可看到Tomcat已经启动了,日志已经打到了IntelliJ IDEA的控制台上了,这个时候可以启动浏览器输入 http://127.0.0.1:8080 看看是否启动成功。
接下来,咋们在Bootstrap的main方法中,增加一句
System.out.println("Have fun and Enjoy!");,然后运行一下,看看加入的信息是否被打入到了控制台,在笔者的电脑上打印可以看到信息已经输出如下信息:
console log
1 2 3 4 | Have fun and Enjoy! //ignore other log info 2013-10-14 17:19:35 org.apache.catalina.startup.Catalina start 信息: Server startup in 908 ms |
最后,列出几个笔者在搭建的过程中遇到的几个小问题。
org.apache.catalina.connector.TestRequest类的
prepareRequestBug54984中有两个特殊字符
äö,在SVN
迁出的时候变为了乱码,导致Maven在编译的时候编译不过,大家可以复制
äö替换乱码的字符即可。
CompilationUnit类中的
public boolean ignoreOptionalProblems()方法被标记为了@Override,但是其实现的接口
ICompilationUnit属于
org.eclipse.jdt.core.compiler:ecj,而3.x版本的
ICompilationUnit中没有
ignoreOptionalProblems方法,4.x的版本中才有,因此为了编译通过,本文采用了4.2.2版本。
另外本文最终搭建好的环境,我已经放在Github上了,不想搭建的童鞋可以直接clone一份使用。 Github仓库地址
相关文章推荐
- Linux 自检和 SystemTap
- Python 七步捉虫法
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 路由器的配置与调试
- 对于技术人员的出现了运行时间错误,是否要进行调试的解决方法
- C#获取网页源代码的方法
- LCL.VBS 病毒源代码
- ASP常用源代码的总结(上)
- php查看网页源代码的方法
- 讲解WordPress开发中一些常用的debug技巧
- JavaScript程序设计之JS调试
- 可以用来调试JavaScript错误的解决方案
- 如何调试异步加载页面里包含的js文件
- jQuery下的Ajax调试步骤
- 调试一段PHP程序时遇到的三个问题
- JavaScript高级程序设计 错误处理与调试学习笔记
- Javascript调试脚本的经验之谈第1/2页
- 在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
- Android App调试内存泄露之Cursor篇
- Lua的编译、执行和调试技术介绍