idea如何导入tomcat源码

第一步:下载tomcat的源码

idea如何导入tomcat源码

idea如何导入tomcat源码

第二步:

解压源码包,写pom.xml文件

将下载好的文件解压。因为启动Tomcat还需要一些jar包,因此你可以直接将需要的jar拷贝后放在与java文件夹同级的目录下,也可以给解压后的文件夹添加一个pom文件,最终目的就是下载需要的jar。其实使用ant就能完成这些,但是对于ant不熟悉,进入解压的目录后执行ant始终报错,最后也就没使用这种方式了。

idea如何导入tomcat源码

<?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</artifactId>

    <name>tomcat8</name>

    <version>8.5</version>

    <build>

        <finalName>tomcat8</finalName>

        <sourceDirectory>java</sourceDirectory>

        <!--<testSourceDirectory>test</testSourceDirectory>  test 下的有些文件报错,因此将test文件夹去掉了-->

        <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.5.1</version>

                <configuration>

                    <encoding>UTF-8</encoding>

                    <source>1.8</source>

                    <target>1.8</target>

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-jar-plugin</artifactId>

                <version>2.6</version>

            </plugin>

        </plugins>

    </build>

    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.11</version>

            <scope>test</scope>

        </dependency>

        <dependency>

            <groupId>ant</groupId>

            <artifactId>ant</artifactId>

            <version>1.6.5</version>

        </dependency>

        <dependency>

            <groupId>org.easymock</groupId>

            <artifactId>easymock</artifactId>

            <version>3.4</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>-->

        <!-- https://mvnrepository.com/artifact/org.eclipse.jdt/ecj -->

        <dependency>

            <groupId>org.eclipse.jdt</groupId>

            <artifactId>ecj</artifactId>

            <version>3.14.0</version>

        </dependency>

    </dependencies>

</project>

 

第三部:tomcat源码导入idea中

idea如何导入tomcat源码

 

使用maven命令编译项目,在编译的时候会报错。第一个是jdk1.8的版本,没细看,直接注释掉就行。

idea如何导入tomcat源码

 

第四步:运行Bootstrap类

idea如何导入tomcat源码

 

启动时不行,这个时候需要配置运行参数

idea如何导入tomcat源码

 

 

-Dcatalina.home=E:\sourcesdemo\apache-tomcat-8.5.57-src -Dcatalina.base=E:\sourcesdemo\apache-tomcat-8.5.57-src -Djava.endorsed.dirs=E:\sourcesdemo\apache-tomcat-8.5.57-src\endorsed  -Djava.io.tmpdir=E:\sourcesdemo\apache-tomcat-8.5.57-src\temp  -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager  -Djava.util.logging.config.file=E:\sourcesdemo\apache-tomcat-8.5.57-src\conf\logging.properties

idea如何导入tomcat源码

 

 

 

配置好了启动,发现运行报错,

访问路径 http://localhost:8080报错,后端空指针异常

原因是直接启动org.apache.catalina.startup.Bootstrap时没有加载org.apache.jasper.servlet.JasperInitializer,从而无法编译JSP。

第五步:

在ContextConfig.java中的webConfig();下添加代码:

 

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

 

ContextConfig.java和Bootstrap在同一处

idea如何导入tomcat源码