使用Maven archetype 自定义项目脚手架

An archetype is defined as an original pattern or model from which all other things of the same kind are made

目录

背景

创建archetype模板

手动创建

通过已有的项目结构生成archetype

通过archetype创建新项目

1.通过maven命令的方式

2.通过IDE方式生成(使用本地install的archetype)


背景

开发中,我们通常会使用maven内置的脚手架也就是archetype来快速生成项目结构。但是在开发中,你会发现maven预先提供的archetyp远远不够,每次新建一个项目,我们都需要从现有的项目copy pom.xml,spring的配置文件,一些公共的工具类等,对于多module项目,我们还需要去创建各个module。在这样的背景下,我们就需要使用maven的archetype去定义一个自己想要的代码脚手架以供更快的生成新的项目骨架,可以进行后续开发。

创建archetype模板

手动创建

1.首先创建一个空的maven项目

2.创建archetype-metadata.xml,位于src/main/resources/META-INF/maven/目录下

<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd" name="ibu-itinerary-archetype"
                      xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!--属性变量定义-->
  <requiredProperties>
    <requiredProperty key="package">
      <defaultValue>com.chenpp.archetype</defaultValue>
    </requiredProperty>
  </requiredProperties>
  
  <!--项目子模块定义-->
  <modules>
    <module id="${rootArtifactId}-domain" dir="__rootArtifactId__-domain" name="${rootArtifactId}-domain">
      <fileSets>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>
    <module id="${rootArtifactId}-dao" dir="__rootArtifactId__-dao" name="${rootArtifactId}-dao">
      <fileSets>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>
    <module id="${rootArtifactId}-service" dir="__rootArtifactId__-service" name="${rootArtifactId}-service">
      <fileSets>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>

    <module id="${rootArtifactId}-controller" dir="__rootArtifactId__-controller" name="${rootArtifactId}-controller">
      <fileSets>
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
      </fileSets>
    </module>


  </modules>
</archetype-descriptor>
  • requiredProperty:定义通过archetype生成项目时需要提供的参数,这些属性可以在资源元文件里的任意一个文件里通过${var}来引用,所以的元文件最终都可以选择通过velocity引擎来执行替换后生成。

    默认的属性有:groupId,artifactId,packeage,version等
  • module 定义子模块
    1) id :定义子模块工程的artifactId
    2) dir  :定义子模块源文件在archetype-resources里对应的directory
    3) name :定义子模块的名字
  • fileSet:定义 通过Archetype插件生成的项目里的文件和脚手架jar里的文件的关联关系

    1) packaged="true"标识directory中对应的内容是否要放入到package中,比如package为com.chenpp,那么如果该属性为true,则对应的java文件会放到com/chenpp文件夹下,也就是包路径下。

    2) filtered="true"标识下面提到的${}是否要进行替换

3.创建对应的子模块下的pom.xml和java文件

以domain子模块为例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>${rootArtifactId}</artifactId>
        <groupId>${groupId}</groupId>
        <version>${version}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>${artifactId}</artifactId>

    <dependencies>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>


</project>
package ${package}.entity;

public class User{


    private String userName;
    private String sex;


    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

整个项目的结构如下:

archetype项目写好之后,通过mvn clean install命令安装到本地的maven仓库中

通过已有的项目结构生成archetype

在项目的根目录下(即项目的pom.xml文件所在目录)下执行maven命令:
 mvn archetype:create-from-project

这样就可以通过当前项目结构创建一个archetype骨架,生成的archetype的信息,默认是在project根目录下的 target\generated-sources\archetype 目录

然后在archetype的根目录下(即: 项目根目录\target\generated-sources\archetype)执行mvn clean install命令就可以将archetype安装在本地仓库里了。

通过archetype创建新项目

1.通过maven命令的方式

前面的四个参数是生成的新项目的maven groupId以及package,后面三个参数指定使用的脚手架archetype

 mvn archetype:generate -DgroupId=com.chenpp -DartifactId=supermarker-project -Dpackage=com.chenpp.market -Dversion=1.0 -DarchetypeGroupId=com.chenpp  -DarchetypeArtifactId=archetype-project -DarchetypeVersion=1.0 -X -DarchetypeCatalog=local

archetypeCatalog用来指定maven-archetype-plugin读取archetype-catalog.xml文件的位置:
internal——maven-archetype-plugin内置的
local——本地的,位置为~/.m2/archetype-catalog.xml
remote——指向Maven中央仓库的Catalog

生成新的项目如下:

2.通过IDE方式生成(使用本地install的archetype)

使用本地的archetype jar来生成新项目

发布了47 篇原创文章 · 获赞 12 · 访问量 5074

猜你喜欢

转载自blog.csdn.net/qq_35448165/article/details/103721481