【Maven實戰技巧】「插件使用專題」Maven-Archetype插件創建自定義maven項目骨架
- 2021 年 12 月 8 日
- 筆記
- 【技術專區-Maven】
技術推薦
自定義Archetype Maven骨架/以當前項目為模板創建maven骨架,可以參考//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>//127.0.0.1:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Micaicms Releases</name>
<url>//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命令:
- mvn clean install
- 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 , 你就會發現刪除成功!
參考:
//www.colorfuldays.org/tag/archetype/
//maven.apache.org/archetype/maven-archetype-plugin/
//maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html
//maven.apache.org/archetype/maven-archetype-plugin/create-from-project-mojo.html
//maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html
//maven.apache.org/archetype/maven-archetype-plugin/examples/generate-batch.html
//maven.apache.org/archetype/maven-archetype-plugin/specification/generate.html
//maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-catalog.html