Tomcat是用ant管理构建的,也可以写一个pom文件转化成maven方式。

一、下载Ant

既然是用ant管理构建,那就得先安装ant。

地址:https://ant.apache.org/bindownload.cgi

下载后,需要把他放入系统PATH下(安装JAVA方式)。

gedit /etc/profileexport ANT_HOME=ant路径export PATH=$ANT_HOME/bin:$PATHsource /etc/profile
Linux下编译Tomcat9源码并导入IDEA_java

如果安装成功,输入ant -version可以看到ant的版本

Linux下编译Tomcat9源码并导入IDEA_java_02

二、下载Tomcat9

地址:https://tomcat.apache.org/download-90.cgi

然后点击源代码进行下载,两个格式其中一个都行。

Linux下编译Tomcat9源码并导入IDEA_java_03

解压进入tomcat目录,由于tomcat依赖其他的jar,构建时候会自动下载,下载的路径在build.properties.default中可以配置,大概在89行有个base.path,也可以不做修改,默认是${user.home}/tomcat-build-libs。

Linux下编译Tomcat9源码并导入IDEA_java_04Linux下编译Tomcat9源码并导入IDEA_java_05

三、ant构建

直接输入ant即可开始构建,这个过程中会下载依赖的jar,但是他不显示进度,可以到他的依赖jar下载目录,一直刷新查看他当前下载的文件大小。

Linux下编译Tomcat9源码并导入IDEA_java_06

比如这里正在下载wsdl4j-1.6.3.jar,临时存放到了/home/hxl/tomcat-build-libs/download-1686272198.tmp,去这个文件中不停看他的大小,如果长时间不动,就得换个网试试了。

Linux下编译Tomcat9源码并导入IDEA_java_07

或者手动下载,比如他先会输出testexist,判断这个jar是否存在,如果存在,则不下载。当手动下载好一个jar后,新建一个这个jar所在的文件夹,就是以下红色圈住的,把这个jar放入进入(更具不同jar而定)。重新ant一下,就好了。

Linux下编译Tomcat9源码并导入IDEA_java_08

当所有jar都下载好之后,剩下的工作一气呵成,经过ant噼里啪啦的一顿构建复制,会在其目录output/build下生成构建好的tomcat,这个目录就是我们常用的,进入bin可以直接./startup.sh启动Tomcat

Linux下编译Tomcat9源码并导入IDEA_java_09
Linux下编译Tomcat9源码并导入IDEA_java_10

四、Bootstrap

tomcat的启动类在java/org/apache/catalina/startup/Bootstrap.java中,编译后在bin/bootstrap.jar中,如果单纯的java -jar bootstrap.jar指定是启动不了的。因为有些依赖他不知道,所以需要catalina.sh来给他传入。catalina中指定了很多VM参数,如-classpath。下面的这段其中还向Bootstrap传入了start,Bootstrap会在main方法中进行判断。

Linux下编译Tomcat9源码并导入IDEA_java_11Linux下编译Tomcat9源码并导入IDEA_java_12

五、IDEA 导入源码

直接File-Open-Tomcat源码就可以。

然后打开项目设置,指定一个编译输出目录.

Linux下编译Tomcat9源码并导入IDEA_java_13

最后对java文件夹进行源标识就可以了。

Linux下编译Tomcat9源码并导入IDEA_java_14

但是构建时候会报错,一是缺少jar包,二是webapps下默认的的项目导致。解决也很简单,首先新建一个lib文件夹,把上面下载的jar包都复制到此处,然后全部选中,右击Add as Library即可。并且删除webapps下所有的文件。


接着找到启动类,右击启动。

Linux下编译Tomcat9源码并导入IDEA_java_15如果不出意外是这样的。这时候可以把war放入webapps下,进行调试以及学习。Linux下编译Tomcat9源码并导入IDEA_java_16