天天看点

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

官方地址

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

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

历史版本:

https://archive.apache.org/dist/tomcat/tomcat-8/

这里最新的是 8.5.55 ,我们就用这个吧

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

得到 apache-tomcat-8.5.55-src.zip

源码搭建分析

我们在使用tomcat时,俩目录 conf 和 webapps 是不是经常需要修改?

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

一个负责tomcat的配置文件信息,一个负责应用 。 很显然,我们使用源码构建tomcat环境的时候,也要告诉tomcat这两个目录的位置,以便加载配置文件和应用。

不管形式怎么变, 使用tomcat编译好的二进制还是源码部署编译,tomcat该加载的配置文件都是一样的。

因此 ,使用源码编译需要做出点改变, 比如下面搭建步骤中新建source文件夹目录,存放conf和webapps(实际上,这个目录名字爱叫啥,爱放哪 放哪, 我们只要通过VM options 告诉tomcat就好了,为了方便管理,所以在源码的一级目录下建个目录source)

源码搭建步骤 (Maven管理)

Step1. 新增maven管理文件 pom.xml

解压apache-tomcat-8.5.55-src.zip 后 ,比如我这里放到了D盘 , 在 D:\apache-tomcat-8.5.55-src 下 新建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>apache-tomcat-8.5.50-srcartifactId>
    <name>Tomcat8.5name>
    <version>8.5version>
 
    <build>
      	
        <finalName>Tomcat8.5finalName>
        <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>8source>
                    <target>8target>
                configuration>
            plugin>
        plugins>
    build>

    
    <dependencies>
        
        <dependency>
            <groupId>javax.xmlgroupId>
            <artifactId>jaxrpcartifactId>
            <version>1.1version>
        dependency>
        
        <dependency>
            <groupId>javax.xml.soapgroupId>
            <artifactId>javax.xml.soap-apiartifactId>
            <version>1.4.0version>
        dependency>
        
        <dependency>
            <groupId>wsdl4jgroupId>
            <artifactId>wsdl4jartifactId>
            <version>1.6.2version>
        dependency>
        
        <dependency>
            <groupId>org.eclipse.jdt.core.compilergroupId>
            <artifactId>ecjartifactId>
            <version>4.5.1version>
        dependency>
        
        <dependency>
            <groupId>antgroupId>
            <artifactId>antartifactId>
            <version>1.7.0version>
        dependency>
        
        <dependency>
            <groupId>org.easymockgroupId>
            <artifactId>easymockartifactId>
            <version>3.4version>
        dependency>
    dependencies>
project>           

复制

Step2. 处理conf 和 webapps

在 D:\apache-tomcat-8.5.55-src 下新建个source目录 ,原因如上分析

在apache-tomcat-8.5.55-src下创建source文件夹 ,将conf、webapps目录移动到 source文件夹中

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

这里多了其他的,是因为我刚才已经启动tomcat了…

Step3. 导入IEDA

3.1 配置Main Class

新增Application , 选择Main class , 配置VM 参数

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)
Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

3.2 配置VM 参数

VM参数 ,告诉tomcat 家目录一级 log日志文件目录。 【tomcat源码运行需要加载配置文件】

-Dcatalina.home=D:\apache-tomcat-8.5.55-src\source
-Dcatalina.base=D:\apache-tomcat-8.5.55-src\source
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=D:\apache-tomcat-8.5.55-src\source\conf\logging.properties           

复制

完整的信息如下:

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

Step4. 启动tomcat

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

访问 http://locahost:8080/

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

原因: Jsp引擎Jasper没有被初始化,从而无法编译处理Jsp,Jsp是需要被转换成servlet进一步编译处理的,只需要在tomcat的源码ContextConfig类中的configureStart方法中增加一行代码将Jsp引擎初始化

// 初始化Jasper  (JSP解析引擎)
  context.addServletContainerInitializer(new JasperInitializer(),null);           

复制

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)

重启再次访问 http://locahost:8080/

Tomcat - 源码构建Tomcat 8.5.55 启动官方地址源码搭建分析源码搭建步骤 (Maven管理)