1 源码下载
1 TOMCAT
官方文档下载:地址
可以任选一种格式进行下载,这里我选择的是tar格式的文件,下载后直接打开可以得到如下文件:
2 ANT
由于tomcat源码是基于ant进行构建的,因此需要提前安装好ant的编译环境。ant 的安装可以直接去ant官网上下载:: ANT下载
这里需要注意一下,1.9.16的ant包 支持jdk5以上的环境,1.10.12的ant包是支持jdk8以上的环境,这里我编译的时候发现有一个问题,1.9.16的ant包在jdk17的时候编译tomcat源码通过不了,所以选择了下载1.10.12的tar包。
3 ANT安装
下载的ant包是不需要安装的,下载好后,直接打开放在某一个路径下面,我下载好后是直接放在~/Documents/下的,直接解压即可,解压后得到以下文件:
解压完成后,需要配置一下ant环境即可。即在/etc/profile中配置一下 ANT_HOME,然后将对应的ANT_HOME加入到对应的PATH中,最后export一下。本地配置:
ANT_HOME=/Users/***/Documents/apache-ant-1.10.12
PATH=$ANT_HOME/bin:$PATH:
export PATH
配置好后,保存并退出, 最后在控制台输入 source /etc/profile 让它生效即可,做好上述配置后 可以在控制台中 输入 ant -version 验证一下,是否安装成功 安装成功后,输入 ant -version 可以看到如下输出:
TOMCAT编译
- tomcat源码下载好后里面含有一个文件 build.properties.default, 需要将该文件复制一份并命名为build.properties, 然后在该文件中找到base.path 的字样,将值设置成想讲等会下载的一些jar包存放的位置,我这里将其改成了当前路径下的lib文件夹, 路径可以随便设,只要容易找得到就可以
修改完成后,然后就可以用IDEA打开当前TOMCAT源码了。
在IDEA中打开TOMCAT源码后,在IDEA右侧找到ant选项,然后点击download-compile,这里是需要下载一些TOMCAT编译的时候所必要的一些jar包。
这里点击如果下载的文件不足如下图中所以的文件的话,可以使用另外一种方式: 在IDEA的控制台中打开当前源码所在路径后 输入 ant ide-intellij 回车,这时候可以正常下载对应的jar包
下载完成后,需要在IDEA中将这些文件夹下的jar包引入进来,为了方便引入,我把这些文件夹下的所有jar包都归入到一个文件夹下,然后在IDEA 中project structure中引入进来即可
配置到这里还不能直接启动对应的tomcat,在上图中,我引入了两个文件夹,一个lib 另一个是libs。 这里的lib 引入的就是上面归类到一起的jar包,这里的libs是引入的上面下载的ant包里面的lib目录下面的jar包,这里是为了解决在运行tomcat时有些引入的类包错的问题,将这些配置都弄好以后,在执行 ant中的depoly,执行完deploy后,在源码目录中会生成一个output的文件夹,看到output文件夹生成,说明tomcat源码已经编译好了。
tomcat源码编译好后,需要配置IDEA的运行环境。
IDEA运行TOMCAT 配置
- 配置代码编译class文件的位置, 在IDEA的Project Structure 中,点击Modules,找到对应的path页签,配置如下图所示,output path,配置成刚编译成的output下的classes目录,对应的test目录配置在output path 下的一个test目录即可,这个test目录存不存在都可以,没有太大的关系。
tomcat编译好后,idea不会自动识别对应的java 源代码,需要我们手动设置一下 如下图:
这时候你是不是以为自己就可以很愉快的运行tomcat源码了? NONONO,你还时太天真了。这时候tomcat源码确实是已经编译好了,但是运行代码会出现很多错误。
3 TOMCAT源码编译遇到的错误
1 SEVERE: Error configuring application listener of class [listeners.ContextListener]
运行tomcat源码时,会报 SEVERE: Error configuring application listener of class [listeners.ContextListener] 这个错误,这种错误 只需要将output/build/webapps/example 目录以及源码根目录下的webapps/example目录删除即可
2 org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to compile class for JSP
解决第一点问题后,IDEA就已经可以正常启动源码了,在浏览器输入localhost:8080后,会出现org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to compile class for JSP 这种错误,这种错误的解决方式为:在org.apache.catalina.startup.ContextConfig#configureStart方法里面配置以下语句即可:
context.addServletContainerInitializer(new JasperInitializer(), null);
因为tomcat默认是没有加入jsp解析处理器,需要手动配置以下即可。
结束
当当当!!! 配置完后启动tomcat,这时候可以开始你研究tomcat的路了!!! 是不是很神奇!
后面会陆续增加一些对tomcat源码启动流程分析的文章,如有不对的地方,请多多指正!
一只迷茫的程序猿的救赎之路。。。