当前位置: 代码迷 >> Eclipse >> Tomcat源码导入Eclipse并运作
  详细解决方案

Tomcat源码导入Eclipse并运作

热度:63   发布时间:2016-04-23 00:39:13.0
Tomcat源码导入Eclipse并运行

今天成功的导入,编译并运行了Tomcat源码,主要参考的下面三个文档,有的直接复制过来了,有的只写链接吧。它们中导入源码方式不同,有的也包括了编译过程中遇到的问题,要如何解决,以后如果再导入发现不行的话可以多参考参考:

1. http://jackycheng2007.iteye.com/blog/1477845

2. http://blog.csdn.net/cuidiwhere/article/details/12361425

3. http://zhoushu126.iteye.com/blog/1343718

?

第一篇:下载-编译-解决问题-运行(简明扼要)

准备好好研究学习一下tomcat 7 的源代码,那么第一步就是下载,导入eclipse并且运行。?
1. 下载源代码?
tomcat 7 的源代码在svn上,所以你需要svn的安装。创建一个目录tomcat7,并用命令行进入这个目录,之后用下面的命令下载?

Java代码??收藏代码
  1. svn?co?http://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_27/?./??


这里我下载的是tag里面的,你也可以下载别的branch,比如trunk,但是我觉得tag的是比较稳定的。?

2. 创建eclipse项目?
tomcat 7 是用ant来构建和管理的,所以你需要安装ant。在tomcat7目录下执行:?

Java代码??收藏代码
  1. ant?ide-eclipse??



其实,你看一下build.xml就知道它就是copy了两个现成的文件?

Java代码??收藏代码
  1. <target?name="ide-eclipse"?depends="deploy,?extras-webservices-prepare"??
  2. ??????????description="Prepares?the?source?tree?to?be?built?in?Eclipse">??
  3. ??
  4. ????<!--?Copy?the?sample?project?files?into?the?root?directory?-->??
  5. ????<copy?file="${tomcat.home}/res/ide-support/eclipse/eclipse.project"?tofile="${tomcat.home}/.project"/>??
  6. ????<copy?file="${tomcat.home}/res/ide-support/eclipse/eclipse.classpath"?tofile="${tomcat.home}/.classpath"/>??
  7. ??
  8. ????<echo>Eclipse?project?files?created.??
  9. Read?the?Building?page?on?the?Apache?Tomcat?documentation?site?for?details?on?how?to?configure?your?Eclipse?workplace.</echo>??
  10. ??</target>??



这样你就可以在eclipse里面导入这个tomcat 项目了?
3. 在eclipse里面添加lib变量?
导入项目以后你会发现有几个错误导致不能编译,其实是缺少lib变量:?
ANT_HOME, 指向ant的安装目录?
TOMCAT_LIBS_BASE,指向依赖库的位置,如果你还没有在tomcat7下执行:?

Java代码??收藏代码
  1. ant??


来build和deploy这个项目,就先执行它。?
这样它就会下载需要的lib。
如果你不确定放到哪里了,你可以搜索ecj-3.7.2,把它的上级目录指定给这个变量就好了。?
添加好之后,eclipse会提示你重新build项目,当然要。之后就会没有错误了。?

4. 运行?
右击这个tomcat-7.0.x项目,选择run as / Java Application,它会自动搜索项目中的所有main函数,你选择org.apache.catalina.startup.Bootstrap的main函数就是。 选择好了之后,你也许会看到有tomcat-start和tomcat-stop两个启动项让你选择,其实这个是tomcat为你准备好的launch文件,在tomcat7\res\ide-support\eclipse下面有两个launch文件。也就是说你直接可以在run configuration里面找到这两个启动配置,从而加以利用。在run configuration的配置里面的Common tab里面你还可以设置选中debug,从而你可以在debug菜单下显示它了。?
问题:为什么这个函数的注释写仅仅为了测试:?

Java代码??收藏代码
  1. /**?
  2. ????*?Main?method,?used?for?testing?only.?
  3. ????*?
  4. ????*?@param?args?Command?line?arguments?to?be?processed?
  5. ????*/??
  6. ???public?static?void?main(String?args[])?{??


5. 启动好以后你可以打开下面的网址:?

Java代码??收藏代码
  1. http://localhost:8080/??



你会看到欢迎页面,大功告成!你可以在main里面设置断点debug了。?

6. 配置更为详细的log
?
看更为详细的log有利于我们准确地跟踪tomcat的执行过程。tomcat的日志框架允许我们配置第三方的log系统实现,比如log4j。默认情况下它使用java.util.logging.?
需要两步来实现更为详细的log的配置?
1)运行参数,加上?

Java代码??收藏代码
  1. -Djava.util.logging.config.file=${project_loc:/tomcat-7.0.x}/conf/logging.properties??


2)修改log level的配置,把FINE,改成FINEST。并加入:?

Java代码??收藏代码
  1. org.apache.catalina.level?=?FINEST??

?

第二篇:包括了许多的问题的处理方法,参考了第一篇

?

