解决 ivy 中的 maven test-jar

resolve maven test-jar in ivy

我需要解决来自 ivy 项目的 maven test-jar 依赖项。检索罐子没问题,但由于某种原因没有解决测试罐子...

这是我的解析器

<ibiblio name="nexus" root="${nexus-maven2-root}" pattern="${nexus-maven2-pattern}" m2compatible="true"/>

 <property name="nexus-maven2-pattern"
          value="[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"
          override="false" />

在 nexus 中,此工件已解析 (IBSCore-2.21-20160825.121144-2.jar),但此工件未解析 (IBSCore-2.21-20160825.121144-2-tests.jar)。

非常感谢您的帮助!

首先我猜这是一个带有快照修订版的模块?你在 ivy 中的依赖声明是什么样的?

这是我最好的猜测:

<dependency org="group.goes.here" name="IBSCore" rev="2.21-SNAPSHOT" />

其次,测试 jar 看起来像是一个额外的模块工件,在 Maven 中将使用 "classifier" 引用的东西,例如:

<dependency>
    <groupId>group.goes.here</groupId>
    <artifactId>IBSCore</artifactId>
    <version>2.21-SNAPSHOT</version>
    <classifier>tests</classifier>
</dependency>

因此,如果我是正确的,您可以通过在 ivy 依赖项中明确说明来检索这两个文件:

<dependency org="group.goes.here" name="IBSCore" rev="2.21-SNAPSHOT">
    <artifact name="IBSCore" type="jar" />
    <artifact name="IBSCore" type="jar" m:classifier="tests"/>
</dependency>

语法很奇怪,因为与 Ivy 不同,Maven 模块的元数据不会明确列出它包含的所有文件。当 Ivy 从 Maven 存储库下载时,它唯一支持的附加文件是源和 javadoc jar。更痛苦的细节,见:

  • How are maven scopes mapped to ivy configurations by ivy

问题的真正原因实际上是我有一些讨厌的 ant 任务执行以下操作:

 <target name="-do-resolve-ivy-dependencies" unless="ivy.cached">
    <ivy:resolve conf="default, test, test-utils" type="jar, war, bundle" log="download-only" checkIfChanged="false"/>
    <ivy:cachefileset setid="default.libs.id" conf="default" log="download-only"/>
    <ivy:cachefileset setid="test.libs.id" conf="test, test-utils" log="download-only"/>

    <path id="default.libs.path">
        <fileset refid="default.libs.id"/>
    </path>
    <path id="test.libs.path">
        <fileset refid="test.libs.id"/>
    </path>
</target>

所以类型 "test-jar" 没有解析。添加这个就成功了。