Archetype是一个Maven项目模板工具包。通过Archetype我们可以快速搭建Maven项目。比如我们在ide里面创建项目时,可以选择很多maven内置的Archetype,我们最常用的可能是maven-archetype-quickstart
当然maven提供了能力,让我们自定义项目结构,比如下图如果我们想要基于Archetype来自动生成下面多模块结构的脚手架,我们可以先手动建立下面的代码结构
然后把下面插件加入到上面项目主pom中:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.0.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
然后在该项目的根目录下执行如下命令,来生成Archetype的模板:
mvn archetype:create-from-project
执行完毕后,在\target\generated-sources\archetype目录下会生成内容如下,该内容就是Archetype模板:
在该目录下执行mvn install把模板安装到本地仓库,然后就可以执行下面命令来生成自己应用的项目结构了:
mvn archetype:generate -DarchetypeGroupId=com.jiaduo -DarchetypeArtifactId=project-template-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=local -DgroupId=com.jiaduo -DartifactId=order -Dversion=1.0-SNAPSHOT -DinteractiveMode=false
生成后的项目结构如下:
当然如果你想要使用代码的调用方式,可参考如下:
public class Main {
public static void main(String[] args) {
String DgroupId ="com.jiaduo";
String DartifactId ="Order";
String Dversion ="1.0-SNAPSHOT";
String targetDir ="/user/workspace";
MavenCli cli = new MavenCli();
System.setProperty("maven.multiModuleProjectDirectory","/user");
int r = cli.doMain(new String[]{"archetype:generate",
"-DgroupId="+DgroupId,
"-DartifactId="+DartifactId,
"-Dversion="+Dversion,
"-DarchetypeGroupId=com.template",
"-DarchetypeArtifactId=project-template-archetype",
"-DarchetypeVersion=1.0-SNAPSHOT",
"-DinteractiveMode=false"}, targetDir, System.out, System.out);
System.out.println(r);
if (r !=0){
throw new RuntimeException("生成工程结构失败");
}else{
System.out.println("生成工程结构成功");
}
}
}