声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!
tomcat9.0.x的布置有视频,一步一步调试的,比较详细。如果看下面步骤有疑问的可以跟着这个师傅搭建环境。
tomcat9.0.x源码阅读环境搭建(乱码问题需要修改源码解决,视频有具体讲解)https://www.bilibili.com/video/BV1ST4y177Tx
源码下载地址:https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.43/src/
maven环境搭建
源码导入idea,根目录创建pom.xml文件,添加依赖:
创建一个Tomcat的实例运行文件catalina-home
在Catalina-home文件中创建这几个文件夹,bin、conf、 webapps 应该是从apache-tomcat-9.0.43-src复制过来的。
除了conf目录其他都是可选的,webapps用于我们应用默认的部署目录,work logs是启动Tomcat自动生成的,其结构跟我们下载的二进制Tomcat程序是一样的.
创建一个pom.xml文件,用来配置maven依赖。
<module>
标签里的内容就是我们解压的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>gxf</groupId>
<artifactId>apache-tomcat-9</artifactId>
<name>apache-tomcat-9-source</name>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>apache-tomcat-9.0.43-src</module>
</modules>
</project>
在Tomcat源码文件中创建一个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>Tomcat9.0.43</artifactId>
<name>Tomcat9.0.43</name>
<version>9.0</version>
<build>
<finalName>Tomcat9.0</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>3.8.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</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.6.1</version>
</dependency>
<dependency>
<groupId>biz.aQute.bnd</groupId>
<artifactId>biz.aQute.bndlib</artifactId>
<version>5.2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
等待idea将项目构建好
配置启动
Main class设置为org.apache.catalina.startup.Bootstrap
添加VM options
-Dcatalina.home=D:try_testjava_demotomcat_9.0.43catalina-home
-Dcatalina.base=D:try_testjava_demotomcat_9.0.43catalina-home
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=D:try_testjava_demotomcat_9.0.43catalina-home/conf/logging.properties
-Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8
问题解决:tomcat java: 程序包sun.rmi.registry不存在
java: 找不到符号
符号: 变量 VERSION_9
位置: 类 org.eclipse.jdt.internal.compiler.impl.CompilerOptions
解决:屏蔽不需要的版本
比如我用jdk1.8,后面都屏蔽了
下面还有一块
java: 程序包trailers不存在
https://www.cnblogs.com/jhxxb/p/10768580.html
ResponseTrailers 找不到,把 homewebappsexamplesWEB-INFclassestrailers 目录拷贝到 test 目录下
CookieFilter 找不到,把 homewebappsexamplesWEB-INFclassesutilCookieFilter.java 文件拷贝到 testutil 目录下
运行tomcat,访问,报错500
D:try_testjava_demotomcat_9.0.43apache-tomcat-9.0.43-srcjavaorgapachecatalinastartupContextConfig.java
org.apache.catalina.startup.ContextConfig#configureStart
// 加上jsper初始化解析器
context.addServletContainerInitializer(new JasperInitializer(), null);
ok
参考链接
https://www.cnblogs.com/wk-missQ1/p/13138720.html
https://blog.csdn.net/ganquanzhong/article/details/107267894
导入tomcat源码:程序包aQute.bnd.annotation.spi不存在 https://blog.csdn.net/lazy_cat_go/article/details/113694812
https://www.bilibili.com/video/BV1ST4y177Tx
往期推荐
代码审计 | API批量分配导致的普通用户垂直越权到admin
原文始发于微信公众号(进击的HACK):本地构建Tomcat9.x源码环境
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论