Maven 抱怨 parent 相对路径

Maven complaining about parent relative path

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

例如parentpom.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>

因此,如果有另一个项目希望使用该实用程序,它将引用 ref-pom 作为其 parent pom,以便可以继承属性。这个目的就达到了。

当前的问题是模块实用程序还需要引用 ref-pom 作为其 parent pom(并且 ref-pom 将引用 project-parent 作为其 parent pom),maven 抱怨 'parent.relativePath' 指向 project-parent 而不是 ref-pom,建议再次验证项目结构。

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

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

  • 相对路径
  • 本地存储库
  • 远程存储库

相对路径,如果没有明确给出,默认为..,即当前项目父目录下的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 的内容是否可以而且应该更好地放在各自的模块中*-util 个模块。