使用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快速搭建一个简单的项目,如下图所示
接下来的生成的方法有两种,第一种是正向生成,可以更清楚的了解整个逻辑,第二种是逆向生成,更加简单。
Project --->根项目
├── src/main/resources
│ ├── archetype-resources --->需要生成的项目结构
│ └── META-INF
│ └── maven
│ └── archetype-metadata.xml --->archetype的配置文件
└── pom.xml --->项目自身的脚本
将第一步中的醒目结构拷贝到archetype项目的Project/src/main/resources/archetype-resources目录下,如图所示
<archetype-descriptor name="backend-frontend">
<modules>
<module id="backend" dir="backend" name="backend">
<fileSets>
<fileSet filtered="true" packaged="true">
<directory>src/main/javadirectory>
<includes>
<include>**/*.javainclude>
includes>
fileSet>
<fileSet filtered="true" packaged="true">
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.ymlinclude>
includes>
fileSet>
fileSets>
module>
<module id="frontend" dir="frontend" name="frontend"/>
modules>
<requiredProperties>
<requiredProperty key="groupId">
<defaultValue>huyp.archetypedefaultValue>
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文件
mvn archetype:create-from-project
生成的项目在target/generated-sources目录下的archetype项目,结构如下图所示,跟我们自己创建的目录是一样的
mvn clean install
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.archetypegroupId>
<artifactId>archetype-frontend-backendartifactId>
<version>1.0-SNAPSHOTversion>
<description>sampledescription>
archetype>
<archetype>
<groupId>org.apache.maven.archetypesgroupId>
<artifactId>maven-archetype-quickstartartifactId>
<version>1.3version>
<description>quickstartdescription>
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: