我正在尝试使用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
答案 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)
问题很可能是您使用了.../
而不是../
。