制作基于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 targetgenerated-sourcesarchetype
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,登录,填写项目描述,确定生成项目。一个直接可以开发测试运行持续集成持续发布的项目脚手架就算完成了。