Archetype
使用Maven的Archetype用来生成项目骨架,Archetype并不是Maven的核心,它也是通过插件来实现的,这个插件就是maven-archetype-plugin。
任务
编写一个用来生成个如下项目框架的Archetype。
${groupId} --->根项目
├── pom.xml --->根项目脚本
├── backend --->后端子项目
│ ├── src/main/java/${package}
│ │ └── Application.java --->Spring Boot的启动文件
│ ├── src/main/resources
│ │ └── application.yml --->Spring Boot的配置文件
│ ├── src/test/java
│ ├── src/test/resources
│ └── pom.xml --->后端子项目脚本
└── frontend --->前端子项目
└── pom.xml --->前端子项目脚本
步骤
第一步 根据需要生成的项目框架搭建一个完整的项目
使用maven-archetype-quickstart快速搭建一个简单的项目,如下图所示
第二步 生成Archetype项目
接下来的生成的方法有两种,第一种是正向生成,可以更清楚的了解整个逻辑,第二种是逆向生成,更加简单。
方法一
第一步 新建一个Archetype项目,具体结构如下
Project --->根项目
├── src/main/resources
│ ├── archetype-resources --->需要生成的项目结构
│ └── META-INF
│ └── maven
│ └── archetype-metadata.xml --->archetype的配置文件
└── pom.xml --->项目自身的脚本
第二步 拷贝项目结构
将第一步中的醒目结构拷贝到archetype项目的Project/src/main/resources/archetype-resources目录下,如图所示
第三步 编写archetype-metadata.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<archetype-descriptor name="backend-frontend">
<modules>
<module id="backend" dir="backend" name="backend">
<fileSets>
<fileSet filtered="true" packaged="true">
<directory>src/main/java</directory>
<!--表示包含src/main/java中任意路径下的java文件-->
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true">
<directory>src/main/resources</directory>
<!--表示包含src/main/java中任意路径下的java文件-->
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="frontend" dir="frontend" name="frontend"/>
</modules>
<!--定义必须的参数和参数的默认值-->
<requiredProperties>
<requiredProperty key="groupId">
<defaultValue>huyp.archetype</defaultValue>
</requiredProperty>
</requiredProperties>
</archetype-descriptor>
第四步 将需要自定义的变量参数化
对于pom文件中的配置进行参数化
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
对于包名参数化:将Application.java复制到Project\src\main\resources\archetype-resources\backend\src\main\java目录下,然后修改java文件
方法二
第一步 采用archetype插件,根据项目逆向生成对应的archetype项目
mvn archetype:create-from-project
生成的项目在target/generated-sources目录下的archetype项目,结构如下图所示,跟我们自己创建的目录是一样的
第三步 将archetype打包发布到本地仓库
mvn clean install
第四步 生成Catalog文件
Catalog文件中包含了所有的Archetype,可以用来展示本地仓库中所有可以使用的archetype
mvn archetype:crawl
构建成功之后,本地仓库目录下将会生成一个archetype-catalog.xml文件,如下,有两个archetype,一个是自定义的,一个是插件自己的
<archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<archetypes>
<archetype>
<groupId>huyp.archetype</groupId>
<artifactId>archetype-frontend-backend</artifactId>
<version>1.0-SNAPSHOT</version>
<description>sample</description>
</archetype>
<archetype>
<groupId>org.apache.maven.archetypes</groupId>
<artifactId>maven-archetype-quickstart</artifactId>
<version>1.3</version>
<description>quickstart</description>
</archetype>
</archetypes>
</archetype-catalog>
第五步 生成目标项目结构
mvn archetype:generate -DarchetypeCatalog=local
插件默认的catalog的路径为remote,local,即远程仓库和本地仓库的,为了构建的速度,直接将catalog的路径设置为本地仓库
控制台输出:
Choose archetype:
1: local -> huyp.archetype:archetype-frontend-backend (sample)
2: local -> huyp.archetype:basic-archetype-sample (sample)
3: local -> org.apache.maven.archetypes:maven-archetype-quickstart (quickstart)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 3:
在这里进行archetype的选择,选择完成后就是输入定义的参数,构建成功之后,查看项目目录如下: