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添加一次,列表就会有了,后面直接在列表中选就可以。
添加项目相关信息
生成项目
项目创建成功