maven-archetype多模块骨架创建以及使用
-
背景
公司项目都是各分公司,各团队自己创建的,没有统一过,从业务中沉淀下来的各种工具方法、业务包装等都各自实现、产生很多已解决的坑其他团队在趟一次,急需要统一框架,并且引入针对于通用的处理和包装;
-
创建多模块骨架
这里要多说一句,会有很多误区,这里要先创建一个 maven 多模块工程,先不要考虑怎么制作成模板,要先创建一个 无错误可运行,是你最终想要的一个多模块工程;
<groupId>com.clear</groupId> <artifactId>test-project</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>test-web</module> <module>test-service</module> <module>test-common</module> <module>test-api</module> <module>test-dao</module> <module>test-domain</module> <module>test-rpc</module> <module>test-client</module> </modules>
可以看到,这里创建了一个maven多模块的工程,test-project,里面有8个模块 各个模块的定义可以看模块名称就知道,这里不过多赘述
-
接下来根据创建的模板来生成maven骨架
进入当前项目 test-project 的根目录,然后执行命令
maven archetype:create-from-project
第一次需要下载很多jar 包,时间稍微有点长,成功之后可以看到在项目根目录有 target 目录;
注意:target/generated-sources/archetype/src/main/resources/archetype-resources目录下的模块这里变成了__rootArtifactId__api了,其实原本这里是test-api我是手动rename改成__rootArtifactId__了,这里大家会有疑问为什么要手动改成__rootArtifactId__开头因为这里涉及到多模块的动态命名,总之大家手动把它改掉
子模块的命名是父模块的命名 + 子模块的功能名,模版里面是通过__rootArtifactId__占位符来替换自己创建的父模块的artifactId,这样最终生成的模块就是严格按照父模块的artifactId来命名
- 更改archetype-metadata.xml配置占位符
在 target/generated-sources/archetype/src/main/resources/META-INF.maven/ 目录下 更改archetype-metadata.xml 效果如下图
-
执行 mvn install
进入到 target/generated-sources/archetype/ 目录下执行mvn install
成功后就会在本地 repo仓库中有个配置文件archetype-catalog.xml
-
deploy 到私服
在target/generated-sources/archetype/pom.xml 文件里加入私服地址
<distributionManagement> <repository> <id>nexus-releases</id> <url>http://1.1.1.1:19012/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <url>http://1.1.1.1:19012/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
然后再target/generated-sources/archetype/ 下 执行
mvn deploy
这样就发布到我们私服里了。至此maven多模块骨架工程的生成就告一段落,
那么怎么使用呢?使用有两种方式 :
-
本地使用
本地使用很简单 使用命令
mvn archetype:generate -DarchetypeGroupId=com.test -DarchetypeArtifactId=test-project-archetype -DarchetypeVersion=1.0-SNAPSHOT -DarchetypeCatalog=local -DgroupId=com.test -DartifactId=test -Dversion=1.0-SNAPSHOT
-
远程使用
在IDEA里
NEW > Project
选择Maven Archetype
2022 版本在Manage catalogs
里add 私服地址 http://1.1.1.1:19012/nexus/content/groups/public 并且选中,然后再Archetype
选项里点击下拉按钮,选择我们的骨架com.test:test-project-archetype
然后设置Advanced Settings
里的 gav信息就可以了;2022版本之前的 需要勾选
NEW > Project
后勾选Create from archetype
然后点击Add Archetype
按钮,在弹出的对话框中填写 gav信息和 私服地址 http://1.1.1.1:19012/nexus/content/groups/public 之后在列表里选中此模块点击Next,在第二步里注意 archetype 的value 要填入工程模板的名字 如test-project-archetype