将tomcat源码打包为源代码包

背景

题目听起来有点拗口,简单来说就是将tomcat的源代码打成src.jar。因为在开发过程中追踪代码到了tomcat的类就没有关联的类了,虽然是maven project,但是maven只会下载pom.xml中配置的源代码,不会下载tomcat源代码,后来突发奇想打算将tomcat源代码包关联到intellij idea的tomcat,以追踪源码,后来发现,此计行不通,intellij idea不会自动关联tomcat源码!不过间接学会了ant打源代码包。

步骤

  • 下载tomcat源码,svn或者zip包都可以,本人使用了zip形式,
    • 复制build.properties.default重命名为build.properties
  • 安装ant,编译的tomcat版本是7.0.61,官方文档推荐ant1.8.2,下载ant的bin版本,设置ANT_HOME ,并添加%ANT_HOME%\bin到path中
  • 配置jdk_home,必须是jdk1.6版本,否则出错
    • [javac] D:\tomcat_7.0.61_build\repository\tomcat7-deps\dbcp\src\java\org\a
      \tomcat\dbcp\dbcp\BasicDataSource.java:53: 错误: BasicDataSource不是抽象的,
      且未覆盖CommonDataSource中的抽象方法getParentLogger()
      [javac] public class BasicDataSource implements DataSource { [javac] ^
      [javac] D:\tomcat_7.0.61_build\repository\tomcat7-deps\dbcp\src\java\org\apa
      \tomcat\dbcp\dbcp\DelegatingStatement.java:46: 错误: DelegatingStatement不是
      象的, 并且未覆盖Statement中的抽象方法isCloseOnCompletion()
      [javac] public class DelegatingStatement extends AbandonedTrace implements S
      ement {
      [javac] ^
      [javac] D:\tomcat_7.0.61_build\repository\tomcat7-deps\dbcp\src\java\org\apa
      \tomcat\dbcp\dbcp\DelegatingPreparedStatement.java:57: 错误: DelegatingPrepar
      tatement不是抽象的, 并且未覆盖Statement中的抽象方法isCloseOnCompletion()
      [javac] public class DelegatingPreparedStatement extends DelegatingStatement
  • 进入到tomcat_src目录后,执行ant package-src-jar,就会打源代码包。package-src-jar是ant的target,配置在build.xml
    • <!-- Packages the source code in JARs to match the binary JARs -->
      <target name="package-src-jar"
      depends="build-manifests,build-tomcat-jdbc-src,package-src-jar-java7">
      <mkdir dir="${tomcat.src.jars}" />

效果

这里写图片描述

参考

Building Tomcat
让Intellij IDEA显示Servlet文档