2011-11-24 58 views
44

我有几个Maven项目,每个都有一些共同的功能或至少有共同的配置/依赖项。我将它提取到一个普通的pom.xml中,然后模块化了几个方面,例如持久性,Spring相关的依赖关系等等 - 都在它们自己的模块中,这些模块从这个父POM继承。M2E:版本是父版本的重复 - 为什么这是警告?

现在,“Common”是版本1.0.0,我有“ProjectA”,我希望从它继承。我收到警告:

版本的父版本

重复我不完全理解为什么这是一个警告。我想我可以选择从我的项目POM中省略版本以继承版本。 (我为普通模块做这件事 - 例如,普通弹簧为Spring应用程序增加了额外的通用依赖性,事实上,ProjectA实际上是从普通弹簧继承而来的。)

是不是只是 - 一个选项?如果我将我的ProjectA版本更改为1.0.1或2.0.0,则一切正常。

+0

对于什么是值得的,我很小心,只继承从POM和我依赖于JAR。我声明了一个在dependencyManagement中使用的common.version属性,以便ProjectA可以继承common-spring(从common继承)并依赖于common-io(它也从common继承),它们都是相同的版本。 –

+0

这是由m2eclipse或Maven本身发出的特定警告吗? (你可以在命令行中用'mvn verify'来检查 - 如果Maven发出类似的或不是这样的命令)。除此之外,如果你可以发布有问题的'pom.xml'文件,它将非常有用。很难在设置中查看发生了什么。 –

+0

这很公平。我会在星期三这样做,因为我正在度假(尽管如此,没有像度假一样的东西!)。我很确定这是一个m2e警告。 –

回答

51

它只是M2e试图变得聪明,因为版本元素(如组ID)有时可能是多余的,并且可以从父POM继承,因此从您的子POM中删除此元素将是安全的。

但有时候这不是一个多余的信息,比如当父项目和子项目有不同的生命周期时,m2e应该允许禁用此警告。不幸的是没有办法做到这一点尚未:http://dev.eclipse.org/mhonarc/lists/m2e-users/msg01961.html

UPDATE:邓肯说,波纹管,在新版本中,您可以禁用此警告。

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. 
52

更新版本的m2e(自1.1以来)现在允许您禁用此警告。

首选项>的Maven>警告>禁用“版本中的父版本重复”警告

原始错误报告:https://bugs.eclipse.org/bugs/show_bug.cgi?id=356796

+2

+1您可以在首选项中勾选它,但是您需要执行Project> Maven> Update Project ...以使它们消失 – slf

+0

@slf在最新版本的Eclipse中,只要您更改Maven的**错误/警告**设置,并点击“应用”,一个弹出窗口将出现,让您立即更新项目。 – informatik01