论坛首页 Java企业应用论坛

从源码安装tomcat 6.0.18

浏览 3956 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-02-23   最后修改:2012-03-26

 

从源码安装 tomcat 6.0.18

注意事项:

JDK 1.6

1       安装 Subversion

l  下载地址: http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91

l  当然,如果您想从 Eclipse 中直接导入 Tomcat 源代码,请从 http://subclipse.tigris.org/update_1.0.x 下载 Subversion 插件,即可导入 Tomcat 源代码。

l  安装完成后,请在 MS-DOS 窗口中键入 svn export help ,验证是否安装成功

2       下载 Tomcat6.0 的源代码

l  Tomcat 源代码的版本控制工具不是 CVS ,而是 Subversion

l  MS-DOS 下键入:

svn  export   http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_18/   G:\tomcat_6.0.18\src

这个命令的意思是把 Tomcat6.0.18 的源代码从 Subversion 库中导入到本机的 G:\tomcat_6.0.18\src 目录,

l  下面是源代码的目录结构,从这个目录结构中,我们可以看出该项目的开发者使用的 IDE Eclipse ,因为我们看到了熟悉的 .project .classpath 文件。

 

bin

脚本文件

conf

xml properties 配置文件

java

Java 源码文件

res

资源文件比如说图片文件, ini 文件及其它的一些静态资源文件

test

测试源代码

 

 

3       安装 Ant

请从 http://ant.apache.org/bindownload.cgi 处下载并安装

4       下载 依赖项目

 

l  Tomcat Ant 作为编译工具

l  修改 build.properties

找到 Tomcat 的源代码中的 build.properties.default 文件,将该文件复制到 build.properties

然后打开 build.properties ,找到下面这行:

base.path=/usr/share/java

将它改为:

base.path= G:/tomcat_6.0.18/src/share

 

Tomcat 编译过程中, Ant 会让我们下载一些必要的依赖项目, base.path 目录就是用来保存这些项目文件的,我们可以将这个属性指向一个已经存在的目录。

l  修改完 base.path 后,我们回到 MS-DOS 窗口,切换到 Tomcat 源代码所在目录,然后运行 ant download 命令

cd G:\tomcat_6.0.18\src

c:\apache-ant-1.7.1\bin\ant download

 

一分钟未到, Ant 就告诉我们一个错误并提示我们编译失败,就是找不到 http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip 文件。

Tomcat 的编译和 Eclipse JDT 有什么关系?是因为 Tomcat 是在 Eclipse 下开发的,

所以需要 Eclipse JDT Java Development tooling )插件来编译 Tomat 源代码。既然找不到,我们只好自己动手,上 Google 一搜,马上发现这个文件的有效下载地址为: http://mirror.calvin.edu/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip 。我们 打开 刚才的build.properties 文件,将其 34 行修改为:

jdt.loc= http://mirror.calvin.edu/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip

Tomcat 6.0.0 需要改这个,Tomcat 6.0.18 不需要改这个选项了

l  修改保存build.properties 文件后,重新开始ant download 任务。

这次我们等的时间较长,因为 eclipse-JDT-3.2.zip 大约有19M ,下载需要一段时间。

编译成功,虽然编译器给出几个警告。

……

BUILD SUCCESSFUL

Total time: 15 minutes 17 seconds

 

l  这时我们可发现刚才创建的base.path 目录(G:\tomcat_6.0.18\src\share )中已经下载了6 个依赖项目,它们都是Tomcat 编译所必须的。

l 配置代理

修改 build.properties 文件:添加如下内容

proxy.host=192.168.0.1

proxy.port=808

proxy.use=on

 

5  编译

请在MS-DOS 窗口内键入ant 并回车,

c:\apache-ant-1.7.1\bin\ant

 

Ant 将在2 分钟内编译1000 多个源文件并将Tomcat 部署到output 目录。

编译顺利完成后,请打开Tomcat 的源代码目录,会发现多了一个output 目录,这是Ant 的编译后的输出目录。

……

BUILD SUCCESSFUL

Total time: 1 minute 31 seconds

 

6  运行 tomcat

请打开Tomcat 源代码的output\build\bin 子目录,双击startup.bat 文件,我们即可成功启动Tomcat6.0 ,此时我们的编译工作就算顺利完成了。

http://127.0.0.1:8080/

 

7       导入源代码到 Eclipse

7.1   新建一个 Java 项目

请打开Eclipse ,新建一个Java 项目,请选择 Create project from existing source , 并在Directory 文本框内填入我们刚才下载的Tomcat 源代码目录(i.e. G:\tomcat_6.0.18\src) ,然后点击 Next 直至结束。

7.2 指定库文件

我们将会看到Eclipse 拒绝编译,这是因为Eclipse 找不到该项目指定的库文件。请右击该项目,在弹出菜单中选择 Properties => Libraries ,然后删除两个以TOMCAT_LIBS 开头的两个库文件,只保留一个JRE 库文件,然后点击 OK 按钮,这时Eclipse 开始编译Tomcat 源代码,但是发现一堆错误,这是因为我们没有为该项目添加编译所必须的Jar 包。

 

准备好 Tomcat 项目所必须的 jar 文件,其实,刚才我们运行 ant download 任务时,已经下载过这些 jar 文件包。

ant.jar

