• Tomcat 9.0.x 源码编译


    一、克隆源码

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

    二、构建 Maven

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

    在这里插入图片描述

    
    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

    2)然后 Add Maven Projects

    在这里插入图片描述

    三、在目录中增加 home 目录

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

    这样做的好处:

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

    在这里插入图片描述

    四、增加启动配置

    在这里插入图片描述

    • 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
      
      • 1

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

    五、其它问题

    1)控制台乱码

    在这里插入图片描述

    解决

    在方法 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) {
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    在这里插入图片描述

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

    在这里插入图片描述

    解决

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

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

    在这里插入图片描述

  • 相关阅读:
    软件开发基础【信息系统监理师】
    day38:网编day5, IO多路复用
    维格云自定义按钮入门教程
    “AdhereToHealthyHabits“ app Tech Support(URL)
    pmp新考纲全真模拟题,提分敏捷+情景
    【微信】实战Adnroid上的小程序调试
    【Prometheus】mysqld_exporter采集+Grafana出图+AlertManager预警
    机器视觉技术在工业智能化生产中的应用
    vue3 vant3推广活动项目-实现验证码登录功能
    oracle 递归
  • 原文地址:https://blog.csdn.net/zyx1260168395/article/details/134257066