Maven構建項目速度太慢的解決辦法 Maven 調試


Apache Maven是當今非常流行的項目構建和管理工具,它把開發人員從繁雜的項目依賴關系處理事務中解放出來,完全自動化管理依賴問題。在Web應用開發過程中,通常我們會用到maven的archetype插件來生成項目框架,例如:

mvn archetype:generate -DgroupId=com.yourhost.app -DartifactId=your-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

但通常這個過程是虐心的。

現象:

用maven構建項目骨架時,速度非常慢,無論是在命令行中直接使用,還是在IDE中使用。如果再加上網絡不好,那就更難熬了,喝完三杯咖啡都不見得能看到構建結果。以我的經驗,很多時候都要30分鍾左右............

原因:

要了解其中的原因,需要知道maven是如何運作的。構建過程中,我們只是向maven提供了一些groupId、artifactId、archetypeArtifactId等信息,只有這些信息的情況下maven是如何構建出整個項目的呢?它的知識來源於哪里呢?答案是:

 
  1. http://repo1.maven.org/maven2/archetype-catalog.xml  

這里記錄了,所有archetype構建信息,maven通過archetype插件構建項目骨架時會遠程訪問頁面,通過maven的-X參數可以證明這一點--調試方法

.............  
[DEBUG] -- end configuration --  
[INFO] Generating project in Batch mode  
[DEBUG] Searching for remote catalog: http://repo1.maven.apache.org/maven2/archetype-catalog.xml (通常就卡在這一步長達25+分鍾)  
..............  

直接在瀏覽器打開這個鏈接的速度一樣非常慢。打開后通過瀏覽器的查看源碼功能,如下所示:

<?xml version="1.0" encoding="UTF-8"?>  
<archetype-catalog>  
  <archetypes>  
    <archetype>  
      <groupId>am.ik.archetype</groupId>  
      <artifactId>maven-reactjs-blank-archetype</artifactId>  
      <version>1.0.0</version>  
      <description>Blank Project for React.js</description>  
    </archetype>  
    <archetype>  
      <groupId>am.ik.archetype</groupId>  
      <artifactId>msgpack-rpc-jersey-blank-archetype</artifactId>  
      <version>1.0.7</version>  
      <description>Blank Project for Spring Boot + Jersey</description>  
    </archetype>  
    <archetype>  
      <groupId>am.ik.archetype</groupId>  
      <artifactId>msgpack-rpc-jersey-blank-archetype</artifactId>  
      <version>1.0.6</version>  
      <description>Blank Project for Spring Boot + Jersey</description>  
    </archetype>  
    <archetype>  
      <groupId>am.ik.archetype</groupId>  
      <artifactId>msgpack-rpc-jersey-blank-archetype</artifactId>  
      <version>1.0.5</version>  
      <description>Blank Project for Spring Boot + Jersey</description>  
    </archetype>  
    <archetype>  
      <groupId>am.ik.archetype</groupId>  
      <artifactId>msgpack-rpc-jersey-blank-archetype</artifactId>  
      <version>1.0.2</version>  
      <description>Blank Project for Spring Boot + Jersey</description>  
    </archetype>  
    <archetype>  
      <groupId>am.ik.archetype</groupId>  
      <artifactId>mvc-1.0-blank-archetype</artifactId>  
...................  
...................  
以下省略13W行......  

復制文件到編輯器可知,文件長達13W行,文件大加上網絡原因,導致訪問速度很慢。

 

解決方案:

如上分析可知,是由於achetype-catalog.xml文件的訪問問題,導致了整個構建過程的緩慢,所以是否能夠將文件保存到本地,成為一種解決思路。翻閱Maven官方文檔可以找到,確實是可以的。官方鏈接如下:

http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-catalog.html 

按照如下步驟:

 

      1)准備archetype-catalog.xml文件

            方式1:通過瀏覽器查看http://repo1.maven.org/maven2/archetype-catalog.xml頁源碼,復制到本地,命名為archetype-catalog.xml。

            方式2:通過命令行  curl http://repo1.maven.org/maven2/archetype-catalog.xml > archetype-catalog.xml

      2)將上述文件放置到maven的默認路徑下

            注意,這不是指的安裝路徑,而是mvn運行時默認的存放repository的路徑,一般在用戶根目錄下的一個隱藏目錄,~/.m2。如果做過更改,可以在maven的設置文件中查看             具體在哪個位置,設置文件在maven安裝目錄/config/settings.xml中。

      3)在構建時,在archetype:generate后加上 -DarchetypeCatalog=local參數。(IDE如eclipse和idea,都是可以在創建maven工程時設置構建參數的,這里不再截圖說明了)

解決,Have fun!再次嘗試構建項目骨架,飛一般的感覺。

 

參考資料:

http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-catalog.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM