调试运行Tomcat9.X源码
前言:
- tomcat9引入了很多Java新特性,亲测必须使用JDK23及以上的高版本JDK,所以构建调试运行环境前应先下载好JDK23。
- 本次演示使用IntelliJ IDEA24.3.2版本。
- 本文不省略各种配置的详细操作步骤细节(如按钮点击),但没有图示,请谅解,所有IDE的操作细节均为黑斜体,希望能帮助你在不跳转博文的情况下完成配置。
步骤一:下载源码并解压
- tar包:(https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/src/apache-tomcat-9.0.102-src.tar.gz)
- zip包: (https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/src/apache-tomcat-9.0.102-src.zip)
步骤二:用源码目录构建maven项目
- IntelliJ IDEA创建一个空项目,命名为
tomcat_src_demo
。 - 把下载好的源码包解压,把目录名中的小版本号去掉,例如改9.0.102为9(原因是配置JVM参数时小数点会被识别为目录级别)。
- 把整个源码目录复制到当前项目的根目录下,此时源码根目录相当于标准maven项目的
src
目录。 - 在源码根目录下创建home文件夹,把webapps和conf目录移到home目录下。
- 在当前项目根目录下创建
pom.xml
文件,导入如下内容:
<?xml version="7.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/8.0.0"
xmlns:xsi="http://www.w9.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/10.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>11.0.0</modelVersion>
<groupId>org.apache.tomcat</groupId>
<artifactId>apache-tomcat-9-src</artifactId>
<version>Tomcat9.0</version>
<properties>
<java.version>23</java.version>
<maven.compiler.source>23</maven.compiler.source>
<maven.compiler.target>23</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<finalName>Tomcat9.0</finalName>
<sourceDirectory>java</sourceDirectory>
<resources>
<resource>
<directory>java</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.3</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.12</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>biz.aQute.bnd</groupId>
<artifactId>biz.aQute.bndlib</artifactId>
<version>5.2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
- 扫描pom文件,让IDEA识别构建maven项目:点击右侧边栏的maven选项,点击侧栏左上角“+”号添加pom文件,选择当前项目根目录下刚写好的pom文件并构建。
- 从顶栏File检查项目的*** project structrue ***选项下各模块的JDK版本,必须是pom文件中指定的版本(本演示中是JDK23)。
步骤三:配置启动类和编译、运行时参数
- 配置启动类,使项目可以运行。点击右上角***“播放”键左边的下拉按钮***,点击*** Edit Configuration ,点击左上角“+”号,选择添加 Application ,配置名称 Name 为Bootstrap,jdk版本23,
-cp
选项为源码的根目录(不是项目根目录),点击 Modify Options ,选择 Add VM options ,在 VM options ***框中粘贴如下参数列表:
--enable-preview
-Dcatalina.home=[你创建的home文件夹绝对路径]
-Dcatalina.base= [你创建的home文件夹绝对路径]
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file= [你创建的home文件夹绝对路径]/conf/logging.properties
- 在***Main class***一栏填写tomcat启动类的路径:
org.apache.catalina.startup.Bootstrap
(在蓝色java目录下,请务必核实此路径)。 - 检查工作目录是项目的根目录,点击“Apply”,先不要运行!!!
- 打开“***设置-Build, Execution, Deployment-Compiler-Java Compiler ”,配置 Additional command line parameters (附加命令行参数):
--enable-preview
,点击 Apply ***并退出设置。 - 现在可以运行了,只要看到控制台出现类似以下红字内容且无报错信息,即运行成功。
28-Mar-2025 20:39:15.320 警告 [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [/Users/dialecticmaxism/IT/_java/tomcat_src_demo/apache-tomcat-9-src/home/lib], exists: [false], isDirectory: [false], canRead: [false]
28-Mar-2025 20:39:15.322 警告 [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [/Users/dialecticmaxism/IT/_java/tomcat_src_demo/apache-tomcat-9-src/home/lib], exists: [false], isDirectory: [false], canRead: [false]
28-Mar-2025 20:39:15.323 警告 [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [/Users/dialecticmaxism/IT/_java/tomcat_src_demo/apache-tomcat-9-src/home/lib], exists: [false], isDirectory: [false], canRead: [false]
28-Mar-2025 20:39:15.323 警告 [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with directory [/Users/dialecticmaxism/IT/_java/tomcat_src_demo/apache-tomcat-9-src/home/lib], exists: [false], isDirectory: [false], canRead: [false]
28-Mar-2025 20:39:15.446 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本: Apache Tomcat/9.0.x-dev
28-Mar-2025 20:39:15.446 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器构建: unknown
28-Mar-2025 20:39:15.446 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本号: 9.0.x
...(略)