1. Tomcat源码下载
http://tomcat.apache.org/download-90.cgi
2. IDEA导入源码
导入后入下图:
2.1 导入架包
Tomcat源码下下来后会少了几个架包,代码是会报错的:ant-1.6.5.jar、easymock-3.4.jar、jaxrpc-api-1.1.jar、ecj-4.6.1.jar、wsdl4j-1.6.2.jar、objenesis-2.2.jar、hamcrest-core-1.3.jar,可以手动下载这些架包,也可以通过maven的pom.xml导入,如下:
4.0.0
org.apache.tomcat
tomcat9
tomcat9
9.0
apache-tomcat-9.0.0.M26-src
java
java
test
org.apache.maven.plugins
maven-compiler-plugin
3.5.1
UTF-8
1.8
1.8
org.apache.maven.plugins
maven-jar-plugin
2.6
junit
junit
4.11
test
ant
ant
1.6.5
org.easymock
easymock
3.4
wsdl4j
wsdl4j
1.6.2
javax.xml
jaxrpc
1.1
org.eclipse.jdt.core.compiler
ecj
4.6.1
2.2 引入tomcat其他模块的架包:
从其他安装版本的tomcat里拷贝lib文件夹放到tomcat的根目录。
2.3 删除webapps里没有用的应用
2.4 删除其他module
3. 运行启动
源码启动Tomcat,是启动Bootstrap的main方法,其实startup.bat或者startup.sh也是启动Bootstrap的main方法。
3.1 配置Bootstrap
VM options配置如下:
-Dcatalina.home=D:\MyJob\Project\Maven\apache-tomcat-9.0.0.M26-src
-Dcatalina.base=D:\MyJob\Project\Maven\apache-tomcat-9.0.0.M26-src
-Djava.endorsed.dirs=D:\MyJob\Project\Maven\apache-tomcat-9.0.0.M26-src\endorsed
-Djava.io.tmpdir=D:\MyJob\Project\Maven\apache-tomcat-9.0.0.M26-src\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=D:\MyJob\Project\Maven\apache-tomcat-9.0.0.M26-src\conf\logging.properties
3.2 启动Bootstrap
出现Server startup in 3040 ms,就是启动成功
3.3 浏览器访问tomcat
4. 问题和解决方法
可能会碰到一下一些问题,没关系,碰到问题一个个解决。
4.1 问题一:module cycles:
报错如下:
原因:是在引入源码的时候没有去掉一些没有用到的module导致module循环引用了。
解决:Analyze->Analyze module Denpendencies如下图:
可以看到apache-tomcat-9.0.0.M26-src里引用到WEB-INF这个module,WEB-INF里又引用了apache-tomcat-9.0.0.M26-src,只要删除WEB-INF这个module就行了。
打开Project Structure->Modules,删除WEB-INF,我一般是把除了apache-tomcat-9.0.0.M26-src的module都删了以免出现其他问题,暂时其他都用不到,如下图:
4.2 问题二:jdbc-pool模块配置MANIFEST.MF文件报错
报错如下:
解决:不知道为啥下载下来的文件就有问题,这块反正也没用到,就直接删了。
4.3 问题三:lib文件夹缺失
解决:增加lib目录,从安装版的tomcat文件夹里考一份lib过来(里边的架包要一起考来)。
4.4 问题四:Tomcat启动失败
问题:examples应用下找不到监听的类
原因:看了下目录,classes里居然都是java类,没有编译
解决:这个应用没啥用,直接删了只留下ROOT文件夹就好。