制作基於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,登錄,填寫項目描述,確定生成項目。一個直接可以開發測試運行持續集成持續發布的項目腳手架就算完成了。