我正在使用 makePom Ivy 任务生成一个用于发布到 Artifactory 的 Pom 文件。除了一个问题外,这非常有效。因为命名空间与我们的 Ivy 配置一起使用,所以 pom 文件中的依赖项不是原始的 maven groupId/artifactId,而是命名空间派生的名称。这会导致使用此 pom 的 maven 项目在解析依赖项时失败。
举个例子 :
在 ivy.xml 文件中,我们将有一个这样的依赖项:
<dependency
org="org.apache.commons"
name="commons-configuration"
rev="1.6"
conf="compile->compile(*),master(*);runtime->runtime(*)" />
这在 ivysettings.xml 中有以下 ivy 命名空间规则
<rule>
<fromsystem>
<src org="org.apache.commons" module="(commons-configuration)" />
</fromsystem>
<tosystem>
<src org="commons-.+" module="commons-.+" />
<dest org="org.apache.commons" module="$m0" />
</tosystem>
</rule>
这意味着在 Maven 存储库中,org="commons-configuration" 和 module="commons-configuration"。
当我调用makePom时,生成的依赖项将是:
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.6</version>
<scope>runtime</scope>
</dependency>
</dependencies>
这是存储库中的未知工件,因为它被存储为 commons-configuration:commons-configuration。
我发现解决这个问题的唯一方法是在 ant 中生成 pom,然后在发布之前跨 pom运行一系列 ant replaceregexp任务步骤。虽然它有效,但它似乎是一种修复 pom 的相当复杂的方法,我想知道是否有人遇到过这个问题,以及他们是如何解决这个问题的。