本文主要参考这篇博客?http://jackycheng2007.iteye.com/blog/1477845,但是整个过程遇到了另外的问题,特记录如下


1. 获取源代码

? ?方式一:从官网http://tomcat.apache.org/download-70.cgi?直接下载,官网提供了Binary 和 Source Code两种下载方式,要研究tomcat源代码,选择source code 方式下载

? ?方式二:利用svn获取源代码,先安装svn,再新建目录tomcat7, 接着在目录里执行以下命令

[java]?view plaincopy
  1. svn?co?http://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_35/?./??

? ? tags目录下有不同版本的tomcat 源码,这里下载的版本是7.0.35

2. 将源码导入eclipse

? ? tomcat的源码是利用ant来创建和管理的。先安装ant,再执行ant ide-eclipse,该命令执行成功后,会在tomcat7目录下生产.project和.classpath两个文件,即成为eclipse工程了。这样你就可以将tomcat源码导入eclipse了。
? ? ?执行ant ide-eclipse时报错:
??
[java]?view plaincopy
  1. BUILD?FAILED?build.xml:2361:?The?following?error?occurred?while?executing?this?line:??
  2. BUILD?FAILED?build.xml:2449:?Compile?failed;?see?the?compiler?error?output?for?details.??
查看编译的错误日志为:
[java]?view plaincopy
  1. ?build-tomcat-dbcp:??
  2. ?????[copy]?Copying?64?files?to?E:\usr\share\java\tomcat7-deps\dbcp??
  3. ?????[move]?Moving?64?files?to?E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp??
  4. ????[javac]?Compiling?64?source?files?to?E:\usr\share\java\tomcat7-deps\dbcp\classes??
  5. ????[javac]?warning:?[options]?bootstrap?class?path?not?set?in?conjunction?with?-source?1.6??
  6. ????[javac]?E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp\dbcp\BasicDataSource.java:53:?error:?Bas??
  7. icDataSource?is?not?abstract?and?does?not?override?abstract?method?getParentLogger()?in?CommonDataSource??
  8. ????[javac]?public?class?BasicDataSource?implements?DataSource?{??
  9. ????[javac]????????^??
  10. ????[javac]?E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp\dbcp\DelegatingStatement.java:46:?error:??
  11. ?DelegatingStatement?is?not?abstract?and?does?not?override?abstract?method?isCloseOnCompletion()?in?Statement??
  12. ????[javac]?public?class?DelegatingStatement?extends?AbandonedTrace?implements?Statement?{??
  13. ????[javac]????????^??
  14. ????[javac]?E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp\dbcp\DelegatingPreparedStatement.java:57??
  15. :?error:?DelegatingPreparedStatement?is?not?abstract?and?does?not?override?abstract?method?isCloseOnCompletion()?in?Stat??
  16. ement??
根据日志错误推测,依赖的dbcp相关的jar版本不对。本机安装的jdk版本是1.7的,于是在本机又装了一个1.6的jdk,并修改相关环境变量让JAVA_HOME指向jdk 1.6目录。再次执行ant ide-eclipse得到了
?BUILD SUCCESSFUL
Total time: 2 minutes 57 seconds
?
也注意到 build-tomcat-dbcp的构建日志更新为:
[java]?view plaincopy
  1. build-tomcat-dbcp:??
  2. ?????[copy]?Copying?64?files?to?E:\usr\share\java\tomcat7-deps\dbcp??
  3. ?????[move]?Moving?64?files?to?E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp??
  4. ????[javac]?Compiling?64?source?files?to?E:\usr\share\java\tomcat7-deps\dbcp\classes??
  5. ????[javac]?注意:某些输入文件使用或覆盖了已过时的?API。??
  6. ????[javac]?注意:要了解详细信息,请使用?-Xlint:deprecation?重新编译。??
  7. ????[javac]?注意:某些输入文件使用了未经检查或不安全的操作。??
  8. ????[javac]?注意:要了解详细信息,请使用?-Xlint:unchecked?重新编译。??
  9. ??????[jar]?Building?jar:?E:\usr\share\java\tomcat7-deps\dbcp\tomcat-dbcp.jar??
  10. ??????[jar]?Building?jar:?E:\usr\share\java\tomcat7-deps\dbcp\tomcat-dbcp-src.jar??
因此,该问题可总结为:tomcat源码依赖的jdk版本为1.6及其以下,使用jdk1.7会导致构建失败。
? ? ? ?

3. ?在build path里添加jar包,解决编译问题

? ? 导入eclipse后,会发现工程tomcat7有一个红色的惊叹号,这是因为依赖的jar包没有添加到build path里导致的编译错误。参考博客?http://jackycheng2007.iteye.com/blog/1477845?中的第三步。
? ? 遇到的另外问题,org.apache.naming.factory.webservices包下的两个类ServiceProxy,ServiceRefFactory依然有错,无法识别
[java]?view plaincopy
  1. import?javax.xml.rpc.Service;??
  2. import?javax.xml.rpc.ServiceException;??
  3. import?javax.wsdl.Definition;??
  4. import?javax.wsdl.Port;??
  5. import?javax.wsdl.extensions.ExtensibilityElement;??
  6. import?javax.wsdl.extensions.soap.SOAPAddress;??
  7. import?javax.wsdl.factory.WSDLFactory;??
  8. import?javax.wsdl.xml.WSDLReader;??
这些类。本机依然缺少jar包,百度了下发现缺少一个web service的开发工具包?axis-bin-1_4.zip。 下载后,添加到build path里解决。
??
? ?题外话:ant没有maven用起来方便,maven可以管理依赖的jar,会自动从maven仓库里下载依赖,无需手动下载jar和添加build path
?

4. 运行

? ? ? ?参考博客http://jackycheng2007.iteye.com/blog/1477845?中的第四步即可

?

第三篇:解压的SRC也行?

原文:http://www.cnblogs.com/huangfox/archive/2011/10/20/2218970.html

?

想要研究下Tomcat的体系结构或者源码,最好将Tomcat的源码导入到ide中,编写实例进行代码跟踪(debug)。

这里参考了网上一些资料,将自己操作过程记个流水账。

准备:

1.Tomcat源码下载

这个里下载tomcat-6.0.33源码。

2.ant安装,用于编译tomcat的源码。

ant下载解压后将其bin添加到系统环境path中。

3.IDE——选用Eclipse3.7。

?

=================================

第一步:

解压Tomcat源码,例如解压到D:\tomcat\apache-tomcat-6.0.33-src

第二步:

2.1)使用ant编译tomcat源码,在编译之前需要下载相关的依赖项目。我们并不知道编译需要哪些依赖项目,怎么办?

让ant来帮忙吧!我们只需要准备一个存放这些依赖项目的地方,例如d:\tomcat\basepath

2.2)要让ant工作起来,我们还要将apache-tomcat-6.0.33-src文件夹中的build.properties.default重命名为build.properties,

