Tomcat源碼目錄:
-
Tomcat源碼淺析(一):下載源碼,導入eclipse並且運行 Tomcat源碼淺析(二):Tomcat原理 Tomcat源碼淺析(三):自己動手寫一個Tomcat Tomcat源碼淺析(四):總結
Tomcat源碼淺析(一)
目錄:
前言:
Tomcat源碼下載後並不能直接運行,因爲缺少jar,我們需要使用Ant去編譯,構建成一個Eclipse項目後,開始Tomcat源碼學習。
1.版本
工具 | 版本 | 下載Url |
apache-tomcat | 7.0.90 | http://archive.apache.org/dist/tomcat/ |
apache-ant | 1.9.13 | https://ant.apache.org/bindownload.cgi |
eclipse | 4.4.2(Luna) | https://www.eclipse.org/downloads/packages/release/luna/sr2/eclipse-ide-java-ee-developers |
Java SE | 1.7 | https://www.oracle.com/technetwork/cn/java/javase/downloads/java-se-jdk-7-download-432154-zhs.html |
1.6 | https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html |
2.tomcat源碼下載
如圖:
圖2-1
圖2-2
下載源碼後解壓到目錄:F:\TestCode\workspace\apache-tomcat-7.0.90-src
3.ANT安裝
a.ant下載
如圖:
圖3-a-1
下載後將其解壓到你的硬盤上,例如:D:\developmentTools\apache-ant-1.9.13。
如圖:
圖3-a-2
b.ant環境配置
window中設置ant環境變量:
ANT_HOME D:\developmentTools\apache-ant-1.9.13
path ;%ANT_HOME%\bin;
classpath ;%ANT_HOME%\lib;
c.ant環境驗證
如圖:
圖3-c-1
ok,到這,an環境就配好了,可以開始構建項目了。
4.用Ant將Tomcat源碼構建成Eclipse項目
a.打開cmd命令窗口。
b.進到tomcat目錄
(我的目錄):F:\TestCode\workspace\apache-tomcat-7.0.90-src
F:\TestCode\workspace\apache-tomcat-7.0.90-src>ant -p
Buildfile: F:\TestCode\workspace\apache-tomcat-7.0.90-src\build.xml
Main targets:
build-docs Builds all documentation from XML sources
clean Delete the default output folders
clean-depend Deletes the dependencies that are built from source
cobertura-instrument Adds Cobertura instrumentation to the compiled bytecode
cobertura-report Creates report from gathered Cobertura results
deploy Default. Builds a working Tomcat instance
dist-deployer Create the Tomcat deployer binary
download-cobertura Download the Cobertura code coverage tool
download-compile Download (and build) components necessary to compile
download-dist Download additional components for a distribution
download-test-compile Download additional components for the tests
download-validate Download components necessary to validate source
embed Creates the experimental embedded release
embed-extras Embedded packaging for those extras that can use it
embed-jars Create experimental embedded jars
embed-sources Create source jars for embedded jars
examples-sources Create examples sources
extras Build all extras packages
extras-commons-logging Build JULI for log4j extras package
extras-commons-logging-prepare Prepare to build web services extras package
extras-jmx-remote Build JMX remote extras package
extras-webservices Build web services extras package
extras-webservices-prepare Prepare to build web services extras package
ide-eclipse Prepares the source tree to be built in Eclipse
ide-eclipse-websocket Prepares the source tree to be built in Eclipse - separate project to build classes that require Java 7
installer Create Windows installer
javadoc Create the Tomcat javadoc
release Create a Tomcat 7 packaged distribution
test Runs the JUnit test cases
test-apr Runs the JUnit test cases for APR. Does not stop on errors.
test-apr-exists Checks for APR lib
test-bio Runs the JUnit test cases for BIO. Does not stop on errors.
test-nio Runs the JUnit test cases for NIO. Does not stop on errors.
validate Uses Checkstyle tool to perform style check for the source code
validate-eoln Validate that the source files have correct line ends
Default target: deploy
F:\TestCode\workspace\apache-tomcat-7.0.90-src>
鍵入:ant ide-eclipse
如下:
F:\TestCode\workspace\apache-tomcat-7.0.90-src>ant ide-eclipse
Buildfile: F:\TestCode\workspace\apache-tomcat-7.0.90-src\build.xml
download-compile:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/commons-daemon-1.1.0/commons-daemon-1.1.0.jar
downloadgz-2:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/commons-pool-1.5.7-src/build.xml
downloadgz-2:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/commons-dbcp-1.4-src/build.xml
downloadgz-2:
build-prepare:
[delete] Deleting directory F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\temp
[mkdir] Created dir: F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\temp
build-manifests:
build-tomcat-dbcp:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/ecj-4.4.2/ecj-4.4.2.jar
downloadfile-2:
extras-prepare:
extras-webservices-prepare:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/jaxrpc-1.1-rc4/geronimo-spec-jaxrpc-1.1-rc4.jar
downloadfile:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/wsdl4j-1.6.2/wsdl4j-1.6.2.jar
downloadfile:
download-test-compile:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/junit-4.11/junit-4.11.jar
downloadfile:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/hamcrest-1.3/hamcrest-core-1.3.jar
downloadfile:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/easymock-3.2/easymock-3.2.jar
downloadzip:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/cglib-2.2.3/cglib-nodep-2.2.3.jar
downloadfile:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/objenesis-1.2/objenesis-1.2.jar
downloadzip:
ide-eclipse:
[echo] Eclipse project files created.
[echo] Read the Building page on the Apache Tomcat documentation site for details on how to configure your Eclipse workspace.
BUILD SUCCESSFUL
Total time: 1 second
F:\TestCode\workspace\apache-tomcat-7.0.90-src>
會出現一些問題,無法構建,編譯失敗,其實都是小問題,有解決辦法見目錄 6常見問題
再次鍵入ant 對bulid.xml 編譯,我們能得到一個tomcat工具,看看是不是很熟悉,
你會發現,再次ant 構建,編譯完成後,會在源碼目錄下生成output文件夾,這就是我們平時用來發布web項目的Tomcat工具
運行Tomcat的方法,就跟平時手動運行
F:\TestCode\workspace\apache-tomcat-7.0.90-src/output/build/bin/startup.bat 一樣,就啓動Tomcat
F:\TestCode\workspace\apache-tomcat-7.0.90-src>ant
Buildfile: F:\TestCode\workspace\apache-tomcat-7.0.90-src\build.xml
build-prepare:
[delete] Deleting directory F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\temp
[mkdir] Created dir: F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\temp
download-compile:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/commons-daemon-1.1.0/commons-daemon-1.1.0.jar
downloadgz-2:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/commons-pool-1.5.7-src/build.xml
downloadgz-2:
proxyflags:
setproxy:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/commons-dbcp-1.4-src/build.xml
downloadgz-2:
build-prepare:
[delete] Deleting directory F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\temp
[mkdir] Created dir: F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\temp
build-manifests:
build-tomcat-dbcp:
testexist:
[echo] Testing for C:\Users\Administrator/tomcat-build-libs/ecj-4.4.2/ecj-4.4.2.jar
downloadfile-2:
compile-prepare:
download-validate:
validate:
compile-java6:
guess-java7:
check-java7:
compile-java7:
compile:
build-manifests:
package-java7:
package:
build-docs:
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\appdev
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\funcspecs
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\config
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\architecture
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\tribes
compile-webapp-examples:
deploy:
[copy] Copying 1 file to F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\conf
examples-sources:
[echo] Building Tomcat JDBC pool libraries
prepare:
download:
build-src:
build:
BUILD SUCCESSFUL
Total time: 6 seconds
F:\TestCode\workspace\apache-tomcat-7.0.90-src>
build-docs:
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\appdev
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\funcspecs
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\config
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\architecture
[xslt] Transforming into F:\TestCode\workspace\apache-tomcat-7.0.90-src\output\build\webapps\docs\tribes
通過構建,會從svn上獲取tomcat源碼運行的jar包。
目錄:C:\Users\Administrator/tomcat-build-libs
導入eclipse
打開eclipse,File->import->existing Projects into workspace,找到源碼 F:\TestCode\workspace\apache-tomcat-7.0.90-src,點擊finish
源碼導入以後 ,在Problem視圖中會發現紅色歎號,報錯了,這個是因爲 缺少相關jar包導致,在Java Build Path下發現不存在的jar
重新引入這次jar,ant構建的時候,會從svn中下載這些jar,我的下載目錄是:C:\Users\Administrator/tomcat-build-libs
6.會碰見的問題:
問題1:
問題2: