【Maven實戰技巧】「外掛使用專題」Maven-Archetype外掛建立自定義maven專案骨架

浩宇天尚發表於2021-12-08

技術推薦

自定義Archetype Maven骨架/以當前專案為模板建立maven骨架,可以參考http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html,詳細介紹瞭如何快速建立和使用Archetype。

技術背景

  • 在工作過程中必然會遇到建立專案的蛋疼事,一個專案包含茫茫多的配置檔案。例如:Spring、mybatis、log4j、pom.xml、git等,其他的還包括專案目錄骨架。整個過程下來順利的話幾十分鐘,如果對公司專案配置不瞭解的情況下,幾個小時都是有可能的。

  • maven的強大就不言而喻了,自定義專案骨架主要利用到 archetype外掛。在IDE中建立maven專案時,可以選擇archetype型別快速建立專案目錄。例如最常見的maven-archetype-plugin 的quickstart。maven考慮到通用性,提供的是最簡單的目標。

  • 新建專案時,配置檔案往往是從其他專案拷貝過來的,拷貝的問題在於很容易踩坑,並且不容易定位問題。利用maven一鍵生成專案骨架可以解決所有的問題。

什麼是Archetype

Archetype原型是一個Maven專案模板工具包。一個原型被定義為從其中相同型別的所有其它事情是由一個原始圖案或模型。名稱配合,因為我們正在努力提供一種系統,該系統提供了一種生成Maven專案的一致的手段。原型將幫助作者為使用者建立Maven專案模板,併為使用者提供了手段,產生的這些專案模板引數化的版本。

使用原型提供了一個很好的方式,迅速使開發人員在與您的專案或組織採用最佳實踐一致的方法。在Maven的專案中,我們使用原型,試圖讓我們的使用者和執行儘可能快地通過提供展示許多的Maven的功能,同時引入新的使用者通過採用Maven的最佳實踐的示例專案。在幾秒鐘內一個新的使用者可以有一個工作Maven專案作為跳板用於調查更多的功能,Maven中。我們也試圖使原型機制新增劑和由我們的意思是允許一個專案的一部分被捕獲在一個原型,使得專案的部件或方面可以被新增到現有的專案。這方面的一個很好的例子是Maven站點原型。如果,例如,您使用的快速啟動原型生成一個工作專案,你可以迅速通過使用現有專案中的網站原型建立網站的專案。你可以做這樣的事與原型。

您可能要在組織內部規範J2EE開發,所以你可能要提供原型為EJB,或者,或者您的Web服務的戰爭。一旦這些原型建立和部署在您的組織的資源庫,他們都可以在組織內使用的所有開發人員。

上面是我根據maven官網在百度翻譯出來的,大家將就著看,大概意思就是archetype是Maven專案模板工具包,也就是一個模板工程。

建立自定義的archetype專案

使用過Maven的人都知道maven中有許多功能都是通過外掛來提供的,其中的一個外掛:maven-archetype-plugin
,通過該外掛可以自定義符合我們自己需求的archetype。

建立的maven project的pom.xml檔案中新增archetype外掛

<build>
   <pluginManagement>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-archetype-plugin</artifactId>
              <version>3.0.0</version>
          </plugin>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-resources-plugin</artifactId>
              <configuration>
                   <encoding>UTF-8</encoding>
              </configuration>
           </plugin>
      </plugins>
    </pluginManagement>
</build>

進入該project的根目錄,執行mvn命令mvn archetype:create-from-project.

如果用IDEA可以採用:

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

有幾個目錄、檔案需要說明:

  • src/main/resources/archetype-resources:通過template骨架建立的專案包含的所有的檔案和目錄都在這個目錄下
  • src/main/resource/META-INF/maven/archetype-metadata.xml此檔案是配置檔案,告訴archetype外掛,archetype-resources裡面哪些檔案需要包含到建立出的專案裡。開啟這個檔案發現有個fileSets標籤,包含一系列的fileSet標籤。不難發現fileSet就是對archetype-resources下的資源描述。
改造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}

通常生成template專案時,archetype外掛會掃描所有的檔案,把需要替換為引數的地方自動替換。畢竟程式碼沒有那麼智慧,有些地方會有問題。所以,我們要檢查每個檔案的引數部分是不是我們預期的。增加引數、刪除引數來達到我們的要求。

部署生成的archetype本地倉庫

execute(create-from-project)之後,在 target 資料夾下,生成骨架模板,如下:

修改工作目錄為 骨架所在的目錄,然後執行 install 命令:

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

或者採用idea:

此時,可以在maven倉庫中看到,已經生成好的骨架模板:

這個xml檔案記錄了骨架的資訊,一會要用到!

執行 archetype:crawl 命令

路徑無所謂,命令: archetype:crawl

IDEA:可以採用

執行完畢後,在maven根目錄下會生成 archetype-catalog.xml 檔案。

這個檔案記錄 使用者自定義骨架的資訊。

archetype-catalog.xml的內容

部署到maven私服

修改archetype目錄下的pom.xml檔案新增配置

<distributionManagement>  
        <repository>  
            <id>releases</id>  
            <name>Micaicms Releases</name>  
            <url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>  
        </repository>  
        <snapshotRepository>  
            <id>snapshots</id>  
            <name>Micaicms Releases</name>  
            <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>  
        </snapshotRepository>  
</distributionManagement>  
配置maven裡面的settings.xml檔案

的settings.xml檔案配置如下,配置好以後就可以執行釋出命令了

注意:此處的配置,id要與setting.xml中的server標籤中的id一致。

上傳到maven私服中

cd進入generated-sourced/archetype目錄,執行maven命令:

  1. mvn clean install
  2. mvn deploy
成功後即可在maven私服中檢視到該模板

使用原型建立新專案

任意目錄下執行

mvn archetype:generate -DarchetypeGroupId=com.ktr -DarchetypeVersion=1.0 -DarchetypeArtifactId=ktr-archetype
新增IDEA

點選Add Archetype

對應填寫好 如果放在私服中就要在Reposytory中寫上私服路徑 這樣就可以用了,

刪除自定義骨架

如果這個骨架不合適需要刪除骨架,找到 IntelliJ IDEA 的骨架配置檔案,大概就是這個位置: C:\Users${user}.IntelliJIdea${version}\system\Maven\Indices

這裡面有個檔案 UserArchetypes.xml

然後…你就可以刪除它了.. 可以刪除這一條, 也可以刪除整個檔案, 然後重啟 IDEA , 你就會發現刪除成功!

參考:

http://www.colorfuldays.org/tag/archetype/

http://maven.apache.org/archetype/maven-archetype-plugin/

http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html

http://maven.apache.org/archetype/maven-archetype-plugin/create-from-project-mojo.html

http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html

http://maven.apache.org/archetype/maven-archetype-plugin/examples/generate-batch.html

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

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

相關文章