0%

maven自定义模板

Maven 自定义 Archetype 模板:打造专属项目骨架

在团队开发中,为了保持项目结构的一致性,通常需要统一的项目模板(Archetype)。Maven 允许我们基于现有项目创建自定义 Archetype,实现标准化的项目初始化。本文将详细介绍自定义 Archetype 的创建、安装和使用流程。

自定义 Archetype 的核心价值

  • 标准化:统一团队项目结构、依赖版本和配置规范。
  • 高效性:避免重复创建目录、配置依赖等繁琐工作。
  • 可维护性:模板更新后,所有基于模板创建的项目可同步规范。

创建自定义 Archetype 的步骤

准备基础项目

首先需要一个符合预期规范的 Maven 项目(作为模板的基础),包含:

  • 标准目录结构(如 src/main/javasrc/test/java 等)。
  • 统一的 pom.xml 配置(如通用依赖、插件、属性等)。
  • 必要的基础代码或配置文件(如工具类、日志配置等)。

示例项目结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
micro_service_parent/
├── pom.xml # 包含通用依赖和插件配置
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── zhanghe/
│ │ │ └── util/
│ │ │ └── CommonUtil.java # 通用工具类
│ │ └── resources/
│ │ └── logback.xml # 统一日志配置
│ └── test/
│ └── java/
│ └── com/
│ └── zhanghe/
│ └── TestBase.java # 测试基类

生成 Archetype 骨架

进入基础项目的根目录,执行以下命令生成 Archetype 结构:

1
mvn archetype:create-from-project

命令执行后会:

  • target/generated-sources/archetype 目录下生成 Archetype 骨架。
  • 自动处理项目中的变量替换(如将项目特定信息转换为模板变量)。

生成的 Archetype 结构解析:

1
2
3
4
5
6
7
8
9
10
11
target/generated-sources/archetype/
├── pom.xml # Archetype 自身的 POM 配置
├── src/
│ └── main/
│ └── resources/
│ ├── archetype-resources/ # 模板文件(基于基础项目生成)
│ │ ├── pom.xml # 项目 POM 模板
│ │ └── src/ # 源码和资源模板
│ └── META-INF/
│ └── maven/
│ └── archetype-metadata.xml # Archetype 元数据配置

安装 Archetype 到本地仓库

进入生成的 Archetype 目录:

1
cd target/generated-sources/archetype

执行安装命令,将 Archetype 安装到本地仓库:

1
mvn install

执行后效果:

  • Archetype 会被打包并安装到本地仓库(默认 ~/.m2/repository)。
  • 目录结构为 groupId/artifactId/version/(如 com/zhanghe/study/springcloud/micro_service_parent-archetype/1.0-SNAPSHOT/)。

更新本地 Archetype 目录

执行以下命令,让 Maven 识别新安装的 Archetype:

1
mvn archetype:crawl
作用:
  • 在本地仓库根目录生成 / 更新 archetype-catalog.xml 文件,记录所有本地可用的 Archetype。
  • 新创建的 Archetype 会被添加到该文件中,例如:
1
2
3
4
5
6
<archetype>
<groupId>com.zhanghe.study.springcloud</groupId>
<artifactId>micro_service_parent-archetype</artifactId>
<version>1.0-SNAPSHOT</version>
<description>micro_service_parent</description>
</archetype>

使用自定义 Archetype 创建项目

基础命令

在任意目录执行以下命令,基于自定义 Archetype 创建项目:

1
2
3
4
5
6
7
8
9
mvn archetype:generate \
-DarchetypeCatalog=local \ # 指定使用本地目录(archetype-catalog.xml)
-DarchetypeGroupId=com.zhanghe.study.springcloud \ # 自定义 Archetype 的 groupId
-DarchetypeArtifactId=micro_service_parent-archetype \ # 自定义 Archetype 的 artifactId
-DarchetypeVersion=1.0-SNAPSHOT \ # 自定义 Archetype 的版本
-DgroupId=com.zhanghe.newproject \ # 新项目的 groupId
-DartifactId=new-service \ # 新项目的 artifactId
-Dversion=1.0-SNAPSHOT \ # 新项目的版本
-DinteractiveMode=false # 非交互模式(无需手动确认)

交互模式(可选)

若省略 -DinteractiveMode=false,Maven 会进入交互模式,逐步提示输入项目信息:

1
mvn archetype:generate -DarchetypeCatalog=local

执行后会:

  1. 列出本地所有 Archetype(包括自定义的),选择对应编号。
  2. 依次提示输入新项目的 groupIdartifactIdversion 等信息。

高级配置:定制 Archetype 元数据

生成的 archetype-metadata.xml(位于 src/main/resources/META-INF/maven/)用于定义模板的结构和规则,可手动修改以优化 Archetype:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<archetype-descriptor name="micro_service_parent">
<fileSets>
<!-- 包含的文件集(可控制哪些文件纳入模板) -->
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<!-- 排除不需要的文件(如特定环境的配置) -->
<fileSet>
<directory>src/main/resources</directory>
<excludes>
<exclude>local.properties</exclude>
</excludes>
</fileSet>
</fileSets>
<!-- 自定义属性(生成项目时可动态传入) -->
<requiredProperties>
<requiredProperty key="package">
<defaultValue>com.zhanghe</defaultValue> <!-- 默认包名 -->
</requiredProperty>
</requiredProperties>
</archetype-descriptor>
  • filtered="true":表示文件内容中的变量(如 ${artifactId})会被替换为实际值。
  • includes/excludes:控制纳入模板的文件,避免冗余。

共享自定义 Archetype(团队协作)

为了让团队成员共享自定义 Archetype,需将其部署到私服(如 Nexus)

  1. 在 Archetype 项目的 pom.xml 中配置私服地址:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <distributionManagement>
    <repository>
    <id>nexus-releases</id>
    <url>http://your-nexus.com/repository/releases/</url>
    </repository>
    <snapshotRepository>
    <id>nexus-snapshots</id>
    <url>http://your-nexus.com/repository/snapshots/</url>
    </snapshotRepository>
    </distributionManagement>
  2. 部署到私服:

    1
    mvn deploy
  3. 团队成员配置私服的 Archetype 目录:
    settings.xml 中添加:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <profiles>
    <profile>
    <id>archetype</id>
    <properties>
    <archetypeCatalog>http://your-nexus.com/repository/public/archetype-catalog.xml</archetypeCatalog>
    </properties>
    </profile>
    </profiles>
    <activeProfiles>
    <activeProfile>archetype</activeProfile>
    </activeProfiles>

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10