基於maven的專案腳手架,一鍵建立專案的專案模板
製作基於maven的專案腳手架
Springboot的出現極大的簡化了專案開發的配置,然而,到真實使用的時候還是會有一堆配置需要設定。比如依賴管理,各種外掛,質量掃描配置,docker配置,持續整合配置,設定業務獨特的架構配置等。這時候,如果建立一個包含這一切的腳手架,當需要建立專案的時候,只要create就好了。
create archetype from project
首先準備一個模板專案,包含了我們想要建立專案的一切基本屬性。比如基本dependency bom,比如plugin,比如logback.xml, Dockerfile, Jenkinsfile, k8s.yml等.
比如這樣的:
我們期望以後建立的專案都是這種結構,而且生成就可以直接執行,我只要新增我的業務邏輯即可。
首先,執行
mvn clean install
確保專案沒有任何問題。然後
mvn archetype:create-from-project
執行完畢會生成了結構專案:
可以看到大部分檔案都拷貝過來了,但依舊有幾個檔案丟失,比如Jenkinsfile, Dockerfile. 手動拷貝過來。還有些檔案不需要,比如.idea的配置檔案,刪除。確定檔案沒有問題之後,檢視target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml檔案,裡面定義了哪些檔案包含。把不需要的去掉,把需要的加上。比如,導致丟掉Jenkinsfile的配置修改為
<fileSet encoding="UTF-8">
<directory>.deploy</directory>
<includes>
<include>**/*</include>
<include>**/*.yaml</include>
</includes>
</fileSet>
去掉.idea的配置。
如果程式碼裡有groupId和artifactId的獨特配置,觀察下有沒有變數替換。比如
@MapperScan(basePackages = "${package}.domain.mymodule.mapper")
我們可以使用${package}, ${group}, ${artifactId}, ${version}來代替一些變數。比如,我發現application.yml這個檔案沒有被替換,裡面有重要的spring.application.name應該替換為專案名稱。手動修改為 ${artifactId}。這還不行,修改archetype-metadata.xml
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>
添加了filtered。
- filtered表示是否替換檔案中的變數
- packaged表示是否在檔案字首新增group
接下來把模板安裝到本地倉庫
cd target\generated-sources\archetype
mvn clean install
就可以直接使用模板建立專案了。
根據本地模板建立專案
注意我們的模板版本在pom裡,比如我的修改幾次後版本為1.0.2。則可以
mvn archetype:generate \
-DarchetypeCatalog=local \
-DgroupId=com.demo.mybiz \
-DartifactId=mybiz-myid \
-DarchetypeGroupId=com.demo \
-DarchetypeArtifactId=demo-boot-archetype \
-DarchetypeVersion=1.0.2 \
-DinteractiveMode=false \
- archetypeCatalog=local表示使用本地倉庫
- interactiveMode=false表示不是互動模式,不用選擇
- groupId=com.demo.mybiz 你新專案的group
- artifactId=mybiz-myid 你新專案的id
- archetypeGroupId=com.demo 我們模板的group
- archetypeArtifactId=demo-boot-archetype 我們模板的id
- archetypeVersion=1.0.1 我們模板的版本
開啟檢視,確認生成的專案
沒有任何問題之後,可以釋出模板。
釋出模板到maven私服
釋出maven私服就和釋出普通maven專案一樣,配置好url就可以了。
pom新增
<distributionManagement>
<repository>
<id>my-releases</id>
<url>http://maven.mymaven.com/nexus/content/repositories/release/</url>
</repository>
<snapshotRepository>
<id>my-snapshots</id>
<url>http://maven.mymaven.com/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
其中id一定要對應本地maven的settings.xml
<servers>
<server>
<id>my-snapshots</id>
<username>myuser</username>
<password>mypass</password>
</server>
<server>
<id>my-releases</id>
<username>myuser</username>
<password>mypass</password>
</server>
</servers>
最後執行
mvn deploy
之後可以直接使用,去掉archetypeCatalog=local即可。
後續展望
腳手架方便生成了公司的基本專案配置和架構,其實還可以做更多。比如對應CI Jenkins的job可以一鍵生成,比如程式碼生成後直接建立gitlab專案,關聯Jenkins,比如監控面板新增專案配置。
只有輸入者設定好專案組和管理人,許可權也可以指定。最後做一個home page,登入,填寫專案描述,確定生成專案。一個直接可以開發測試執行持續整合持續釋出的專案腳手架就算完成了