您的位置:首页 > 运维架构 > Tomcat

一步一步在Eclipse中搭建Tomcat8.0开发环境

2017-09-03 12:13 465 查看

写在前面的话

Tomcat是一个很流行的Java EE容器,绝大部分时候我们都只停留在简单的使用它而没有明白真正的实现。为了更方便的看Tomcat的源码,第一步要做的事情就是把Tomcat的源码在Eclipse中跑起来,以下内容就是在Eclipse中搭建Tomcat开发环境的过程。

其实网上已经有不少关于如何搭建Tomcat源码的博客了,但仔细搜索之后可以发现:

文章大部分都是转载的,转载就会有内容不完整或格式错误等问题

原创文章是基于Tomcat6.0,已经是10年前的了,所以有些过时了

网上的搭建过程比较复杂,省略了一些步骤,新手很难上手

原创和转载的文章几乎都是在IntelliJ IDEA中运行,这对于已经习惯了Eclipse的用户来说,只具有参考价值,不具有实战意义

基于以上原因,决定自己动手在Eclipse中搭建一次。

构建环境

操作系统:win10

JDK: 1.7.0_67

Eclipse: Mars.1 Release (4.5.1)

Tomcat: 8.0.46

构建过程

1. 源码下载

http://tomcat.apache.org/download-80.cgi下载源码,我选择的版本为8.0.46,选择zip格式即可:



文件大概为7M多,下载好后,解压,可得下图的文件夹结构:



2. 建立pom.xml文件

因为源代码使用了部分第三方的jar包,这里我打算用maven来管理这些依赖,所以只需要添加pom.xml文件即可,这样就不会对源代码造成污染(不会向其中增加依赖的jar包)。

用你喜欢的文本编辑器,在源码文件夹apache-tomcat-8.0.46-src中新建一个pom.xml文件,内容如下:

<?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>Tomcat8</artifactId>
<name>Tomcat8.0</name>
<version>8.0.46</version>

<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.9</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.6.1</version>
</dependency>

<!-- Below dependencies are for test only -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

代码很明了,首先声明了本次构建的GAV(GroupId,ArtifactId和Version),接下来声明了依赖的第三方jar包。需要注意的是:

网上的博客中,由于是基于Tomcat6.0版本构建,依赖的jar包的版本也比较旧,在本次构建中,已经更改为更高的版本

Ant库的GroupId也由之前的ant变成了现在的org.apache.ant,注意区别

最后两个依赖:junit和easymock,是源码中测试代码用到的jar包,如果不想导入测试代码,可以不依赖于这两个jar包

3. 将项目导入Eclipse

有了pom.xml文件以后,接下来将apache-tomcat-8.0.46-src这个文件夹以maven项目的方式导入到Eclipse:



此时Eclipse会初始化这个项目,并自动下载jar包,第一次需要花费几分钟,请耐心等待。导入完成后,在Eclipse中,Window->Show View->Other->Package Explorer切换到Package Explorer视图,是这样的:



如果需要,可以把JDK版本替换为本地已安装的版本。

4. 设置Java源代码路径

apache-tomcat-8.0.46-src这个文件夹结构中,源代码在java文件夹中,测试代码在test文件夹中。此时需要将java文件夹设置为这个项目的Source Folder,让Eclipse知道从这个文件夹下面去找java类。在java文件夹上右键->Build Path->Use as Source Folder,如图:



之后就可以看到java源代码包结构了。如果代码显示很多编译错误,像下面这样,可以多打开几个报错的java文件,查看错误原因。:



我这里是JDK版本太低了(我也不知道为什么在Eclipse中导入项目后,会自动使用JDK1.5版本来编译,不过好在可以手动修改编译版本),修复办法为:项目上右键->Properties->Java Compiler,如果勾选了Enable project specific settings,那么确保下面的Compiler compliance level是1.7:



如果没有勾选Enable project specific settings,则需要确保右边的Configure Workspace Settings弹窗中Compiler compliance level是1.7:



之后就没有编译错误了。

