常春藤没有使用分类器

时间:2017-03-01 15:43:59

标签: jar ant settings ivy

我们正从Ant w / Ivy迁移到Maven。作为这一举措的一部分,我们采用了多个罐子的项目,这些罐子将Ivy工件分离为Maven工件和分类器。

新的Maven项目对此没有任何问题。但是,我们的常春藤项目无法找到分类器的pom.xml

在我们的Maven存储库中,它们是项目中所有jar的单个pom.xml

http://repo.vegicorp.com/l/com/vegicorp/foo/1.0.0/foo-1.0.0.pom
http://repo.vegicorp.com/l/com/vegicorp/foo/1.0.0/foo-1.0.0.jar
http://repo.vegicorp.com/l/com/vegicorp/foo/1.0.0/foo-1.0.0-client.jar
http://repo.vegicorp.com/l/com/vegicorp/foo/1.0.0/foo-1.0.0-test.jar

查看调试Ant构建的输出,我看到它在我们的Maven存储库中查找:

http://repo.vegicorp.com/com/vegicorp/foo/1.0.0/foo-1.0.0-client.pom

它将分类器附加到pom.xml文件的名称!它可以找到并下载jar,但如果没有pom.xml,它就无法找出依赖关系。我们的构建失败,因为没有下载依赖项。

我假设ivysettings.xml中有一些设置会让Ivy知道Pom文件没有附加分类器,但我还没知道。< / p>

那么,我该如何解决这个问题呢?我可能能够将丢失的pom.xml复制到我们的存储库(这是Artifactory),但我不确定我是否可以。 (也许Artifactory中有一个设置可以帮助解决这个问题吗?)。

2 个答案:

答案 0 :(得分:0)

你需要对常春藤说lBiblio resolver。您可以禁用寻找poms,引自lBilbio链接:

  

使用m2compatible标志时,您可以禁用poms的使用   将usepoms标志设置为false

如果那个不起作用,可以使用packager resolver实现更精细的设置 - 在页面底部有一个不在分类器属性。

此外(对于任何解析器),您可能需要正确设置工件模式以实际查找工件。

答案 1 :(得分:0)

我找到了解决方法,或者这可能是我应该一直这样做的方式。

我用这种方式在我的ivy.xml文件中定义了依赖项:

<dependency org="com.vegicorp" name="foo" version="1.0"
    conf="compile->default"/>

一切都在<dependency>实体下,没有子实体,它运作得很好。默认情况下,它找到了pom.xml,将其转换为ivy.xml依赖文件,并下载了jar。

当我们开始添加分类器时,我们就是这样做的:

<dependency org="com.vegicorp" name="foo" version="1.0"
    conf="compile->default" maven:classifier="client"/>

再次,将所有内容放在<dependency>实体中,不包含子实体。 Ivy然后在com/vegicorp/foo/1.0.0/foo-1.0.0-client.jar找到正确的jar,但无法在com/vegicorp/foo/1.0.0/foo-1.0.0-client.com找到POM。我们之前从未注意到这一点,因为我们只有两到三个具有分类器的第三方罐子,而且这些罐子都没有依赖其他罐子。在没有相关POM的情况下下载jar并不重要。

当我们开始使用分类器定义我们自己的jar时,一切都崩溃了,因为我们的jar有其他jar依赖项。

但是,如果我使用<artifact>实体并将分类器放入其中,那么一切正常:

<dependency org="com.vegicorp" name="foo" version="1.0" 
    conf="compile->default">
    <artifact name="foo" ext="jar" maven:classifier="client"/>
</dependency>

Ivy在com/vegicorp/foo/1.0.0找到存储库中的正确位置,然后在com/vegicorp/foo/1.0.0/foo-1.0.0.pom处没有分类器的情况下下载POM。然后,它使用com/vegicorp/foo/1.0.0/foo-1.0.0-client.jar

处的分类器在此位置定位工件