Maven抱怨父母的相对路径

use*_*188 17 project-structure pom.xml maven parent-pom

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

例如,在父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>
Run Code Online (Sandbox Code Playgroud)

因此,如果有另一个项目希望使用utils,它将引用ref-pom作为其父pom,以便可以继承属性.达到这个目的.

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

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

bla*_*ild 34

为了解析父项目,请检查以下可能的来源:

  • 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>
Run Code Online (Sandbox Code Playgroud)

其中隐含着<relativePath>..</relativePath>.因此,Maven检查utils的父目录,找到一个POM,但这一点被命名project-parent而不是预期的ref-pom.因此警告.

以下将有效:

<parent>
  <groupId>...</groupId>
  <artifactId>ref-pom</artifactId>
  <version>..</version>
  <relativePath>../ref-pom</relativePath>
</parent>
Run Code Online (Sandbox Code Playgroud)

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

然而

您应该考虑这是否真的是您想要的,在您的情况下,如果*-ref-pom确实需要单独的模块,或者这些poms的内容可以并且应该更好地放置在相应的*-util模块内.


归档时间:

查看次数:

42983 次

最近记录:

6 年,8 月 前