Maven 学习笔记(三) :使用Maven的Archetype插件生成自定义的项目结构

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结构

第三步 编写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项目

第三步 将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的选择,选择完成后就是输入定义的参数,构建成功之后,查看项目目录如下:
生成后项目

猜你喜欢

转载自blog.csdn.net/aimomo007/article/details/80604966