5. 设置测试代码路径

这是一个可选的步骤,如果不需要运行测试代码,这一步可以忽略。

Tomcat的单元测试代码放在test文件夹中,如果需要查看,则需要将test文件夹以同样的方式设置为Source Folder:



设置好后,报编译错误,说有个CookieFilter的类找不到:



仔细观察这个TestCookieFilter类,发现import中没有声明导入这个CookieFilter,于是可以肯定这个类不是第三方的类,它一定在Tomcat的源代码中,换句话说,它一定在Workspace中。所以使用Eclipse的组合键Ctrl+Shift+R并输入文件名,尝试打开Workspace中的Resource:



果然有这个类,只是它在webapps/examples/WEB-INF/class文件夹的util包中,打开这个class文件夹,发现下面还有好多Java代码,这些应该都是运行测试需要的。所以我们把这个webapps/examples/WEB-INF/classes也设置为Source Folder,让Eclipse可以去这里查找Java文件:



这次CookieFilter找到了,刚才的错误消失了,但是又发现一个错误,有个bug类的包路径不对:



一看上方的package声明,该类应该放在org.apache.tomcat路径下,再看看这个类目前的位置,在webapp/WEB-INF/classes/org/apache/tomcat路径下,所以就把webapp/WEB-INF/classes设置为Source Folder:



最后,就不报错了。再来看下最后的结果,整个过程中,我们总共把4个文件夹设置成了Source Folder,其中:

java文件夹是Tomcat源代码的目录

后面三个文件夹是Tomcat测试代码的目录



到这里,Eclipse中搭建Tomcat的开发环境就算是完成了。

验证

启动日志验证

接下来,我们找到(可用组合键Ctrl+Shift+O直接打开)Tomcat的启动类org.apache.catalina.startup.Bootstrap,在这个类的main方法的第一行加入一点内容:



并且在org.apache.catlina.startup.Catalina类的start方法中加入一点内容:



接下来在Bootstrap类上右键->Run as->Java Application,运行Bootstrap类,观察控制台的输出:



以及结尾的日志:



从日志上可以看到,Tomcat已经成功启动,并且我们新增的代码也已经输出。

浏览器验证

Tomcat启动好以后,老规矩,在浏览器中输入localhost:8080,再次确认Tomcat是否真的启动了:



从结果中可以看到,Tomcat确实已经正常运行。有了源代码的开发环境,阅读Tomcat源码就方便多了。

总结

1. 对于pom.xml文件,前4个dependency是必不可少的,至于为什么需要这些依赖,代码中哪里用到了这些依赖,可以尝试删除某个<dependency>结构,然后Eclipse重新构建整个项目(Eclipse的菜单上Project->Clean...),看看代码中哪些地方报错了。

2. 其实写这篇文章之前,我也踩过很多坑,比如导入项目之后,由于Eclipse自动创建.project的文件不完整,导致在项目上右键没有出现buildpath,pom.xml中声明的依赖也看不见,后来经过搜索,需要修改.project文件为以下内容(其中第一个<buildCommand>和第一个<nature>是Eclipse没有自动生成的):

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Tomcat8</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>

3. 网上的东西不一定都对,还是要亲自测试一下才知道。

比如这篇文章中提到:运行Bootstrap类需要加入一堆的VM参数,但我实测下来并不需要这么做。

再比如这篇文章中在处理CookieFilter类找不到的时候,直接把这个类注释掉了:

报错的类是:TestCookieFilter.java 报里面的CookieFilter.java类不存在,你可以选择注释,也可以选择实现该filter,我是注释掉的。

但我本着尽量不修改源代码的目标,还是解决了这个办法。

再比如这篇文章,说需要在源代码路径外新建一个study文件夹,并将源代码放于其中,再新建一个pom,并将源代码作为其module。但实际上我没有这么做,也并不需要这么做。

全文完。

参考页面:

http://www.lxway.com/269821286.htm

http://www.jb51.net/article/95120.htm

/detail/2658833245.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Tomcat 源码