本文介绍一下tomcat的本地源码构建和源码运行:
- tomcat源码下载
- 使用ant构建tomcat,并在本地启动
- tomcat源码导入idea
- 使用idea构建tomcat,并在本地启动
为后续的tomcat源码阅读做个基础。
环境准备
- windows 10
- java 8+
- ant 1.9.5+
- idea 2021.3.3
tomcat源码下载
官网
https://tomcat.apache.org/download-90.cgi
github或gitee
git clone https://gitee.com/apache/tomcat.git
选择分支
cd tomcat
# 查看一下当前的标签
git tag
# 切换分支
git checkout 9.0.9
ant构建tomcat
构建
# This will execute the "deploy" target in build.xml.
ant
# 或者
ant deploy
output目录
使用ant构建之后,文件会被保存到output目录下:
output
|-- bnd
|-- build
|-- bin
|-- conf
|-- lib
|-- logs
|-- temp
|-- webapps
|-- work
|-- classes
|-- jdbc-pool
|-- manifests
build目录下保存的就是我们平时使用的tomcat。
本地运行
cd output/build/bin
# 执行启动脚本
startup.bat
tomcat源码导入idea
以下步骤:
- 创建out、lib目录
- 拷贝依赖jar
- Open tomcat源码目录
- 配置Project Structure -> JDK及Compiler output目录
- 配置Project Structure -> Modules -> Dependencies参数
- 将java目录Mark as为Source root
创建out、lib目录
out - 用于存放构建文件。
lib - 存放依赖jar文件。
拷贝依赖jar
之前使用ant构建时,ant会下载构建时需要的jar文件(存放在${user.home}/tomcat-build-libs下面),在这里需要将这些文件拷贝到lib目录下:
biz.aQute.bnd-4.0.0.jar
biz.aQute.bndlib-4.0.0.jar
commons-daemon-1.1.0.jar
ecj-4.7.3a.jar
另外需要下载这两个jar文件:
jaxrpc-api-1.1.jar
wsdl4j-1.6.3.jar
最后需要把output/build/lib下面的这两个jar文件拷贝过来,用于在运行时编译jsp文件:
jasper.jar
jsp-api.jar
Open tomcat源码目录
配置JDK及Compiler output目录
Compiler output配置tomcat/out目录。
配置Dependencies参数
添加Dependencies参数:
- ${ant.home}/lib
- tomcat/lib
idea构建运行tomcat
构建
Build -> Build Project
创建catalina目录
在tomcat源码目录下创建catalina目录,作为运行tomcat时的catalina.home和catalina.base。
将output/build下面的conf、logs、temp、webapps、work拷贝到catalina目录下:
tomcat
|-- catalina
|-- conf
|-- logs
|-- temp
|-- webapps
|-- work
配置appBase
配置catalina/conf/server.xml文件:
<Host name="localhost" appBase="C:\workspace\tomcat\catalina\webapps" unpackWARs="true" autoDeploy="true">
appBase配置catalina/webapps目录,我的环境在C:\workspace\tomcat\catalina\webapps这里。
idea运行源码启动tomcat
Edit Configurations -> 添加一个Application:
Main Class:
org.apache.catalina.startup.Bootstrap
VM Options:
-Djava.util.logging.config.file=C:\workspace\tomcat\catalina\conf\logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -Dcatalina.base=C:\workspace\tomcat\catalina -Dcatalina.home=C:\workspace\tomcat\catalina -Djava.io.tmpdir=C:\workspace\tomcat\catalina\temp
Program argument:
start