创建maven archetype的一般过程
- 创建一个一般的maven项目
- 在该maven项目下执行
mvn archetype:create-from-project(该命令使用的是插件Maven Archetype Plugin,执行完该命令后,会在项目的target/generated-sources/archetype下生成骨架的源文件。 - 编辑骨架源文件下的
target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml文件,按需排除或添加需要的骨架文件。 - 此时,项目的骨架源文件已经有了,就可以在
target/generated-sources/archetype下执行mvn install或mvn deploy命令,打包骨架并安装到本地或发布到远程仓库。 - 骨架打包安装完成之后,就可以使用下列命令应用项目骨架了:
mvn archetype:generate \
-DgroupId=cn.oigo.product \
-DartifactId=oigo-product \
-DarchetypeArtifactId=demo-archetype \
-DarchetypeGroupId=cn.oigo.demo \
-DarchetypeVersion=2.0 \
-DinteractiveMode=false
自定义项目骨架文件内容
创建maven archetype的一般过程可以说是对maven项目的一份复制,但如果需要对复制后的项目文件进行修改时,就需要使用src/main/resources/META-INF/archetype-post-generate.groovy脚本对生成的项目骨架进行修改了(参考maven官网。在执行mvn archetype:create-from-project命令之后,archetype-post-generate.groovy会自动地生成到target/generated-sources/archetype/src/main/resources/META-INF/archetype-post-generate.groovy,下面是archetype-post-generate.groovy的示例:
def moduleDir = new File(request.getOutputDirectory()+"/"+request.getArtifactId());
def appName=request.getArtifactId().split("-")[-1];
def bootstrapFile=new File(moduleDir,"app/src/main/resources/bootstrap.properties");
//println(bootstrapFile);
Properties props = new Properties()
props.load(bootstrapFile.newDataInputStream())
props.setProperty("spring.application.name",appName);
props.store(bootstrapFile.newWriter(), null);
def localconfig=new File(moduleDir,"app/src/main/resources/local_config/application.yaml");
//println(localconfig);
localconfig.text=localconfig.text.replaceAll("security",appName);