tomcat源码分析(一) idea编译Tomcat源码

源码地址:https://gitee.com/archguide/tomcat

 

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

 

 

 

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

 

 

 

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

 

 

 

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

 

 

 

 

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

 

 

 

 

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

 

 

 

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

 

 

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

 

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

 

 

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

 

 

 

但是Apply的时候,会提示:

 

 

 

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

 

 

 

 

 

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

 

 

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

 

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

 

 

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

 

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

 

 

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

 

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

 

 

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

 

 

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

 

 

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

 

我们找到

 

 

 

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

 

 

 

重新运行Bootstrap,访问正常。

 

 

 

 
 
posted @ 2021-05-24 12:11  蒙恬括  阅读(901)  评论(0编辑  收藏  举报