本文介绍如何搭建tomcat源码环境,以进行tomcat源码的调试。本次搭建Tomcat 9 源码环境的开发环境如下:

JDK:1.8,Tomcat 9 需要 Java Development Kit (JDK) 1.8 或更高版本的支持,可从Oracle 官网下载。

MAVEN:3.9.9

点击查看tomcat和jdk匹配关系

下载 Tomcat9 源码

访问官网:打开浏览器,访问Apache Tomcat 官方下载页面

选择源码包:在页面中找到 “Archives”部分,这里提供了Tomcat9的各个版本的源码包下载地址,点击对应的版本,然后点击src,即可下载对应的源码。我这里使用的tomcat-9.0.55版本。

.zip 格式:适用于 Windows 系统,下载链接如apache-tomcat-9.0.55-src.zip,点击即可下载。

.tar.gz 格式:常用于 Linux 和 macOS 系统,下载链接如apache-tomcat-9.0.55-src.tar.gz 。在 Linux 系统中,可以使用命令行工具如 “tar -zxvf apache-tomcat-9.0.55-src.tar.gz” 进行解压。

下载完成后,将源码包解压到你希望存放的目录。解压后的目录结构包含了 Tomcat 9 的所有源代码、配置文件以及构建脚本等内容,为后续搭建源码环境提供了基础。

在 Idea 中导入源码

添加配置

idea中直接打开解压后的tomcat文件夹即可打开项目,打开后我们首先要配置项目构建文件 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>org.apache.tomcat</groupId>
  <artifactId>Tomcat9.0.55</artifactId>
  <name>Tomcat9.0.55</name>
  <version>c</version>

  <build>
    <finalName>Tomcat9.0.55</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>3.6.1</version>
        <configuration>
          <encoding>UTF-8</encoding>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>4.0.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.10.8</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>
    <dependency>
      <groupId>biz.aQute.bnd</groupId>
      <artifactId>biz.aQute.bndlib</artifactId>
      <version>5.1.1</version>
    </dependency>

    <dependency>
      <groupId>com.unboundid</groupId>
      <artifactId>unboundid-ldapsdk</artifactId>
      <version>4.0.13</version>
      <scope>test</scope>
    </dependency>

  </dependencies>
</project>
XML

构建项目

右击刚刚添加的pom文件,选择 + Add as Maven Project

然后设置apache-tomcat-9.0.55-src/java为项目的源码目录。

找到启动类,org.apache.catalina.startup.Bootstrap,编辑启动参数。

添加VM options 添加时注释要删除

-Dcatalina.home=F:/Resource/apache-tomcat-9.0.55-src  #替换为自己的目录
-Dcatalina.base=F:/Resource/apache-tomcat-9.0.55-src
-Djava.endorsed.dirs=F:/Resource/apache-tomcat-9.0.55-src/endorsed
-Djava.io.tmpdir=F:/Resource/apache-tomcat-9.0.55-src/temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=F:/Resource/apache-tomcat-9.0.55-src/conf/logging.properties
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8011
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Duser.language=en   #避免出现中文乱码问题
-Duser.region=US
Plain text

org.apache.jasper.compiler.JDTCompiler类中的报错注释掉

启动项目

直接启动org.apache.catalina.startup.Bootstrap的时候没有加载org.apache.jasper.servlet.JasperInitializer,从而无法编译JSP。在org.apache.catalina.startup.ContextConfig#configureStart中修改源码将JSP解析器初始化。

//JSP解析器初始化
 context.addServletContainerInitializer(new JasperInitializer(), null);
Java

再次启动项目,浏览器访问 http://localhost:8080

通过以上步骤,即可成功搭建 Tomcat 9 源码环境。在这个环境中,可以深入研究 Tomcat 的源代码,了解其内部工作原理,进行调试和修改。

文章作者: Z
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 微博客
性能调优
喜欢就支持一下吧