Maven2无法从相对路径中找到父级

时间:2010-03-05 20:00:33

标签: maven-2 maven

我正在尝试使用Maven2,但我的子项目无法找到父项目。

目录结构如下:

--parent
  --pom.xml
--child
  --pom.xml

Child pom.xml文件如下所示:

<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>myapp</artifactId>
    <version>${app.version}</version>
    <relativePath>.../parent/pom.xml</relativePath>
</parent>

然而,当我使用maven时,它似乎甚至没有查看相对路径,它似乎尝试从maven存储库下载它。它显然不在回购中。我想让它看看相对路径。我究竟做错了什么?这是错误消息:

[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/maven2/com/mycompany/app/myapp/${app.version}/myapp-
${app.version}.pom
[INFO] Unable to find resource 'com.mycompany.app:myapp:pom:${app.version}' in reposit
ory central (http://repo1.maven.org/maven2)
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).


Project ID: null:web:jar:null

Reason: Cannot find parent: com.mycompany.app:myapp for project: null:web:jar:null for
 project null:web:jar:null

6 个答案:

答案 0 :(得分:16)

您不能将属性用于父版本 - 它必须匹配。目前,这是构建在以后可以重现的必要条件。很多人都会在问题https://issues.apache.org/jira/browse/MNG-624

上跟踪此问题

答案 1 :(得分:11)

据我所知,变量扩展在父元素中不起作用(参见MNG-624和有关此背景的注释),您需要明确设置版本:

<parent>
  <groupId>com.mycompany.app</groupId>
  <artifactId>myapp</artifactId>
  <version>1-SNAPSHOT</version><!-- or whatever version you use -->
  <relativePath>../parent/pom.xml</relativePath>
</parent>

顺便说一下,如果你想为你的所有模块使用相同的版本,你应该简单地在你的子项目中继承它,即不要覆盖它(没有真正需要${app.version} IMO),而不是另一种方式。

答案 2 :(得分:7)

我发现你需要首先安装父pom,然后后续的子poms可以从存储库中读取它们。

使用:mvn -N install

这将安装父pom而不运行其他子poms。

答案 3 :(得分:1)

应该是:

<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>myapp</artifactId>
    <version>${app.version}</version>
    <relativePath>../parent/pom.xml</relativePath>
</parent>

答案 4 :(得分:1)

您的包装类型和/或版本ID可能不匹配。我得到了和你一样的错误,但是玩了包装类型并让它发挥作用。请尝试以下方法。

以下是父pom.xml的片段。包装类型是“pom”。我没有父应用程序的任何代码,只有一个共同的pom.xml用于共享:

   ... 
    <groupId>com.mycompany.app</groupId>
    <artifactId>parent</artifactId>
    <version>${app.version}</version>
    <packaging>pom</packaging>

Child的pom.xml。它是一个webapp,所以包装类型是“战争”:

<parent>
  <groupId>com.mycompany.app</groupId>
  <artifactId>parent</artifactId>
  <version>${app.version}</version>
  <relativePath>../parent/pom.xml</relativePath>
  <packaging>war</packaging>
</parent>

答案 5 :(得分:1)

问题很可能是您使用了.../而不是../