最近在写项目的时候发现,构建一个新项目,为了保证项目的统一性,除了cv之外,我们还有一个更好的方式 -- 使用 maven-archetype
对应官方文档的解释 maven.apache.org/archetype/m…
模版项目
这次我使用的是基于已有项目进行构建,这时候我们就可以先写一个基本的项目来作为之后的模版。
其他参数配置
项目是经典的spring-boot项目,所以我的启动类想要每个项目都不一样,对应server.port也想在根据模版创建项目的时候生成,还有url接口的全局前缀配置server.servlet.context-path。
以下为对应base项目这部分代码及相关配置
@SpringBootApplication
public class MyAppApplication {
public static void main(String[] args) {
SpringApplication.run(MyAppApplication.class, args);
}
}
application.yml 对应配置
server:
port: ${serverPort}
servlet:
context-path: /${contextPath}
spring:
application:
name: ${rootArtifactId}-service
archetype.properties 文件记录参数值,maven-archetype 扫描到这个文件才会跟我们代码还有文件设定的参数产生关联
appName=MyApp
contextPath=demo-service
serverPort=9090
生成解析包
一切配好后,我们就可以基于我们这个项目生成解析包
执行命令
解析包结果
结果可以看到,我们的前缀全部被替换成__rootArtifactId__了,我们在创建模版项目的时候,前缀跟项目名也要保持统一。
对应启动类,我们原本的前缀MyApp,也被被替换成 ${appName}
使yml文件里动态配置生效
在生成的解析包中,存在一个archetype-metadata.xml 文件
默认情况下生成的文件,是不处理resources包下的yml文件,所以如果想要我们的application.yml里的动态参数配置生效,需要手动加上 filtered="true"
打包成archetype
最后一步,我们需要对解析包进行打包成我们的archetype
注意,打包的时候,对应是对我们生成的解析包进行打包
最终使用
使用就最简单了
mvn archetype:generate -DarchetypeGroupId=com.carbon.archetype -DarchetypeArtifactId=carbon-project-archetype -DarchetypeVersion=1.0-SNAPSHOT -DgroupId=com.carbon -DartifactId=demo-project -DappName=TestDemo -DcontextPath=test -DserverPort=2020
参数解释:
- mvn archetype:generate
- maven的命令
- -DarchetypeGroupId
- 你所要使用的archetype对应的groupId
- -DarchetypeArtifactId
- 你所要使用的archetype对应的artifactId
- -DarchetypeVersion
- 你所要使用的archetype对应的版本号
- -DgroupId
- 你所要生成的新项目的groupId
- -DartifactId
- 你所要生成的新项目的artifactId
- -DappName
- archetype.properties 中定义的appName的值,也是对应我们的启动类前缀
- -DcontextPath
- archetype.properties 中定义的contextPath的值,,也是我们application.yml 中的server.servlet.context-path 对应值
- -DserverPort
- archetype.properties 中定义的serverPort的值,也是我们application.yml 中的server.port 对应值