(请在 ant 安装目录的 lib 子目录中拷贝)

commons-collections-3.2.jar

(从刚才 Ant 下载的 share\commons-collections-3.2-src 子目录中拷贝)

commons-dbcp-1.2.2.jar

(从刚才 Ant 下载的 share\commons-dbcp-1.2.2-src 子目录中拷贝)

commons-logging-1.1.jar

(如果您本机没有这个 jar 包,请从 http://commons.apache.org/downloads/download_logging.cgi 处下载)

commons-pool-1.2.jar

(如果在刚才下载的 share\commons-pool-1.4-src 的目录中找不到,可以执行这个命令来得到 jar 文件 c:\apache-ant-1.7.1\bin\ant build-jar

org.eclipse.jdt.core_3.3.1.v_780_R33x.jar

(从刚才 Ant 下载的 share\eclipse\plugins 子目录中拷贝)

jaxrpc.jar

wsdl4j-1.5.1.jar

http://ws.apache.org/axis/ 下载。

 

 

当我们准备好这些 jar 文件后,将这些文件拷贝到某一目录(比如说 G:\tomcat_6.0.18\tomcat_lib 目录),

 

 

然后在 Eclipse 中新建一个 User Libraries ,我们将这个新建的 User Libraries 命名为 TOMCAT_LIBS ,并把这些文件加到 TOMCAT_LIBS 。然后将我们新建的 TOMCAT_LIBS 添加到 Tomcat6 项目。另外,别忘了把 JUnit 库也加到 Tomcat6 项目。这时 Eclipse 开始重新编译,编译过程顺利通过,所有错误均消失,此时 Tomcat6 项目的目录结构如下:

 

7.3   test 目录也加入到源代码中

方法是在 Eclipse 中右击” test ”目录,然后在弹出菜单中选择“ Build path => Use as Source Folder ”,之后我们会看到 test 目录上就多了个源代码的符号。

 

8       Eclipse 中运行 Tomcat

请找到 Tomcat 的启动主类 org.apache.catalina.startup.Bootstrap ,右击这个类,在弹出菜单中选择“ Run As …” => Open Run Dialog …”,然后在弹出的“ Run ”窗口中填入程序运行参数“ start ”和 JVM 运行参数 catalina.home

 

程序运行参数 :       start

JVM 运行参数 :      -Dcatalina.home="G:\tomcat_6.0.18\src"

 

然后点击“ Run ”按钮,我们将会看到 Tomcat 正常启动。恭喜,咱们的 Tomcat 源码已经成功导入 Eclipse ,这时,

 

9       调试 Tomcat

请打开org.apache.jasper.compiler.Compiler 类的源代码,在generateJava() 方法的第一行打一个断点,然后在Eclipse 的调试状态下运行Tomcat ,等Tomcat 运行后,打开我们的浏览器,在地址栏中输入http://localhost:8080/examples/jsp/jsp2/el/basic-comparisons.jsp 并回车,然后我们可观察到Eclipse 此时切换至调试视图:

上面的小实验表明我们可以在Eclipse 中通过Debugger 观察Tomcat 的内部运行机理。另外补充一点,上面的generateJava 方法是将jsp 动态编译至java class ,这个方法只是在第一次请求或者Jsp 源码发生变化时执行,如果您再次在浏览器中发送同样的请求,您将看不到上图的Debug 界面,因为该方法不再执行。


 

10             其他

JDK 版本引起的问题报如下错误:

 

    [javac] C:\tomcat_6.0.18\src\share\tomcat6-deps\dbcp\src\java\org\apache\tom

cat\dbcp\dbcp\datasources\PerUserPoolDataSource.java:52: org.apache.tomcat.dbcp.

dbcp.datasources.PerUserPoolDataSource 不是抽象的,并且未覆盖 java.sql.Wrapper

中的抽象方法 isWrapperFor(java.lang.Class<?>)

这是JDK 版本1.6 造成的。需要安装JDK 版本1.5.

安装1.5 之后,原来的1.6 不必卸载,

为了把两个版本的JDK 区别开,可以键入如下命令

set path=C:\Program Files\Java\jdk1.5.0_06\bin

set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_06

 

还有一点很有意思。

Tomcat6 以前版本的源代码分散在好几个子项目中,他们分别叫做jakarta-servletapi-5jakarta-tomcat-5jakarta-tomcat-catalinajakarta-tomcat-connectorsjakarta-tomcat-jasper ,我觉得Tomcat 的开发者可能嫌这样做太麻烦了,所以Tomcat6 版本中将这些子项目都合并在一起了。但是,这种做法不利于我们阅读理解源代码。

文章出处: http://www.diybl.com/course/4_webprogram/jsp/jsp_js/2008313/104405_5.html

 

   发表时间:2012-02-23  
这个不累吗
0 请登录后投票
   发表时间:2012-03-07  


引用
l  安装完成后,请在 MS-DOS 窗口中键入 svn export help ,验证是否安装成功


这个在 Subversion for Win32, version 1.6.6 上测试过 应该是svn help export
0 请登录后投票
   发表时间:2012-03-21  
挺有用的,十分感谢
0 请登录后投票
   发表时间:2012-04-16  
mark下,弄成功了。
0 请登录后投票
   发表时间:2012-04-16  
我是自己写ant编译的,否则改起来不方便
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics