maven 多模块模板

本文详细介绍如何使用Maven创建并使用多模块项目模板,包括建立模板项目、生成模板骨架、本地及私服安装模板、使用模板创建项目的过程,以及模板使用的注意事项。

1、建立模板项目

├─.settings
├─demo-core
│  ├─.settings
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─test
│      │  │          └─core
│      │  └─resources
│      └─test
│          ├─java
│          └─resources
├─demo-db
│  ├─.settings
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─test
│      │  │          └─db
│      │  └─resources
│      └─test
│          ├─java
│          └─resources
└─src
    └─site

2、生成模板骨架

2.1 安装本地仓库

进入多模块项目根目录,执行如下命令

>mvn archetype:create-from-project -Darchetype.filteredExtensions=java
> cd target/ #进入target
>tree
generated-sources
    └─archetype
        ├─src
        │  ├─main
        │  │  └─resources
        │  │      ├─archetype-resources
        │  │      │  ├─.settings
        │  │      │  ├─__rootArtifactId__-core
        │  │      │  │  ├─.settings
        │  │      │  │  └─src
        │  │      │  │      └─main
        │  │      │  │          └─java
        │  │      │  │              └─core
        │  │      │  └─__rootArtifactId__-db
        │  │      │      ├─.settings
        │  │      │      └─src
        │  │      │          └─main
        │  │      │              └─java
        │  │      │                  └─db
        │  │      └─META-INF
        │  │          └─maven
        │  └─test
        │      └─resources
        │          └─projects
        │              └─basic
        └─target
            ├─classes
            │  ├─archetype-resources
            │  │  ├─.settings
            │  │  ├─__rootArtifactId__-core
            │  │  │  ├─.settings
            │  │  │  └─src
            │  │  │      └─main
            │  │  │          └─java
            │  │  │              └─core
            │  │  └─__rootArtifactId__-db
            │  │      ├─.settings
            │  │      └─src
            │  │          └─main
            │  │              └─java
            │  │                  └─db
            │  └─META-INF
            │      └─maven
            └─test-classes
                └─projects
                    └─basic
>cd generated-sources/archetype/
>mvn clean install #安装到本地仓库

2.2 安装到私服

>mvn archetype:create-from-project -Darchetype.filteredExtensions=java
> cd target/ #进入target
>tree
generated-sources
    └─archetype
        ├─src
        │  ├─main
        │  │  └─resources
        │  │      ├─archetype-resources
        │  │      │  ├─.settings
        │  │      │  ├─__rootArtifactId__-core
        │  │      │  │  ├─.settings
        │  │      │  │  └─src
        │  │      │  │      └─main
        │  │      │  │          └─java
        │  │      │  │              └─core
        │  │      │  └─__rootArtifactId__-db
        │  │      │      ├─.settings
        │  │      │      └─src
        │  │      │          └─main
        │  │      │              └─java
        │  │      │                  └─db
        │  │      └─META-INF
        │  │          └─maven
        │  └─test
        │      └─resources
        │          └─projects
        │              └─basic
        └─target
            ├─classes
            │  ├─archetype-resources
            │  │  ├─.settings
            │  │  ├─__rootArtifactId__-core
            │  │  │  ├─.settings
            │  │  │  └─src
            │  │  │      └─main
            │  │  │          └─java
            │  │  │              └─core
            │  │  └─__rootArtifactId__-db
            │  │      ├─.settings
            │  │      └─src
            │  │          └─main
            │  │              └─java
            │  │                  └─db
            │  └─META-INF
            │      └─maven
            └─test-classes
                └─projects
                    └─basic
>cd generated-sources/archetype/
>mvn clean install #安装到本地仓库
>vim pom.xml #添加私服地址
<distributionManagement>
    <repository>
        <id>releases</id>
        <name>releases</name>
        <url>http://ip:port/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <name>snapshots</name>
        <url>http://ip:port/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>
