使用Maven Archetype建立Java專案模板
1.over view
簡而言之,Archetype是一個Maven專案模板工具包。原型被定義為一種原始的模式或模型,所有其他同類的東西都是從中產生的。當我們試圖提供一個提供生成Maven專案的一致方法的系統時,這個名字就合適了。Archetype將幫助作者為使用者建立Maven專案模板,併為使用者提供生成這些專案模板的引數化版本的方法。
使用原型提供了一種很好的方法,可以與您的專案或組織所採用的最佳實踐一致的方式快速地使開發人員受益。您可能希望在組織內部實現J2EE開發的標準化,因此您可能希望提供EJB,WAR或Web服務的原型。一旦建立了這些原型並將其部署在組織的儲存庫中,組織中的所有開發人員就可以使用它們。
2.do it
⚠️:我們將使用springboot專案來演示如何生成一個maven archetype(原型),本文中(模板)(原型)交替使用,二者意思相同。
示例,我們有一個現成的專案,其結構如下:
. ├── Dockerfile ├── README.md ├── last-demo.iml ├── mvnw ├── mvnw.cmd ├── pom.xml ├── src ├── main │ ├── java │ │ └── com │ │ └── demo │ │ └── data │ │ ├── Application.java │ │ └── your_business_package │ │ ├── client │ │ │ └── DemoClient.java │ │ ├── constants │ │ │ └── YourBusinessConstants.java │ │ ├── enumerate │ │ │ └── DemoStatus.java │ │ ├── presistence │ │ │ ├── DemoRepository.java │ │ │ └── entity │ │ │ └── DemoDO.java │ │ ├── service │ │ │ └── DemoService.java │ │ └── web │ │ ├── dto │ │ │ └── DemoDTO.java │ │ └── rest │ │ └── DemoController.java │ └── resources │ ├── application.yml │ └── logback-spring.xml └── test ├── java │ └── com │ └── demo │ └── data │ └── ApplicationTests.java └── resources └── application.yml
我們將使用maven archetype來建立以該專案為基礎的模板。
2.1 生成模板資料夾
執行以下maven命令:
mvn archetype:create-from-project
此時專案中會生成target/generated-sources/archetype資料夾,其中存放的就是我們的模板相關檔案。
2.2 自定義模板
探索target/generated-sources/archetype我們可以得知:
generated-sources └── archetype ├── pom.xml ├── src │ ├── main │ │ └── resources │ │ ├── META-INF │ │ │ └── maven │ │ │ └── archetype-metadata.xml ##⚠️原型描述符,描述了我們原型的結構 │ │ └── archetype-resources ##⚠️經過maven轉換後的專案檔案包 │ └── test │ └── resources │ └── projects │ └── basic └── target ├── classes │ └── archetype-resources ├── your_project_name.jar └── test-classes └── projects └── basic
我們隨機開啟一個archetype-resources中的原始檔,可以看到如下:
上圖中我們看到的${package}佔位符,這個就是maven原型外掛自動處理的結果,到時候我們根據原型生成專案的時候,這些佔位符就會變成我們新生成專案的相關的值。類似,maven還提供了groupId,artifactId, version等關鍵字。如果我們專案中有其他地方也需要這種定製化,我們可以手動進行更改。
例如我們把專案配置檔案改為如下(應用名用佔位符代替),目的是實現專案的名稱隨新建的專案變動。
接下來來分析archetype-metadata.xml,他是原型描述符號,我們可以指定那些檔案進入原型裡,那些檔案需要排除,還能指定上面說的佔位符需不需要被替換 等等。
如下為archetype-metadata.xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>
<!--下面還有更多項-->
⚠️:fileSet屬性標籤指定的那些檔案需要納入原型中,我們把不需要的刪掉。
⚠️:filtered屬性標籤表示是否替換檔案中的佔位符,若為true則會替換,否則不會,所以我們如果想要佔位符最後會被替換為專案相關的資訊,還需要通過這個標籤指定。
⚠️:packaged屬性標籤指定檔案是否在專案的包裡面,true或false。
2.3 生成模板(原型)
我們進入target/generated-sources/archetype目錄,執行以下命令:
mvn install
此時模板將在我們本地生成。
2.4 使用模板(原型)生成新專案
我們使用以下命令:
mvn archetype:generate \ -DarchetypeCatalog=local \ -DgroupId=新建專案的groupId \ -DartifactId=新建專案的artifactId \ -DarchetypeGroupId=你的原型group \ -DarchetypeArtifactId=你的原型專案名字-archetype \ -DarchetypeVersion=你的原型版本 \ -DinteractiveMode=false
之後,我們會生成新專案。專案的結構符合我們的原型結構。檢視我們手動指定的application.yml
可以看到我們的佔位符被我們專案的相關資訊給替換了。
2.5 將模板上傳至maven倉庫
我們進入target/generated-sources/archetype目錄,開啟pom.xml
新增倉庫資訊:
<distributionManagement>
<repository>
<id>my-releases</id>
<url>你的倉庫地址</url>
</repository>
<snapshotRepository>
<id>my-snapshots</id>
<url>你的倉庫地址</url>
</snapshotRepository>
</distributionManagement>
<servers>
<server>
<id>my-snapshots</id>
<username>對應倉庫的username</username>
<password>對應倉庫的password</password>
</server>
<server>
<id>my-releases</id>
<username>對應倉庫的username</username>
<password>對應倉庫的password</password>
</server>
</servers>
隨後指定如下命令:
mvn deploy
隨後,原型將被上傳至你的mavne倉庫。
3.summary
本文我們介紹的maven的原型及其特性帶來的好處,並且我們演示瞭如何生成一個原型,並且利用原型來建立一個新專案。
關注筆者公眾號,推送各類原創/優質技術文章 ⬇️