maven自定義archetype


1.前言
  在工作過程中必然會遇到創建項目的蛋疼事,一個項目包含茫茫多的配置文件。例如:Spring、mybatis、log4j、pom.xml、git等,其他的還包括項目目錄骨架。整個過程下來順利的話幾十分鍾,如果對公司項目配置不了解的情況下,幾個小時都是有可能的。
      maven的強大就不言而喻了,自定義項目骨架主要利用到 archetype插件。在IDE中創建maven項目時,可以選擇archetype類型快速創建項目目錄。例如最常見的maven-archetype-plugin 的quickstart。maven考慮到通用性,提供的是最簡單的目標。
      新建項目時,配置文件往往是從其他項目拷貝過來的,拷貝的問題在於很容易踩坑,並且不容易定位問題。
      利用maven一鍵生成項目骨架可以解決所有的問題,下面切入正題吧。
 
2.創建模板項目
  模板項目也是一個普通的maven項目,但是其有特定的目錄結構即實際使用的項目的目錄結構。
  第一步:首先找一個現有原型項目,這里假設原型項目為 A項目,A項目具有所有詳細的配置信息。
  第二步:改造A項目
    刪除A項目里所有特定業務相關的代碼、文件。保留最后生成的最小配置文件集合。一般項目里的配置文件包括以下內容:
      • pom.xml的jar包依賴、插件配置,保留最小依賴集
      • Spring、Struts2、mybatis配置  
      • log4j.xml        
  另外還有項目的基本包結構配置,常見的包包括:dao、service、service.impl、util、entity等。
  最好為每個配置文件編寫一個demo,並注釋掉,這樣方便團隊其他成員理解和使用。為每個包目錄編寫一個demo,例如dao層。這樣在使用生成的archetype創建項目時,就會生成對應的配置文件和對應的包目錄。
  到這步一個項目基本骨架雛形已經成型了,其實在整個過程中這一步是真正我們需要關心的。一個干凈、易用的模板才是最好的。
  這里我們稱改裝后的A項目為A-min(hhyz-archetype-web)項目.
    
  第三步: 在項目的POM文件中增加:
    
<build>
    <finalName>hhyz-archetype-web</finalName>
        <pluginManagement>  
            <plugins>  
                <plugin>  
                    <groupId>org.apache.maven.plugins</groupId>  
                    <artifactId>maven-archetype-plugin</artifactId>  
                    <version>2.2</version>  
                </plugin>  
                <plugin>  
                    <groupId>org.apache.maven.plugins</groupId>  
                    <artifactId>maven-compiler-plugin</artifactId>  
                    <configuration>  
                        <source>1.5</source>  
                        <target>1.5</target>  
                    </configuration>  
                </plugin>  
                <plugin>  
                    <groupId>org.apache.maven.plugins</groupId>  
                    <artifactId>maven-resources-plugin</artifactId>  
                    <configuration>  
                        <encoding>UTF-8</encoding>  
                    </configuration>  
                </plugin>  
            </plugins>  
        </pluginManagement>
</build>

  第四步: 從A-min項目中創建maven骨架項目

    打開CMD進入命令行,在項目根目錄里執行: mvn archetype:create-from-project。

    成功執行完之后,在target/generated-sources/ 下有個archetype目錄,這個就是生成的 archetype。可以看到這個目錄其實就是普通的maven項目,也就是我們最終的骨架模板項目,我們稱之為A-template項目。

    有幾個目錄、文件需要說明:

      • src/main/resources/archetype-resources  通過A-template骨架創建的項目包含的所有的文件和目錄都在這個目錄下
      • src/main/resource/META-INF/maven/archetype-metadata.xml  此文件是配置文件,告訴archetype插件,archetype-resources里面哪些文件需要包含到創建出的項目里。打開這個文件發現有個fileSets標簽,包含一系列的fileSet標簽。不難發現fileSet就是對archetype-resources下的資源描述。          

  第五步:改造A-template

    archetype:create-from-project並非完全智能,需要自己稍加修改

      • 修改pom.xml文件

          修改packing的值為jar或者war

      • 修改archetype-metadata.xml
<requiredProperties>
      <requiredProperty key="groupId"/>
      <requiredProperty key="artifactId"/>
      <requiredProperty key="version">
          <defaultValue>1.0.0</defaultValue>
      </requiredProperty>
  </requiredProperties>

          在fileSets同級下增加requiredProperties標簽。requiredProperties定義模板項目中一些參數值,內置的參數包括:groupId,artifactId,version,package。自己可以提供這些參數的默認值,也可以增加自己額外的參數。大部分情況下,內置的參數足夠用。fileSet標簽有一個filtered=“true”屬性,表示該fileSet可以使用參數變量。在文件中引用參數變量的方式${參數名},例如${package}.通常生成A-template項目時,archetype插件會掃描A-min所有的文件,把需要替換為參數的地方自動替換。畢竟代碼沒有那么智能,有些地方會有問題。所以,我們要檢查每個文件的參數部分是不是我們預期的。增加參數、刪除參數來達到我們的要求。           

  第六步:部署生成的archetype到本地倉庫

    cd進入generated-sourced/archetype目錄,運行maven命令:mvn clean install,到這里我們的模板骨架項目基本完成。

3.使用自定義的模板創建項目

  方式一:使用命令行

        在自己的workspace下執行  mvn archetype:generate -DarchetypeCatalog=local  -o 
選擇剛才的模板項目的編號,按照提示輸入參數值。這樣項目就創建完畢了。如果找不到我們的模板項目,檢查一下~/.m2/目錄下是否有archetype-catalog.xml文件。如果沒有在A-template的根目錄執行一下 
mvn archetype:update-local-catalog -o
 
  方式二:通過IDE創建(推薦)
  
  注:有時候會找不到新加的archetype,重啟eclipse就好了。

 

4.部署到公司內部的maven中央倉庫
 
     經過反復測試之后,我們的模板項目就可以發布了。把我們的模板項目部署到公司內部的maven倉庫。其他團隊成員就可以通過方式二使用我們的骨架模板創建項目了。IDE幫我們自動下載模板項目的jar包到本地倉庫。方式一則需要自己手動下載 ,在任何一個項目里添加我們的模板項目依賴,執行maven eclipse:eclipse命令,就會下載jar包。方式一比較麻煩,推薦使用方式二,簡單易用。

 

 


免責聲明!

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



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