>mvn deploy #安装到私服

3、使用

3.1 本地使用

>cd /tmp #代码生成目录
>mvn archetype:generate -DarchetypeCatalog=local #从本地仓库选择模板
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: local -> demo-parent:demo-parent-archetype (demo-parent-archetype)
2: local -> com.fhhr:path-parent-archetype (Parent pom providing dependency and plugin management for applications
                built with Maven)
3: local -> com.thebeastshop:beast-archetype-archetype (beast-archetype-archetype)
4: local -> demo-parent:demo-archetype (demo-archetype)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 4 #选择对应的编号
Define value for property 'groupId': com.test
Define value for property 'artifactId': dd
Define value for property 'version' 1.0-SNAPSHOT: : 1.0
Define value for property 'package' com.test: :
Confirm properties configuration:
groupId: com.test #项目groupId
artifactId: dd #项目artifactId
version: 1.0 #项目版本号
package: com.test
 Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: demo-archetype:0.0.1-SNAPSHOT
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.test
[INFO] Parameter: artifactId, Value: dd
[INFO] Parameter: version, Value: 1.0
[INFO] Parameter: package, Value: com.test
[INFO] Parameter: packageInPathFormat, Value: com/test
[INFO] Parameter: package, Value: com.test
[INFO] Parameter: version, Value: 1.0
[INFO] Parameter: groupId, Value: com.test
[INFO] Parameter: artifactId, Value: dd
[INFO] Parent element not overwritten in D:\opt\dd\dd-core\pom.xml
[INFO] Parent element not overwritten in D:\opt\dd\dd-db\pom.xml
[INFO] Project created from Archetype in dir: D:\opt\dd
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:17 min
[INFO] Finished at: 2018-12-28T14:56:32+08:00
[INFO] ------------------------------------------------------------------------

3.2 私服使用

>mvn archetype:generate   
-DarchetypeCatalog=remote 
-DarchetypeGroupId=demo-parent #私服上的groupId
-DarchetypeArtifactId=demo-archetype #私服上的artifactId
-DarchetypeVersion=1.0.0 #私服上的版本号
-DgroupId=com.test #项目的groupId
-DartifactId=demo.project #项目的artifactId
-Dversion=1.0.0 #项目的版本

3.3 注意

  • 3.1使用时,当本地不存在,私服存在时,会从私服拉取。
  • 该命令的参数-DarchetypeCatalog,可选值为:remote,internal
    ,local等,用来指定archetype-catalog.xml文件从哪里获取。

4、注意

第2步生成骨架-多模块项目-子模块的名不可以随便取,否则不能生成变量的项目。

子模块命名:父项目artifactId+子模块名。如父项目artifactId是demo,子模块demo-core。

下面为maven-archetype-plugin插件的部分源码,可以看出子模块命名规范。

for (Iterator<String> modules = pom.getModules().iterator(); modules.hasNext();) {
	String subModuleId = modules.next();

	String subModuleIdDirectory = subModuleId;

	if (subModuleId.indexOf(rootArtifactId) >= 0) {
		subModuleIdDirectory = StringUtils.replace(subModuleId, rootArtifactId, "__rootArtifactId__");
	}

	createModulePoms(pomReversedProperties, rootArtifactId, packageName,
			FileUtils.resolveFile(basedir, subModuleId),
			FileUtils.resolveFile(archetypeFilesDirectory, subModuleIdDirectory), preserveCData, keepParent);
}

5、工具导入

5.1 导入eclipse

window->perferences->maven

私服的archetype-catalog.xml

新建maven项目时,选择“demo”即可看到我们自己的模板了

官方文档地址:Maven Archetype Plugin – Create an archetype from a multi-module project

5.2 导入idea

创建maven项目

 添加archetype,archetype添加一次,列表就会有了,后面直接在列表中选就可以。

 

 添加项目相关信息

 生成项目

项目创建成功

注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: 中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值