本地下载并运行tomcat源码

搭建ApacheTomcat8.5fromSourcewithMaven:AStep-by-StepGuide

步骤1:下载

https://tomcat.apache.org/download-80.cgi

第二步:idea创建空的java项目

项目目录:/Users/wwwroot/tomcat_src

第三步:将下载后的tomcat源码解压并copy到刚创建的项目目录

最终的目录结构

第四步:在源码目录创建home目录,并将conf、webapps目录一入到home目录

移入后的目录结构(是mv操作,而非cp操作)

第五步:设置maven环境

第六步:在源码目录创建pom.xml文件,用于使用maven管理包

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</artifactId>
  <name>Tomcat8.5</name>
  <version>8.5</version>

  <build>
    <finalName>Tomcat8.5</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.4</version>
        <configuration>
          <encoding>UTF-8</encoding>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>3.4</version>
    </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.5.1</version>
    </dependency>
    <dependency>
      <groupId>com.unboundid</groupId>
      <artifactId>unboundid-ldapsdk</artifactId>
      <version>6.0.3</version>
    </dependency>

  </dependencies>
</project>

第七步:把tomcat源码目录设置为maven项目

选中“pom.xml”->右击->点击“Add as Maven Project”

第八步:配置启动项及启动tomcat

入口:Edit Configurations...  

配置 1) jre版本、2)vm启动配置参数(特别要注意,别配置到programming arguments参数里面了)、3)主类

主类:org.apache.catalina.startup.Bootstrap (目录:java/org/apache/catalina/startup/Bootstrap.java)

vm参数:-Dcatalina.home=/Users/wwwroot/tomcat_src/apache-tomcat-8.5.100-src/home
-Dcatalina.base=/Users/wwwroot/tomcat_src/apache-tomcat-8.5.100-src/home
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=/Users/wwwroot/tomcat_src/apache-tomcat-8.5.100-src/home/conf/logging.properties
-Duser.language=en
-Duser.region=US
-Dfile.encoding=UTF-8

注:需要在tomcat的源码org.apache.catalina.startup.ContextConfig中的configureStart函数中手动将JSP解析器初始化:

webConfig();

//加上下面这一行

context.addServletContainerInitializer(new JasperInitializer(), null);

<think>嗯,用户想要了解在本地编译运行Tomcat源码的具体步骤。从提供的引用来看,用户已经收集了多篇相关文档的片段,包括环境设置、目录配置、参数调优和报错处理等信息。我需要整合这些零散信息,给出一套系统化的操作流程。用户可能是位Java开发工程师,正在研究Tomcat内部实现原理。ta特意强调要参考站内引用,说明需要具体落地的解决方案而非理论说明。考虑到Tomcat源码编译的复杂性,用户可能有IDE操作经验但对服务器框架底层不太熟悉,步骤中要包含:环境准备→目录配置→IDE设置→运行调试→常见报错处理的全流程。引用中值得关注的细节包括:引用[1]提到的创建out/lib目录操作与标准Maven项目结构不同,这是传统Ant编译方式遗留的习惯;引用[3]的VM参数特别重要,尤其是catalina.home/base这对孪生参数;引用[4]的JSP解析器初始化补丁解决了常见ClassNotFound问题。有趣的是引用[1]和[2]分别展示了Ant和Maven两种编译方式,需要明确区分。技术要点需要验证:最新版Tomcat已全面转向Maven编译,但引用中8.5/9.0版本参数仍有效;JDK版本最好限定在8-11之间避免兼容问题;那个JasperInitializer补丁其实在Tomcat9之后已内置,但很多教程仍会提及。运行目录结构要特别说明——home目录实际需要包含conf/webapps等文件夹,这点容易遗漏。将规划五个模块组织内容:先通过环境准备强调JDK/Maven等基础依赖,然后用IDE配置图解关键步骤,VM参数表格化呈现避免路径错误,最后补充两个高频报错解决方案。考虑到用户可能在不同阶段遇到问题,在常见问题部分预留扩展入口比较实用。</think> 以下是综合多个引用后的完整Tomcat源码本地编译运行步骤(基于IDEA): ### 一、环境准备 1. **下载源码** 从Apache官网下载对应版本:[Tomcat 9源码](https://downloads.apache.org/tomcat/tomcat-9/v9.0.45/src/apache-tomcat-9.0.45-src.zip) [^2] ```bash wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.45/src/apache-tomcat-9.0.45-src.zip unzip apache-tomcat-9.0.45-src.zip ``` 2. **安装依赖** - JDK 8+(推荐JDK 11) - Maven 3.6+ ### 二、IDEA项目配置 1. **导入项目** `File` → `Open` → 选择解压后的源码目录 2. **设置编译输出路径** `File` → `Project Structure` → `Project Settings` → `Project` - 设置 **SDK** 和 **Language level**(建议JDK 11) - `Compiler output` → 创建指定`out`目录 [^1] ``` /your_project_path/out ``` 3. **添加依赖库** `Project Structure` → `Libraries` → 添加所有`lib`目录中的jar包 [^1] ```bash # 需先创建lib目录放入依赖 mkdir lib cp /path/to/tomcat/bin/*.jar lib/ ``` ### 三、配置运行参数 1. **创建启动类** `Run` → `Edit Configurations` → `Add new (Application)` - **Main class**: `org.apache.catalina.startup.Bootstrap` [^3] - **VM options**(按实际路径修改): ``` -Dcatalina.home=/your_project_path/home -Dcatalina.base=/your_project_path/home -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/your_project_path/home/conf/logging.properties ``` - **Working directory**: `/your_project_path` [^3] 2. **初始化home目录** ```bash mkdir -p home/{conf,webapps,logs} cp conf/* home/conf/ # 复制默认配置文件 ``` ### 四、解决常见错误 1. **JSP解析报错** 在`ContextConfig.configureStart()`方法中添加初始化代码 [^4]: ```java // 文件位置:org/apache/catalina/startup/ContextConfig.java context.addServletContainerInitializer(new JasperInitializer(), null); ``` 2. **类加载问题** 检查`lib`目录是否包含: - `tomcat-jasper.jar` - `tomcat-juli.jar` - `ecj-*.jar`(JSP编译器) ### 五、运行验证 1. 启动配置好的`Bootstrap` 2. 访问 `http://localhost:8080` → 出现Tomcat欢迎页即成功 > **注意事项** > - Tomcat 10+需注意Jakarta EE包名变更(`javax.*` → `jakarta.*`) > - Maven项目可直接通过`mvn package`构建(引用[2])
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值