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

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

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是如何構建出整個項目的呢?它的知識來源於哪裏呢?答案是:
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!再次嘗試構建項目骨架,飛一般的感覺。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章