M2E:版本与父版本重复 - 为啥这是一个警告?
Posted
技术标签:
【中文标题】M2E:版本与父版本重复 - 为啥这是一个警告?【英文标题】:M2E: Version is duplicate of parent version - Why is this a warning?M2E:版本与父版本重复 - 为什么这是一个警告? 【发布时间】:2012-01-05 23:41:51 【问题描述】:我有几个 Maven 项目,每个项目都有一些共同的功能或至少共同的配置/依赖项。我将它提取到一个通用的 pom.xml 中,然后将几个方面模块化,例如持久性、与 Spring 相关的依赖项等等——所有这些都在它们自己的模块中,这些模块都继承自这个父 POM。
现在,“Common”是 1.0.0 版本,我希望从它继承“ProjectA”。我收到警告:
版本与父版本重复
我不完全理解为什么这是一个警告。我以为我可以选择从我的项目 POM 中省略版本以继承该版本。 (我是针对通用模块这样做的——比如common-spring为Spring应用添加了额外的通用依赖,而实际上ProjectA实际上继承自common-spring。)
这不就是一个选项吗?如果我将我的 ProjectA 版本更改为 1.0.1 或 2.0.0,一切都很好。
【问题讨论】:
对于它的价值,我小心地只从 POM 继承并且我依赖于 JAR。我声明了一个在dependencyManagement 中使用的common.version 属性,这样ProjectA 就可以继承自common-spring(继承自common)并依赖common-io(继承自common)并且它们都是相同的版本。 这个特殊警告是由 m2eclipse 还是 Maven 本身发出的? (您可以使用mvn verify
在命令行上检查— 可能— Maven 是否发出类似的东西。)除此之外,如果您可以发布pom.xml
文件,那将真的很有帮助有问题。很难可视化您的设置中发生了什么。
这很公平。我会在星期三做这件事,因为我正在度假(虽然没有假期这样的事情!)。我很确定这是一个 m2e 警告。
@Doug 现在看来已修复,请参阅my answer below。
【参考方案1】:
这只是 m2e 试图变得聪明,因为版本元素(如组 ID)有时可能是多余的,并且可以从父 POM 继承,因此从您的子 POM 中删除此元素是安全的。
但有时这不是多余的信息,比如当父项目和子项目具有不同的生命周期时,m2e 应该允许禁用此警告。不幸的是,目前还没有办法做到这一点:http://dev.eclipse.org/mhonarc/lists/m2e-users/msg01961.html
更新:正如 Duncan 所说,在较新的版本中,您可以禁用此警告。
【讨论】:
【参考方案2】:如果它真的让你感到厌烦,请使用属性通过一些狡猾的手法来抑制警告:
<version>$api.version</version>
<properties>
<api.version>0.0.1-SNAPSHOT</api.version>
</properties>
但您真正要做的就是将警告移至控制台输出:
[WARNING] Some problems were encountered while building the effective model for [project]
[WARNING] 'version' contains an expression but should be a constant.
【讨论】:
【参考方案3】:较新版本的 m2e(自 1.1 起)现在允许您禁用此警告。
首选项 > Maven > 警告 > 禁用“版本与父版本重复”警告
原始错误报告:https://bugs.eclipse.org/bugs/show_bug.cgi?id=356796
【讨论】:
+1 您可以在首选项中勾选它,但您需要执行 Project > Maven > Update Project ... 才能让它们消失 @slf 在最新版本的 Eclipse 中,只要您在首选项中更改 Maven 的 Errors/Warnings 设置并单击“应用”,就会出现一个弹出窗口,为您提供立即更新项目。以上是关于M2E:版本与父版本重复 - 为啥这是一个警告?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以添加检查所有子模块是否具有与父 pom 中定义的相同版本?
为啥我在将我的 Electron 项目更新到最新版本后会看到“电子安全警告”?
摆脱 org.eclipse.m2e:lifecycle-mapping 的 POM not found 警告
maven警告:使用同一工件的两种不同类型的依赖项时重复版本