1. 使用IDEA从GITHUB上克隆源码

image.png

image.png

2. 源码克隆下来后,不能直接运行,需要用ant进行编译,主要目的是下载依赖

image.png

在用ant编译之前,建议先修改build.properties.default文件中的base.path的值,ant编译时需要去下载第三方jar包,base.path将指定这些jar存放的位置。

image.png

修改完成后,在源码目录下使用命令行执行ant ide-intellij进行编译。执行命令后需要等待一段时间。

image.png

执行成功后在工程目录结构中多出一个文件夹,该文件夹保存了Tomcat源码所依赖的jar。

image.png

我们要把该文件夹下的jar加入到classpath中去,进入到Project Structure。把下载的依赖添加进来。
image.png

image.png

3. 依赖添加进来后,可以尝试使用IDEA构建工程了。

image.png

构建过程中可能会报错,比如:
image.png

该modules下的几个模块都是maven工程,右键pom.xml文件点击Add as Maven Project,点击后会自动下载依赖,从而解决构建报错,其他模块也类似。

对三个模块都下载依赖后,重新构建后,可能会报如下错误:
image.png

提示ant包不存在,需要引入ant.jar的依赖,还是一样,打开Project Structure,选择tomcat Module,添加依赖,将ant.jar添加进来,这里需要注意,Tomcat默认用的是ant-1.9.8.jar,所以可以提前把这个jar下载在电脑上,然后引入此jar。

image.png

但是Apply的时候,会提示:
image.png

这个我也不知道怎么办了…,解决办法是,将ant-1.9.8.jar保存在tomcat-build-jars文件夹下,然后右键该jar,点击Add as Library。

image.png

image.png

点击ok,可以绕过刚刚的错误。重新构建,仍然会报错:
image.png

将@VERSION@改成9即可,再次重新构建,构建没有问题了。

如果构建后没有报错,但是下图的这个Java文件中还是报红色,这应该是IDEA的问题,只需要手动的使用IDEA的快捷提示重新import一下依赖即可。
image.png

4. 构建成功后,运行源代码。

Tomcat的启动类是org.apache.catalina.startup.Bootstrap类。直接运行此类中的Main方法可以看到Tomcat的启动日志。
image.png

但是我的机器上有乱码,Tomcat做了国际化.

增加运行参数:-Duser.language=en。
image.png

增加之后再运行就没有问题了。
image.png

但是此时访问localhost:8080,仍然会报错,看不到我们想看到的熟悉的Tomcat欢迎页
image.png

这是因为Tomcat内部使用了SPI机制来初始化jsp相关的东西,手动运行源码的过程中默认不会去初始化jsp相关。

我们找到
image.png

在工程目录下新建resouces文件夹,然后新建META-INF文件夹,然后将上图中的services文件夹复制到META-INF文件中,最后将resources文件夹加入到classpath中。
image.png

重新运行Bootstrap,访问正常。

image.png