IDE2022源码编译tomcat
因为学习需要,我需要源码编译运行tomcat对其源码进行一个简单的追踪分析。由于先前并未接触过java相关的知识,安装阻力巨大。最后请教我的开发朋友才解决了最后的问题。将其整理出来,让大家能够快速完成相关的部署。本文仅解决tomcat-8.5.46版本的源码编译问题。
1.获取tomcat源码
下载连接:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.46/src/apache-tomcat-8.5.46-src.zip
2.解压到一个英文路径的目录
在此目录下添加名为catalina-home的目录,将源码解压文件内的conf和webapps文件夹拷贝到实例文件夹中。
并在此目录下创建空的ilb、logs和temp文件夹
3.创建两个pom.xml文件
与解压目录同级的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>gxf</groupId> <artifactId>apache-tomcat-8</artifactId> <name>apache-tomcat-8-source</name> <version>1.0</version> <packaging>pom</packaging> <modules> <module>apache-tomcat-8.5.46-src</module> </modules>
</project>
与解压源码目录同级的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.apache.tomcat</groupId><artifactId>Tomcat8.5.46</artifactId><name>Tomcat8.5.46</name><version>8.5</version><build> <finalName>Tomcat8.0</finalName> <sourceDirectory>java</sourceDirectory>
<!-- <testSourceDirectory>test</testSourceDirectory> --><resources> <resource> <directory>java</directory> </resource> </resources>
<!-- <testResources> -->
<!-- <testResource> -->
<!-- <directory>test</directory> -->
<!-- </testResource> -->
<!-- </testResources> --><plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <encoding>UTF-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <version>3.5</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>ant</groupId> <artifactId>ant</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>javax.xml</groupId> <artifactId>jaxrpc</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.eclipse.jdt.core.compiler</groupId> <artifactId>ecj</artifactId> <version>4.6.1</version> </dependency> </dependencies>
</project>
4.IDE导入项目文件
直接打开IDE。点击open
看清楚,一定是导入的根目录同级pom.xml。这里我是做二次演示所以左面可以看到一些痕迹。
5.项目环境配置 - 程序入口
点击右上角配置栏,添加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文件,否则会引发编译错误
6.手动注册,编译运行
tomcat8及之后的想要编译就需要手动加载org.apache.jasper.servlet.JasperInitializer
以启动中间件的解析功能。
找到文件,添加一行代码:
context.addServletContainerInitializer(new JasperInitializer(), null);
可以看到这样一行报错,是因为我们没有导入对应的包引起的,我们将鼠标停在上面,alt+enter就可以自动导入相关模块,解决依赖问题。
颜色变过来之后点击运行,就可以成功访问tomcat中间件了。
http://127.0.0.1:8080/