閱讀源碼前,先跑通編譯是基本功。記錄一次 Jetty 9.3.x(快照版)從下載到啟動的完整踩坑路徑。
GitHub Jetty 專案主頁 → Branch/Tags 選 jetty-9.3.x → Download ZIP(無需 Git 客戶端)。解壓至 $MY_JETTY_ROOT。
關鍵文件:
README.md:官方編譯提示 不可全信,按其操作大概率失敗。pom.xml:根模塊 POM。File → Import → Maven → Existing Maven Projects
Root Directory: $MY_JETTY_ROOT
選中所有模塊 → Finish
Maven 開始下載依賴,**預留 2-3 小時**,彈窗一律 Confirm / Resolve Later,需重啟 Eclipse 時確認。
根模塊直接 Maven install -DskipTests 常因模塊間 test-jar 依賴失敗。
正確姿勢:
jetty-project → Run As → Maven clean。Goals: install -DskipTests,但先不跑。jetty-util → jetty-io → jetty-http → jetty-server → jetty-servlet → jetty-webapp → jetty-plus 等。每個模塊右鍵 Run As → Maven Install。install -DskipTests。Could not resolve dependencies for xxx:jar:test,即缺少某模塊的 test-jar,按步驟 3 補裝該模塊。成功後產物位於:
$MY_JETTY_ROOT/jetty-distribution/target/distribution/
進入目錄:
cd $MY_JETTY_ROOT/jetty-distribution/target/distribution
java -jar start.jar
控制台輸出 Started ServerConnector@...{HTTP/1.1}{0.0.0.0:8080} 即編譯運行成功。
| 坑點 | 癥狀 | 解法 |
|---|---|---|
| Eclipse 內嵌 Maven | 依賴下載卡死/版本不一致 | 配置外部 Maven 3.3+ |
| README 指導 | 按文檔跑失敗 | 忽略,採用分模塊 Install |
| test-jar 循環依賴 | Could not resolve dependencies for xxx:jar:test | 先 Install 被依賴模塊 |
| 跳過測試 | 部分測試需特定環境(如 HTTP/2、JNI) | -DskipTests 必加 |
源碼編譯成功,才是閱讀源碼的入場券。