2016-05-06 42 views
4

考虑与模块Maven项目包括一些公用事业(JAR)和一些劲歌给别人参考,如果他们想使用其中的一些工具。Maven的抱怨父母相对路径

例如父pom.xml的

<artifactId>project-parent</artifactId> 
<modules> 
    <module>client-ref-pom</module> (a module with just one pom.xml) 
    <module>server-ref-pom</module> (a module with just one pom.xml) 
    <module>client-utils</module> (a module with some utility classes, needs to ref. client-ref-pom) 
    <module>server-utils</module> (a module with some utility classes, needs to ref. server-ref-pom) 
    <module>utils</module> (a module with some utility classes, needs to ref. project-parent) 
</modules> 

所以,如果有另一个项目希望使用utils的里面,它会参考REF-POM作为它的父POM,使这些属性可以继承。这是为了达到目的。

目前的问题是,模块utils还需要引用ref-pom作为它的父pom(并且ref-pom将ref-project-parent作为它的父pom),maven正在抱怨'parent.relativePath'指向项目父母而不是反思,建议再次验证项目结构。

由于这只是一个警告,我仍然可以编译项目,但我不知道正确的方法来设置项目结构,使Maven是幸福的,我的目的服务。

+1

你可以显示你的项目结构(文件夹结构)以及你的pom文件的位置。 – khmarbaise

回答

9

为了解决父项目,这些可能的来源进行检查:

  • relativePath
  • 本地仓库
  • 远程仓库

的相对路径,如果没有明确给出,默认为..,即当前项目的父目录中的pom。因此,Maven会检查a)该目录中是否存在pom文件,以及b)该pom文件是否包含与当前项目的父定义中所述的坐标相同的坐标。

如果a)和b)都为真,即POM文件被作为母体的有效POM的分辨。

如果)为真,且b)是假的,被给予警告,因为这通常指向一个错误配置的项目(如你的情况)ADN的POM被忽略。

如果)是假的,其他的来源进行检查。

所以,你的情况,我认为你有你的utils的以下/ pom.xml的

<parent> 
    <groupId>...</groupId> 
    <artifactId>ref-pom</artifactId> 
    <version>..</version> 
</parent> 

也就是包含<relativePath>..</relativePath>。所以Maven的检查utils的的父目录,找到一个POM,不过这点被命名为project-parent而不是预期的ref-pom。因此警告。

下面将工作:

<parent> 
    <groupId>...</groupId> 
    <artifactId>ref-pom</artifactId> 
    <version>..</version> 
    <relativePath>../ref-pom</relativePath> 
</parent> 

(注意,在你的文字,你写的裁判,聚甲醛,但在模块上方只有client-ref-pomserver-ref-pom

然而

你应该考虑这是否真的是你想要的,在你的情况下,如果单独的*-ref-pom模块真的有必要或者如果其他poms可以并应该更好地放置在各自的*-util模块内。

+0

真正有用的信息,谢谢!是的,我认为可能是我真的应该将utils模块降级到ref-pom模块。 – user1589188