tomcat原始碼下載並匯入eclipse
阿新 • • 發佈:2019-02-10
1. 獲取原始碼
方式一:從官網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
2. 將原始碼匯入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.
根據日誌錯誤推測,依賴的dbcp相關的jar版本不對。本機安裝的jdk版本是1.7的,於是在本機又裝了一個1.6的jdk,並修改相關環境變數讓JAVA_HOME指向jdk 1.6目錄。再次執行ant ide-eclipse得到了 BUILD SUCCESSFULbuild-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: Bas icDataSource 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 Stat ement
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會導致構建失敗。
3. 在build path裡新增jar包,解決編譯問題
匯入eclipse後,會發現工程tomcat7有一個紅色的驚歎號,這是因為依賴的jar包沒有新增到build path裡導致的編譯錯誤。參考部落格 http://jackycheng2007.iteye.com/blog/1477845 中的第三步。 遇到的另外問題,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