Maven全局plugin配置传递子pom
前言
我们现在有一个多模块的 maven
项目,项目中模块一般会有一个顶级的 parent
,我们想通过 parent
中配置全局的 version
,但一般在 <parent>
标签中配置 ${}
变量是会报错的 。
所以这里引入一个 flatten-maven-plugin
比如我们的模块结构为
1 | gt-boot-parent |
pom.xml
文件配置
gt-boot-parent
的pom.xml
配置
1 |
|
gt-base
的pom.xml
配置
1 |
|
flatten
插件带来的好处
- 只需要修改
parent
的revision
即可完成整个多个项目的版本修改. - 如果我们项目有
Nexus
,那么我们依赖中的${}
,都会自动改为实际的版本号,并且dependence.scope
未填写时,自动填写默认的scope
compile
- 如果我们使用
Intellij IDEA
,那我们还会享有view -> tool windows -> maven
窗口的树形结构展示。 - 构建特定元素被删除
- 默认情况下会删除开发特定的元素
- 它仅包含您的工件用户所需的元素
这里就没有考虑
mvn versions:set -DnewVersion=
命令了,当前命令也可以完成一键修改版本号
官方介绍
官方案例
配置案例
项目中查看预览效果可以直接对比查询
pom.xml
与同目录下的 ..flattened-pom.xml
Flatten
可选配置
1 |
|
configuration
flattenMode
不做详细解释,一般使用resolveCiFriendliesOnly
,它可以:自动从
parent
获取并插入子pom
的Build
、CiManagement
、Contributors
、Dependencies
、DependencyManagement
、Description
Developers
、DistributionManagement
InceptionYear
、IssueManagement
、MailingLists
Modules
、Name
、Organization
、PluginManagement
、PluginRepositories
、Prerequisites
Profiles
、Properties
、Reporting
、Repositories
、Scm
、Url
会自动处理子
pom
的Parent
、Version
其它选择
| | | |
| ————- | ————————- | ———————————————————— |
|flattenMode
|minimum
| 弃用 |
|flattenMode
|oss
| 保留repositories
、pluginRepositories
外的所有pom
元素 |
|flattenMode
|ossrh
| Keeps all {@link FlattenDescriptor optional POM elements} that are required for OSS Repository-Hosting. |
|flattenMode
|bom
| 像ossrh
,会额外保留dependencyManagement
、Properties
|
|flattenMode
|defaults
| 删除所有 pom 节点,除了repositories
|
|flattenMode
|clean
| 删除所有 pom 节点 |
|flattenMode
|fatjar
| 删除所有 pom 节点 和 dependencies |
|flattenMode
|resolveCiFriendliesOnly
| 仅解析revision
、sha1
、changelist
, |
updatePomFile
一般设置为 truetrue or false
/** * The flag to indicate if the generated flattened POM shall be set as POM file to the current project. By default * this is only done for projects with packaging other than <code>pom</code>. You may want to also do this for * <code>pom</code> packages projects by setting this parameter to <code>true</code> or you can use * <code>false</code> in order to only generate the flattened POM but never set it as POM file. If * <code>flattenMode</code> is set to bom the default value will be <code>true</code>. */
1
2
3
4
5
6
7
8
9
- `pomElements`元素的处理
- ```xml
<pomElement>
<!-- 以 developers 元素举例-->
<!--ElementHandling:flatten,expand,resolve,interpolate,keep,remove -->
<developers>remove</developers>
</pomElement>flatten
平铺,会删除所有developers
expand
子pom.xml
继承第一个parent
的developers
resolve
子pom.xml
继承第一个parent
的developers
interpolate
插入keep
子pom.xml
不会继承parent
的developers
remove
删除所有developers
下面一般不配置
embedBuildProfileDependencies
flattenDependencyMode
flattenedPomFilename
localRepository
mojoExecution
outputDirectory
project
session