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添加
其中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,比如监控面板添加项目配置。