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. 接下來就可以編寫自己的測試示例了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章