2017-03-01 57 views
0

我们正在从蚂蚁瓦特/艾维转移到Maven。作为这一举措的一部分,我们已经将具有多个JAR的项目用于将分离的Ivy工件分类为带有分类器的Maven工件。常春藤没有拉动分类器的罐子上的传递依赖

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

在我们的Maven仓库,他们是所有项目的罐子单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文件没有附加分类器,但我还没有弄明白。

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

回答

0

你需要对常春藤说要使用lBiblio resolver。您可以禁用寻找劲歌,报价从lBilbio链接:由

当使用m2compatible标志,您可以禁止使用POMS的usepoms标志设置为false

如果一个没有按” t工作,更精确的设置可以通过packager resolver实现 - 在页面底部有一个不在分类器属性。

另外(对于任何解析器),您可能需要正确设置工件模式才能真正找到工件。

+0

我正在使用IBibilo解析器。我不想禁用poms,因为我需要它们来查找我下载的罐子的依赖关系。我会尝试设置打包器解析器。 –

+0

我在打包解析程序时遇到问题。我可以让它看到分类器或不看分类器,所以我可以选择找到POM或JAR。格儿。 –

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>实体内没有子实体。常春藤然后在com/vegicorp/foo/1.0.0/foo-1.0.0-client.jar寻找罐子是正确的,但不能找到POM在com/vegicorp/foo/1.0.0/foo-1.0.0-client.com。我们以前从未注意到这一点,因为我们只有两个或三个有分类器的第三方罐子,而这些罐子都没有依赖于其他罐子。没有关联POM下载的jar无关紧要。

当我们开始用分类器定义我们自己的罐子时,一切都破裂了,因为我们的瓶子有其他罐子依赖关系。

但是,如果我用了<artifact>实体,并把该分类中,一切工作:

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

常春藤发现信息库中的正确位置在com/vegicorp/foo/1.0.0,然后下载POM,而不在com/vegicorp/foo/1.0.0/foo-1.0.0.pom分类。然后它找到这个位置上的神器,位于com/vegicorp/foo/1.0.0/foo-1.0.0-client.jar