maven中的plugins 和 pluginManagement有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven中的plugins 和 pluginManagement有啥区别相关的知识,希望对你有一定的参考价值。
参考技术Amaven会在当前项目中加载plugins声明的插件;
pluginManagement是表示插件声明,即你在项目中的pluginManagement下声明了插件,maven不会加载该插件,pluginManagement声明可以被继承。
pluginManagement的一个使用案例是当有父子项目的时候,父项目中可以利用pluginManagement声明子项目中需要用到的插件,之后,当某个或者某几个子项目需要加载该插件的时候,就可以在子项目中plugins节点只配置 groupId 和 artifactId就可以完成插件的引用。
pluginManagement主要是为了统一管理插件,确保所有子项目使用的插件版本保持一致
为啥 Maven 版本插件不更新本地定义的属性?
【中文标题】为啥 Maven 版本插件不更新本地定义的属性?【英文标题】:Why doesn't Maven versions plugin update the locally defined property?为什么 Maven 版本插件不更新本地定义的属性? 【发布时间】:2021-05-15 11:56:10 【问题描述】:我正在使用versions-maven-plugin,并且在我的***pom.xml 中有几个用于versions-maven-plugin 的配置:
<build>
<pluginManagement>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<properties>
<property>
<name>magic-tool.version</name>
</property>
</properties>
</configuration>
</plugin>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
</plugin>
...
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<reportSets>
<reportSet>
<reports>
<report>dependency-updates-report</report>
<report>plugin-updates-report</report>
<report>property-updates-report</report>
</reports>
</reportSet>
</reportSets>
</plugin>
还有一个引用内部存储库“magic-tool”的属性:
<properties>
<magic-tool.version>100</magic-tool.version>
有问题的命令是
mvn clean && mvn versions:update-properties versions:commit -N -U -DincludeProperties=magic-tool.version -DallowSnapshots=true -X
这比指定将在 TeamCity 中使用的确切版本更可取 - 此命令在另一个具有几乎相同的 pom.xml 和完全相同的配置的应用程序中完美运行!
但是非功能性应用的输出是
[DEBUG] lowerBoundArtifactVersion: 100
[DEBUG] Property $magic-tool.version: Current winner is: null
[INFO] Property $magic-tool.version: Leaving unchanged as 100
当我们的 repo 中的 magic-tool 在 v102 上时,而我们正常工作的应用程序输出:
[DEBUG] Property $magic-tool.version: Set of valid available versions is [1, 2, 3, 4, 5, 6, 7... 95, 96, 97, 98, 99, 100, 101, 102]
[DEBUG] Property $magic-tool.version: Restricting results to null
[DEBUG] lowerBoundArtifactVersion: 101
[DEBUG] Property $magic-tool.version: Current winner is: 102
[DEBUG] Property $magic-tool.version: Searching reactor for a valid version...
[DEBUG] Property $magic-tool.version: Set of valid available versions from the reactor is []
[INFO] Updated $magic-tool.version from 100 to 102
如何让非功能性应用更新此属性 magic-tool.version?
【问题讨论】:
【参考方案1】:答案是该属性在non-functional > parent pom > dependencies
中未使用,但在functional app > parent pom > dependencies
中使用。
该命令是非递归的,因此它不知道属性magic-tool.version
用于non-functional app > child poms > dependencies
。
解决方案是在*** pom 中主动使用/定义依赖项中的属性(注意将其添加到 <dependencyManagement>
没有任何作用)。
【讨论】:
以上是关于maven中的plugins 和 pluginManagement有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
maven中的plugins 和 pluginManagement有啥区别
maven中的plugins 和 pluginManagement有啥区别
maven-surefire-plugin 忽略 pom.xml 中的插件顺序
pom.xml中properties标签中的maven编译器和plugin标签中的maven编译器之间的区别[重复]
Eclipse (pom.xml) 中的 Maven 错误:传输 org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 失败