在存储库中将relativePath设置为父pom是否合法?

时间:2011-08-18 12:33:42

标签: java maven ivy

我在maven 2中央存储库中找到了这个神器pom:

http://search.maven.org/remotecontent?filepath=javax/servlet/jsp/jsp-api/2.1.2/jsp-api-2.1.2.pom

它包括:

...
<parent>
  <groupId>org.glassfish.web</groupId>
  <artifactId>jsp</artifactId>
  <version>2.2</version>
  <relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<packaging>jar</packaging>
<version>${jsp-api.version}</version>
<name>JavaServer Pages(TM) API v${jsp-api.version}</name>
....

当我尝试使用Ivy解决依赖时遇到了问题:

<dependency org="javax.servlet.jsp" name="jsp-api" rev="2.1.2" />

Ivy无法解决依赖关系并打印出此错误:

[ivy:resolve]       nexus: bad revision found in http://XXX/nexus/content/groups/public/javax/servlet/jsp/jsp-api/2.1.2/jsp-api-2.1.2.pom: expected='2.1.2 found='${jsp-api.version}'

现在想知道存储库中的pom文件是否可以相对于父pom引用?

2 个答案:

答案 0 :(得分:3)

来自POM Reference:“注意relativePath元素。它不是必需的,但在搜索本地和远程存储库之前,可以用作Maven的指示符来首先搜索为该项目的父级提供的路径。“

这实际上意味着只有在找到它时才使用relativePath,然后Maven回退到正常的存储库查找。在这种情况下,存储库查找应该可以正常工作,因为引用的工件是available in central。您使用的是本地仓库还是代理?可能是您的代理设置阻止Ivy找到父pom。

答案 1 :(得分:0)

是的,这是合法的。

http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

从错误中看,它似乎没有为您解析${jsp-api.version}