因为学习需要,我需要源码编译运行tomcat对其源码进行一个简单的追踪分析。由于先前并未接触过java相关的知识,安装阻力巨大。最后请教我的开发朋友才解决了最后的问题。将其整理出来,让大家能够快速完成相关的部署。本文仅解决tomcat-8.5.46版本的源码编译问题。
下载连接:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.46/src/apache-tomcat-8.5.46-src.zip
大家可以去评论区自取相关文件。
在此目录下添加名为catalina-home的目录,将源码解压文件内的conf和webapps文件夹拷贝到实例文件夹中。
并在此目录下创建空的ilb、logs和temp文件夹
与解压目录同级的pom.xml文件:
4.0.0 gxf apache-tomcat-8 apache-tomcat-8-source 1.0 pom apache-tomcat-8.5.46-src
与解压源码目录同级的pom.xml文件:
4.0.0 org.apache.tomcat Tomcat8.5.46 Tomcat8.5.46 8.5 Tomcat8.0 java
java
org.apache.maven.plugins maven-compiler-plugin 2.0.2 UTF-8 1.8 1.8 org.easymock easymock 3.5 test junit junit 4.12 test ant ant 1.7.0 wsdl4j wsdl4j 1.6.2 javax.xml jaxrpc 1.1 org.eclipse.jdt.core.compiler ecj 4.6.1
直接打开IDE。点击open
看清楚,一定是导入的根目录同级pom.xml。这里我是做二次演示所以左面可以看到一些痕迹。
点击右上角配置栏,添加applocation配置
配置项目入口:前面的java版本无关紧要,主要是中间的和后面的入口一定要找对。否则会出现模块无法加载的情况。
org.apache.catalina.startup.Bootstrap
这里需要配置环境变量,点击modify opiitions添加环境变量:
将下面的配置复制进去
-Dcatalina.home=catalina-home
-Dcatalina.base=catalina-home
-Djava.io.tmpdir=catalina-home/temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=catalina-home/conf/logging.properties
记得删除我们这里的test文件,否则会引发编译错误
tomcat8及之后的想要编译就需要手动加载org.apache.jasper.servlet.JasperInitializer
以启动中间件的解析功能。
找到文件,添加一行代码:
context.addServletContainerInitializer(new JasperInitializer(), null);
可以看到这样一行报错,是因为我们没有导入对应的包引起的,我们将鼠标停在上面,alt+enter就可以自动导入相关模块,解决依赖问题。
颜色变过来之后点击运行,就可以成功访问tomcat中间件了。
http://127.0.0.1:8080/