解决 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" 没有解析。添加这个就成功了。
我需要解决来自 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" 没有解析。添加这个就成功了。