Maven多Module自定义archetype

创建archetype项目

创建Parent

  • 利用IDEA创建骨架项目,名称例如archetype-all
  • Pom
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     <artifactId>archetype-all</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <build>
    <extensions>
    <extension>
    <groupId>org.apache.maven.archetype</groupId>
    <artifactId>archetype-packaging</artifactId>
    <version>3.2.0</version>
    </extension>
    </extensions>

    <pluginManagement>
    <plugins>
    <plugin>
    <artifactId>maven-archetype-plugin</artifactId>
    <version>3.2.0</version>
    </plugin>
    </plugins>
    </pluginManagement>
    </build>
  • 可添加骨架自定义的目录文件等,例如.ignore等

    创建多Module

  • 名称如archetype-common、archetype-processor、archetype-provider
  • 各module创建目录,包括源、资源、测试、数据等
  • 各模块添加骨架文件,例config、util、主入口文件等
  • clean install,检查包冲突和异常等
  • 运行调试,保障项目运行正常

生成骨架

创建骨架

当前项目根目录下,执行mvn archetype:create-from-project

进入target/generated-sources/archetype目录,即为利用当前项目生成骨架结果。

修改骨架名称pom.xml
artifactId和name,默认会加archetype,可调整。

调整多模块骨架名称

进入target/generated-sources/archetype/src/main/resources/archetype-resources/

修改module的目录名称
rootArtifactId-common
rootArtifactId-processor
rootArtifactId-provider

确认.ignore等文件是否包含,没有的话手动添加。

Parent Pom添加多modules

1
2
3
4
5
<modules>
<module>${rootArtifactId}-common</module>
<module>${rootArtifactId}-processor</module>
<module>${rootArtifactId}-provider</module>
</modules>

Parent Pom添加多modules依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>xxx</groupId>
<artifactId>${rootArtifactId}-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>xxx</groupId>
<artifactId>${rootArtifactId}-processor</artifactId>
<version>${project.version}</version>
</dependency>

确认子module Pom的artifactId名称

1
2
<artifactId>${artifactId}</artifactId>
<packaging>jar</packaging>

修改子module Pom的依赖module artifactId名称

1
2
<artifactId>${rootArtifactId}-common</artifactId>
<artifactId>${rootArtifactId}-processor</artifactId>

修改archetype-metadata.xml配置,位于arget/generated-sources/archetype/src/main/resources/META-INF/,替换样例:

1
<module id="${rootArtifactId}-module1" dir="__rootArtifactId__-module1" name="${rootArtifactId}-module1">

安装和测试骨架

骨架目录target/generated-sources/archetype/
执行mvn install安装到本地

测试,执行mvn archetype:generate -DarchetypeCatalog=local,选择骨架和生产项目信息

部署:
mvn deploy

命令行测试:

1
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -Dfilter=archetype-all -DarchetypeCatalog=http://xx.xxx.com/nexus/content/repositories/releases/

自定义包名称

pom.xml头部添加:

1
2
3
4
5
6
7
8
9
#set ($artifactId = "${artifactId}")
#set ($index = $artifactId.indexOf('.'))
#if ($index < 0)
#set ($appName = $artifactId)
#else
#set ($index = $index + 1)
#set ($appName = $artifactId.substring($index))
#end
#set ($appPackage = "${groupId}." + $appName)

取artifactId得后半部分赋值给appName变量, archetype-metadata.xml中添加:

1
2
3
4
5
6
7
<requiredProperty key="appName">
<defaultValue>${appName}</defaultValue>
</requiredProperty>

<requiredProperty key="appPackage">
<defaultValue>${appPackage}</defaultValue>
</requiredProperty>

修改目录名为:
src/main/resources/xx/appName/

移除本地 自定义 archetype

~/.IntelliJIdea2016.2/system/Maven/Indices/UserArchetypes.xml

------ 本文结束------

本文标题:Maven多Module自定义archetype

文章作者:Perkins

发布时间:2020年10月09日

原始链接:https://perkins4j2.github.io/posts/72500/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。