idea下构建tomcat源码调试环境全记录

本文主要记录了在idea下构建tomcat源码环境过程。

1. 获取源码

首先我们要获取tomcat源码,tomcat项目在github上的地址为apache/tomcat,由于众所周知的原因,网速会非常慢,直接checkout,大概率不会成功,我一般的做法是把它导入到gitee仓库中,导入方法很简单,在gitee上创建项目,然后选择导入已有项目就行了:

我导入的tomcat仓库为https://gitee.com/funcy/tomcat.git.

接着我们只需要把gitee仓库的代码checkout下来就行了。

2. 创建分支

导入到idea后,打开项目,项目长这样:

checkout下来的代码位于master分支,我比较喜欢基于tag创建新分支,这里我使用的tag是9.0.43,操作命令如下:

# 切换到 9.0.43 的tag
git checkout 9.0.43
# 基于当前分支创建新分支,分支名为 9.0.43.LEARN
git checkout -b 9.0.43.LEARN
# 将 9.0.43.LEARN 推送到远程仓库
git push -u  origin 9.0.43.LEARN

当然,你也可以不创建分支,直接在master上开搞。

3. 安装ant

tomcat是基于ant构建的,我们需要先安装ant工具,下载链接ant下载,下载最新版本就对了。

ant 直接下载就 能使用了,不过同maven一样,它也要配置环境变量,关于这个过程就不多说了,我的环境变量配置如下:

export ANT_HOME=/Library/Apache/apache-ant-1.9.15
PATH=$PATH:$ANT_HOME/bin

记住这个ANT_HOME,后面会用到。

配置完成后,运行ant -version命令,结果如下:

$ ant -version
Apache Ant(TM) version 1.9.15 compiled on May 10 2020

如此就表明ant安卓成功了。

4. 配置idea环境

接下来我们就正式开始idea的环境了。

4.1 find action

找到help-action

在弹出的窗口中,输入ant

选择第一个,点击,就打了ant的侧边栏

点击“+”,选择tomcat下的build.xml文件:

添加后,ant窗口就这样了:

可以看到,tomcat 的构建类目出现了。点击构建按钮,发现会报错:

没有指定jdk,那就指定下吧:

我们选择jdk 1.8

设置后的效果如下:

这里有个编译文件的输出目录,我们也要设置下,我设置的是output

再次编译,还是失败了:

经过一番探索,发现是缺少了配置文件,找到build.properties.default,将其复制为build.properties

再次编译,没有报错,output目录下也有内容了:

看着好像是编译成功了。

再一看看java代码:

它们并没有被idea识别,解决方法也简单,直接marker as Source Root

代码正常了,不过也报错了:

刚开始我以为是缓存问题,重启了几次,还是报错,试试command+B编译,报错更多:

看来是缺少了一些jar包了,经过一番探索,发现了项目中配置的ant``jar包存放的默认位置如下:base.path=${user.home}/tomcat-build-libs

这个user.home 就是自己的home目录了,在linux上可以简写为~

找到对应的目录,发现下面确实有些jar包:

然后我就直接选中,全部添加到项目中:

这样还是不行,发现jar包是要一个一个添加才能生效,那这得加到什么时候。。。

又经过了一番探索,发现在项目的tomcat/res/ide-support/idea/tomcat.iml文件中已经为我们提供了jar的依赖配置方式:

看名称就知道了,tomcat/res/ide-support就是保存来ide的项目文件的,啥都别说了,直接替换把tomcat.iml替换了。

替换完成后,重启下idea,然后idea会让你配置下ANT_HOMETOMCAT_BUILD_LIBS路径:

配置下就行了,ANT_HOME就是上面设置的目录,TOMCAT_BUILD_LIBS就是前面提到的${user.home}/tomcat-build-libs了。

配置完成了,重启下idea,External Libraries显示如图:

包都进来了,再次command+B编译,结果如下:

竟然没有没有junit依赖包!!!

又是一番探索,在build.properties文件中找到了它的版本:

然后我就去maven仓库下载jar包,放到TOMCAT_BUILD_LIBS的目录下:

然后添加进项目,再次编译,又报错了:

搜索下easyMock,在build.properties找到了相关配置:

然后,发现除了easyMock,还有cglibobjenesis等,难道这些也要一个个导入吗?

机智如我,敏锐地意识到,这些都是test包下的代码,然后就做了一个明智的决定:

直接把test目录的标记给去掉,这样idea就不会去编译这个目录下的代码了。

command+B编译,终于不报错了!前面引入的 junit 也可以干掉了。

编译成功后,就可以写我们自己的测试类了。

5. 编写自己的tomcat示例

待续...

6. 总结

本文是tomcat源码编译踩坑记,最后再总结下整个流程:

  1. 安装ant构建工具
  2. checkout tomcat源码到idea中,创建自己的分支(也可不必,直接在master上开搞),接下来的操作都是在idea中进行
  3. idea中设置tomcat项目的jdk版本,设置构建输出目录为output
  4. 复制build.properties.default,将其命名为build.properties
  5. 打开ant侧边栏,添加tomcat/build.xml文件,点击构建按钮,构建成功
  6. tomcat/.idea/tomact.iml替换为tomcat/res/ide-support/idea/tomcat.iml
  7. 重启idea,设置ANT_HOMETOMCAT_BUILD_LIBS两个目录
  8. 选中tomcat/test目录,右键,执行Mark Directory as -Unmark as Test Source Root操作
  9. command+B构建,构建成功
  10. 接下来就可以编写自己的测试示例了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章