Tomcat 9.0.x 源码编译

文章目录

  • 一、克隆源码
  • 二、构建 Maven
    • 1)在项目根目录中新建 pom.xml 文件
    • 2)然后 Add Maven Projects
  • 三、在目录中增加 home 目录
  • 四、增加启动配置
  • 五、其它问题
    • 1)控制台乱码
      • 解决
    • 2)启动后访问 localhost:8080 报错
      • 解决

一、克隆源码

  1. github搜索Tomcat源码
  2. fock到自己仓库,方便后续提交修改
  3. 如果嫌 github 慢,可以上 gitee 将 github 的仓库同步过来
  4. git clone
  5. checkout 9.0.x 的分支,最好自己新建一个分支,避免污染原分支

二、构建 Maven

1)在项目根目录中新建 pom.xml 文件

Tomcat 9.0.x 源码编译_第1张图片


<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.0modelVersion>
  <groupId>org.apache.tomcatgroupId>
  <artifactId>tomcat9.0.xartifactId>
  <name>tomcat-9.0.xname>
  <version>9.0.xversion>

  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.13.2version>
      <scope>testscope>
    dependency>

    <dependency>
      <groupId>org.easymockgroupId>
      <artifactId>easymockartifactId>
      <version>4.3version>
    dependency>

    <dependency>
      <groupId>org.apache.antgroupId>
      <artifactId>antartifactId>
      <version>1.9.5version>
    dependency>

    <dependency>
      <groupId>javax.xml.rpcgroupId>
      <artifactId>javax.xml.rpc-apiartifactId>
      <version>1.1version>
    dependency>

    <dependency>
      <groupId>wsdl4jgroupId>
      <artifactId>wsdl4jartifactId>
      <version>1.6.2version>
    dependency>

    
    <dependency>
      <groupId>org.eclipse.jdtgroupId>
      <artifactId>ecjartifactId>
      <version>3.26.0version>
    dependency>

    
    <dependency>
      <groupId>biz.aQute.bndgroupId>
      <artifactId>biz.aQute.bndlibartifactId>
      <version>6.4.0version>
    dependency>


  dependencies>

  <build>
    <finalName>Tomcat8.5.55finalName>
    <sourceDirectory>javasourceDirectory>
    <resources>
      <resource>
        <directory>javadirectory>
      resource>
    resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-compiler-pluginartifactId>
        <version>3.1version>
        <configuration>
          <encoding>UTF-8encoding>
          <source>1.8source>
          <target>1.8target>
        configuration>
      plugin>
    plugins>
  build>
project>

2)然后 Add Maven Projects

Tomcat 9.0.x 源码编译_第2张图片

三、在目录中增加 home 目录

将外面的 conf 和 webapps 复制到 home 目录中,webapps 目录中只需保留 ROOT 目录即可

这样做的好处:

  • 统一管理
  • 避免污染原文件

Tomcat 9.0.x 源码编译_第3张图片

四、增加启动配置

Tomcat 9.0.x 源码编译_第4张图片

  • JREJDK 8

  • Main Classorg.apache.catalina.startup.Bootstrap

  • Add VM options

    -Dcatalina.base=/Users/mac/IdeaProjects/tomcat-9.0.x/home -Dcatalina.home=/Users/mac/IdeaProjects/tomcat-9.0.x/home -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/Users/mac/IdeaProjects/tomcat-9.0.x/conf/logging.properties -Dfile.encoding=utf-8
    

    注意: 上面的 /Users/mac/IdeaProjects/tomcat-9.0.x/ 的目录是我本地项目的目录,需要根据自己的实际目录来修改

五、其它问题

1)控制台乱码

Tomcat 9.0.x 源码编译_第5张图片

解决

在方法 org.apache.tomcat.util.res.StringManager#getString(java.lang.String) 中增加如下代码:

// 日志打印时会读取系统默认的语言,将原本的 iso-8859-1 转换成 utf-8
if (str != null) {
    try {
        str = new String(str.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
    } catch (Exception e) {

    }
}

Tomcat 9.0.x 源码编译_第6张图片
Tomcat 9.0.x 源码编译_第7张图片

2)启动后访问 localhost:8080 报错

Tomcat 9.0.x 源码编译_第8张图片

解决

在方法 org.apache.catalina.startup.ContextConfig#configureStart 中添加

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

Tomcat 9.0.x 源码编译_第9张图片

你可能感兴趣的:(tomcat,java,源码,编译,tomcat9)