【Tomcat9源码分析】源码下载、编译与调试
来源:互联网 发布:2017网络融资骗局大全 编辑:程序博客网 时间:2024/05/16 01:09
一、环境
以下是我编译Tomcat所采用的环境
- OS X Yosemite Version 10.10.5
- Intellij IDEA 2017.1
- Java version 1.8.0_65
- Apache Maven 3.3.9
- Tomcat 9.0.0.M21
(1)JDK1.8
Tomcat9至少需要jdk1.8版本,网上有很多java安装的教程。
(2)Tomcat源码
访问Tomcat下载地址,最底部的tar包或zip包源码
(3)Maven3.0+
Tomcat默认是采用ant来编译的,若你想用官方的方法编译tomcat,可访问官网how to build tomcat。笔者之前一直用maven作为管理工具,所以上网找了些资料,自己整理了用maven编译tomcat的方法。
二、准备pom.xml文件
解压tomcat源码到/yourpath/tomcat9
,如下图
在/yourpath/tomcat9
目录下添加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>cn.linxdcn</groupId> <artifactId>Tomcat9.0</artifactId> <name>Tomcat9</name> <version>9.0</version> <build> <finalName>Tomcat9</finalName> <sourceDirectory>java</sourceDirectory> <resources> <resource> <directory>java</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3</version> <configuration> <encoding>UTF-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.5</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant-apache-log4j</artifactId> <version>1.9.5</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant-commons-logging</artifactId> <version>1.9.5</version> </dependency> <dependency> <groupId>javax.xml.rpc</groupId> <artifactId>javax.xml.rpc-api</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.eclipse.jdt.core.compiler</groupId> <artifactId>ecj</artifactId> <version>4.4</version> </dependency> </dependencies></project>
三、导入Intellij IDEA
(1)导入maven工程
打开Intellij IDEA,选择Import Project
,在弹出框中选择/yourpath/tomcat9/pom.xml
,一直next
直到finish
(2)修改JDK版本
菜单栏file
->Project Strucuture
->Project
->Project SDK
,确实是否为JDK 1.8
(3)设置启动项
菜单栏run
->Edit Configurations
,左上角的+号,然后选择Application
- Name:可随意起,如
tomcat_9_run
- Main Class:选择
org.apache.catalina.startup.Bootstrap
- VM options:填写
-Dcatalina.home="/yourpath/tomcat9"
(4)删除webapps内容
把/yourpath/tomcat9/webapps
文件夹下的内容情况,新建一个demo
文件夹,以及在demo
文件夹下新建index.html
文件,如下,作为测试例子
<p>Hello! This is my tomcat 9</p>
ps:这里解释下为什么把webapps里的内容全部删除掉,因为我用maven构建有一些类的依赖还没解决,所以tomcat自带的例子一些配置类加载不了,后面会导致出错。作为学习这影响不大,后续有空再解决这个问题。
四、更改源代码
Tomcat9中有部分代码使用CompilerOptions.VERSION_1_9
来判断java虚拟机版本,里面涉及1.9版本的jvm,我机器上识别不了。
在java/org/apache/jasper/compiler/JDTCompiler.java
类中把上述代码找出,删除即可,总共有3处。
五、编译
在Intellij IDEA中,右边Maven Project
->Lifecycle
->compile
进行编译。
看见如下输出信息,即表示编译成功。
[INFO] Scanning for projects...[INFO] [INFO] ------------------------------------------------------------------------[INFO] Building Tomcat9 9.0[INFO] ------------------------------------------------------------------------[INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Tomcat9.0 ---[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent![INFO] Copying 1851 resources[INFO] [INFO] --- maven-compiler-plugin:2.3:compile (default-compile) @ Tomcat9.0 ---[INFO] Compiling 1589 source files to /Users/linxiaodong/LXD/source-code-analysis/tomcat9/target/classes[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 17.299 s[INFO] Finished at: 2017-05-30T22:02:39+08:00[INFO] Final Memory: 24M/666M[INFO] ------------------------------------------------------------------------Process finished with exit code 0
六、运行
在Intellij IDEA中运行Tomat程序,在浏览器中输入
localhost:8080/demo
即可看见你新建的index.html
网页。
- 【Tomcat9源码分析】源码下载、编译与调试
- 【Tomcat9源码分析】组件与框架概述
- 源码下载与编译
- Tomcat9源码编译及导入Eclipse
- 【Tomcat9源码分析】生命周期、启动、停止概述
- 【Tomcat9源码分析】请求过程概述
- 【Tomcat9源码分析】NIO连接器实现
- Tomcat9源代码分析(一)-源码切入点
- android源码编译与调试
- Android源码下载与编译
- Android源码下载与编译
- android 源码 下载与编译
- SEAndroid源码下载与编译
- Openwrt源码下载与编译
- Android源码下载与编译:
- Andriod源码下载与编译
- pixhawk源码下载与编译
- 准备工作:源码下载与编译
- Horizontal and vertical center alignment
- python django环境变量配置
- 给Java新手的一些建议——Java知识点归纳(Java基础部分)
- Java循环中remove方法的使用
- 114. Flatten Binary Tree to Linked List
- 【Tomcat9源码分析】源码下载、编译与调试
- MVC中的service层是干嘛的?
- Linux gdb debug 常用命令
- Qt设计滑动条
- U3D录音以及保存为wav格式文件
- T
- 判断元素出栈合法性
- 【C++】String类拷贝构造函数——浅拷贝优化的三种方式(引用计数)
- dwt和wavedec区别