將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文檔