maven-archetype 快速搭建项目手脚架

138 阅读2分钟

最近在写项目的时候发现,构建一个新项目,为了保证项目的统一性,除了cv之外,我们还有一个更好的方式 -- 使用 maven-archetype

对应官方文档的解释 maven.apache.org/archetype/m…

image.png

模版项目

这次我使用的是基于已有项目进行构建,这时候我们就可以先写一个基本的项目来作为之后的模版。

image.png

其他参数配置

项目是经典的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

生成解析包

一切配好后,我们就可以基于我们这个项目生成解析包

执行命令

image.png

解析包结果

image.png

结果可以看到,我们的前缀全部被替换成__rootArtifactId__了,我们在创建模版项目的时候,前缀跟项目名也要保持统一。

对应启动类,我们原本的前缀MyApp,也被被替换成 ${appName}

image.png

使yml文件里动态配置生效

在生成的解析包中,存在一个archetype-metadata.xml 文件 image.png

默认情况下生成的文件,是不处理resources包下的yml文件,所以如果想要我们的application.yml里的动态参数配置生效,需要手动加上 filtered="true"

image.png

打包成archetype

最后一步,我们需要对解析包进行打包成我们的archetype

image.png

注意,打包的时候,对应是对我们生成的解析包进行打包

最终使用

使用就最简单了

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 对应值

结果

image.png