Maven抱怨父母的相对路径

时间:2016-05-06 00:44:16

标签: maven pom.xml project-structure parent-pom

考虑一个带有模块的maven项目,其中包含一些实用程序(jar)和一些poms,供其他人参考,如果他们想要使用其中一些实用程序。

e.g。在父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'指向to project-parent而不是ref-pom,建议再次验证项目结构。

由于这只是一个警告,我仍然可以编译项目,但我想知道设置项目结构的正确方法,以便maven很高兴并且我的目的得到满足。

1 个答案:

答案 0 :(得分:27)

为了解析父项目,我们会检查这些可能的来源:

  • relativePath
  • 本地存储库
  • 远程存储库

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

如果a)和b)为真,则该pom文件用作解析有效pom的父文件。

如果a)为真,并且b)为假,则给出警告,因为这通常指向错误配置的项目(如您的情况)并且忽略了pom。

如果a)为假,则检查其他来源。

因此,在您的情况下,我假设您在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>

(请注意,在您的文字中,您写的是关于ref-pom,但在上面的模块中只有client-ref-pomserver-ref-pom

<强>然而

你应该考虑这是否真的是你想要的,在你的情况下,如果真的需要单独的*-ref-pom模块,或者这些poms的内容能够而且应该更好地放在相应的{{{ 1}}模块。