M2E:版本重复于父版本 - 为什么会出现警告?

49
我有几个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。我声明了一个common.version属性,用于dependencyManagement,这样ProjectA就可以从common-spring(它继承自common)继承并依赖common-io(它也继承自common),而它们都是相同的版本。 - Doug Moscrop
这个特定的警告是由m2eclipse还是Maven本身发出的?(您可以使用 mvn verify 命令行检查 - 可能 - 如果 Maven 发出类似此类的内容或不发出)除此之外,如果您可以发布相关的 pom.xml文件,那将会非常有帮助。在不了解您的设置情况的情况下难以理解正在发生什么。 - Kohányi Róbert
很公平。我会在周三做这件事,因为我正在度假(虽然没有SO的假期!)。我相当确定这是一个m2e警告。 - Doug Moscrop
@Doug,这个问题现在似乎已经解决了,请参见我的回答 - Duncan Jones
3个回答

62

3
你可以在偏好设置中勾选它,但是需要执行项目 > Maven > 更新项目... 才能让它们消失。 - slf
1
在最新版本的Eclipse中,只要您更改了首选项中Maven的错误/警告设置并单击“应用”,就会弹出一个窗口,询问您是否立即更新项目。 - informatik01

58

这只是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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接