编译apache-tomcat-8源码

编译环境:
Tomcat-src: 8.0.0-RC10
OS: 64位win8.1
JVM: 1.7.0_45
ANT: 1.9.2

获取方法:
1. svn
2. source-package

可根据 官方文档的说明进行编译,大概步骤如下:
1. 下载source-package
2. 解压源码包到路径: D:\apache-tomcat-8.0.0-RC10-src
3. 打开命令行, cd到D:\apache-tomcat-8.0.0-RC10-src目录下
4. 在命令行输入 ant ide-eclipse

我编译的时间是2014-1-04,如果tomcat官方还没更新的话,如无意外按照流程走是会出现以下错误


根据出错提示定位到build.xml的2583行和2799行
<antcall target="downloadgz-2">
      <param name="sourcefile.1" value="${commons-pool-src.loc.1}"/>
      <param name="sourcefile.2" value="${commons-pool-src.loc.2}"/>
      <param name="destfile" value="${commons-pool.home}/build.xml" />
</antcall>

先来看第一段, antcall任务中target属性的作用是指定要被调用执行的target="downloadgz-2",接下来看第二段
<target name="downloadgz-2" unless="exist" depends="setproxy,testexist">
    <!-- Download and extract the package from the two alternative locations -->
    <delete file="${base.path}/file.tar" quiet="true" />
    <delete file="${base.path}/file.tar.gz" quiet="true" />
    <antcall target="trydownload">
      <param name="sourcefile" value="${sourcefile.1}" />
      <param name="destfile" value="${base.path}/file.tar.gz" />
    </antcall>
    <antcall target="trydownload">
      <param name="sourcefile" value="${sourcefile.2}" />
      <param name="destfile" value="${base.path}/file.tar.gz" />
    </antcall>
    <gunzip src="${base.path}/file.tar.gz" dest="${base.path}/file.tar"/>
    <untar src="${base.path}/file.tar" dest="${base.path}"/>
    <delete file="${base.path}/file.tar"/>
    <delete file="${base.path}/file.tar.gz"/>
</target>


第二段代码其实就是对第一段中的sourcefile.1和sourcefile.2所代表的value的文件进行操作(下载,压缩等)。看完两段脚本我们回看错误中提示的是file.tar.gz不存在,那依照流程就可以大概推断出是下载该文件失败了。这时候我们看回build.xml的开头几行中的这一行
<property file="build.properties.default"/>

现在要做的就是在该全局属性文件中查找上述第一段脚本中的两个变量commons-pool-src.loc.1和commons-pool-src.loc.2所带表的路径具体是什么
commons-pool.version=2.1-20131211.110902-1
commons-pool.home=${base.path}/commons-pool2-2.1-SNAPSHOT-src
commons-pool-src.loc.1=https://repository.apache.org/content/repositories/snapshots/org/apache/commons/commons-pool2/2.1-SNAPSHOT/commons-pool2-${commons-pool.version}-src.tar.gz
commons-pool-src.loc.2=https://repository.apache.org/content/repositories/snapshots/org/apache/commons/commons-pool2/2.1-SNAPSHOT/commons-pool2-${commons-pool.version}-src.tar.gz


从属性文件中可以看出就是从loc.1或loc.2中下载commons-pool2-2.1-20131211.110902-1-src.tar.gz这个文件的,现在我们尝试打开这个 地址看看是什么情况
显然在2014-01-04这一天,只有2.0.1-SNAPSHOT的版本,并没有属性文件中的2.1版本

两个解决方案
1. 改变属性文件中的url,将他指向旧的2.0.1版本
2. 要么就去网上找2.1版本的其他下载地址
ps: 这里我两种都尝试过,第一种尝试失败,因为使用第一种方案,发现有些类会调用commons-pool2-2.1版本中的某些类的某些方法,而这些方法是2.0.1中没有的,所以就不采用第一种方案
这里是2.1版本的 下载地址
直接把上面属性文件改成
commons-pool.version=2.1-20131211.110902-1
commons-pool.home=${base.path}/commons-pool2-2.1-src
commons-pool-src.loc.1=https://www.apache.org/dist/commons/pool/source/commons-pool2-2.1-src.tar.gz
commons-pool-src.loc.2=https://www.apache.org/dist/commons/pool/source/commons-pool2-2.1-src.tar.gz

注意记得把commons-pool.home的值的${base.path}/后面那一段也相应更改
接下来重新执行ant ide-eclipse
如无意外的话就能编译成功,接下来用eclipse导入项目,修改一下.classpath文件或者添加一些与.classpath文件对应的classpath变量就可以了.


现在我们可以在eclipse调试自己的tomcat8了

猜你喜欢

转载自youngjd.iteye.com/blog/1999213