并且打开它,修改base.path=d:\tomcat\basepath

2.3)下载依赖项目,进入命令控制台,进入目录D:\tomcat\apache-tomcat-6.0.33-src,执行命令:ant download

2.4)等依赖项目下载好后,就可以编译tomcat了。执行命令:ant。当编译完成后,我们可以查看目录D:\tomcat\apache-tomcat-6.0.33-src

可以发现里面多了一个文件夹:output

output文件夹的结构如下:

我们会发现这个结构和从安装包里解压出来的tomcat结构一致。

进入bin,启动tomcat成功,就说明——ant编译tomcat成功了!

?

=====================================

将tomcat源码导入eclipse。

第一步:

在eclipse里新建一个java项目,例如:tomcat6。

第二步:

import->file system

在From directory选择tomcat源码,选择java和test(如果你需要测试的话选择test),如下图:

在into folder中选择我们刚新建的tomcat6,finish。

note:将java、test设置成source folder,java build path ->Source->Add folder...->选择java和test。

现在项目结构如下图所示:

第三部:导入jar包。

上面那些不爽的红叉是因为缺少jar的原因,我们现在需要那些jar包呢?

test需要junit.jar,这个直接用eclipse里面的即可。

java中需要:

  • ant.jar
  • jaxrpc.jar
  • org.eclipse.jdt.core_3.3.1.v_780_R33x.jar
  • wsdl4j-1.5.1.jar

导入后就清爽了!

第四步:

在eclipse中启动tomcat。

找到类:org.apache.catalina.startup包中的Bootstrap类。

run as:在Arguments的VM arguments中设置

-Dcatalina.home="d:\output\build"

然后就可以启动了!

?

==========================================

问题:

为什么要设置-Dcatalina.home="d:\output\build"?

首先说明output是什么——它就是ant编译出来的output文件夹,大家可以试试删除里面的东西看还是否可以成功启动。

如果不配置这个参数又会发生什么情况呢?删除-Dcatalina.home="d:\output\build",报错:

2011-10-20 14:49:35 org.apache.catalina.startup.ClassLoaderFactory validateFile

警告: Problem with directory [D:\myWorkSpace\tomcat6\lib], exists: [false], isDirectory: [false], canRead: [false]

2011-10-20 14:49:35 org.apache.catalina.startup.ClassLoaderFactory validateFile

警告: Problem with directory [D:\myWorkSpace\tomcat6\lib], exists: [false], isDirectory: [false], canRead: [false]

2011-10-20 14:49:35 org.apache.catalina.startup.Catalina load

警告: Can't load server.xml from D:\myWorkSpace\tomcat6\conf\server.xml

2011-10-20 14:49:35 org.apache.catalina.startup.Catalina load

警告: Can't load server.xml from D:\myWorkSpace\tomcat6\conf\server.xml

2011-10-20 14:49:35 org.apache.catalina.startup.Catalina start

严重: Cannot start server. Server instance is not configured.

从中可以看出在项目的根目录下没有lib文件夹,没有conf文件夹,conf中没有server.xml,从而不能实例化server。

那么按照他的提示做,在启动就ok了!

  相关解决方案