Java之——Eclipse导入Tomcat源码

来源:互联网 发布:steamsam软件 编辑:程序博客网 时间:2024/05/22 14:19

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/54589436

最近,很多朋友在问我如何将Tomcat源码导入到eclipse,正好最近本人也正在研究Tomcat源码,那么就把这篇如何将Tomcat源码导入到eclipse的文章整合后发出来供大家参考,网上也有很多类似的文章,但是大部分整理的不是很直观,本文经过本人亲测可行。供大家研究Tomcat源码参考。

一、 获取源代码

   方式一:从官网http://tomcat.apache.org/download-70.cgi 直接下载,官网提供了Binary 和 Source Code两种下载方式,要研究tomcat源代码,选择source code 方式下载
   方式二:利用svn获取源代码,先安装svn,再新建目录tomcat7, 接着在目录里执行以下命令

svn co http://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_35/ ./ 
  tags目录下有不同版本的tomcat 源码,这里下载的版本是7.0.35

二. 将源码导入eclipse

    tomcat的源码是利用ant来创建和管理的。先安装ant,再执行ant ide-eclipse,该命令执行成功后,会在tomcat7目录下生产.project和.classpath两个文件,即成为eclipse工程了。这样你就可以将tomcat源码导入eclipse了。
     执行ant ide-eclipse时报错:

BUILD FAILED build.xml:2361: The following error occurred while executing this line:BUILD FAILED build.xml:2449: Compile failed; see the compiler error output for details.
查看编译的错误日志为:
 build-tomcat-dbcp:     [copy] Copying 64 files to E:\usr\share\java\tomcat7-deps\dbcp     [move] Moving 64 files to E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp    [javac] Compiling 64 source files to E:\usr\share\java\tomcat7-deps\dbcp\classes    [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.6    [javac] E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp\dbcp\BasicDataSource.java:53: error: BasicDataSource is not abstract and does not override abstract method getParentLogger() in CommonDataSource    [javac] public class BasicDataSource implements DataSource {    [javac]        ^    [javac] E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp\dbcp\DelegatingStatement.java:46: error: DelegatingStatement is not abstract and does not override abstract method isCloseOnCompletion() in Statement    [javac] public class DelegatingStatement extends AbandonedTrace implements Statement {    [javac]        ^    [javac] E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp\dbcp\DelegatingPreparedStatement.java:57: error: DelegatingPreparedStatement is not abstract and does not override abstract method isCloseOnCompletion() in Statement
根据日志错误推测,依赖的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的构建日志更新为:
build-tomcat-dbcp:     [copy] Copying 64 files to E:\usr\share\java\tomcat7-deps\dbcp     [move] Moving 64 files to E:\usr\share\java\tomcat7-deps\dbcp\src\java\org\apache\tomcat\dbcp    [javac] Compiling 64 source files to E:\usr\share\java\tomcat7-deps\dbcp\classes    [javac] 注意:某些输入文件使用或覆盖了已过时的 API。    [javac] 注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。    [javac] 注意:某些输入文件使用了未经检查或不安全的操作。    [javac] 注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。      [jar] Building jar: E:\usr\share\java\tomcat7-deps\dbcp\tomcat-dbcp.jar      [jar] Building jar: E:\usr\share\java\tomcat7-deps\dbcp\tomcat-dbcp-src.jar
因此,该问题可总结为:tomcat源码依赖的jdk版本为1.6及其以下,使用jdk1.7会导致构建失败。

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

    导入eclipse后,会发现工程tomcat7有一个红色的惊叹号,这是因为依赖的jar包没有添加到build path里导致的编译错误。具体的解决方案如下:

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

ant 
来build和deploy这个项目,就先执行它。
这样它就会下载需要的lib。

如果你不确定放到哪里了,你可以搜索ecj-3.7.2,把它的上级目录指定给这个变量就好了。
添加好之后,eclipse会提示你重新build项目,当然要。之后就会没有错误了。
遇到的另外问题,org.apache.naming.factory.webservices包下的两个类ServiceProxy,ServiceRefFactory依然有错,无法识别

import javax.xml.rpc.Service;import javax.xml.rpc.ServiceException;import javax.wsdl.Definition;import javax.wsdl.Port;import javax.wsdl.extensions.ExtensibilityElement;import javax.wsdl.extensions.soap.SOAPAddress;import javax.wsdl.factory.WSDLFactory;import javax.wsdl.xml.WSDLReader;
这些类。本机依然缺少jar包,百度了下发现缺少一个web service的开发工具包 axis-bin-1_4.zip。 下载后,添加到build path里解决。
题外话:ant没有maven用起来方便,maven可以管理依赖的jar,会自动从maven仓库里下载依赖,无需手动下载jar和添加build path

四 运行

右击这个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菜单下显示它了。

问题:为什么这个函数的注释写仅仅为了测试

/** * Main method, used for testing only. * * @param args Command line arguments to be processed */  public static void main(String args[]) {  
启动好以后你可以打开下面的网址:
http://localhost:8080/
你会看到欢迎页面,大功告成!你可以在main里面设置断点debug了。

五、配置更为详细的log

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

 -Djava.util.logging.config.file=${project_loc:/tomcat-7.0.x}/conf/logging.properties  
2)修改log level的配置,把FINE,改成FINEST。并加入:
org.apache.catalina.level = FINEST

1 0
原创粉丝点击