考虑如下的ivy.xml:
<ivy-module version="2.0">
<info organisation="com.foo" module="FooBar" />
<dependencies>
<dependency org="net.sf.ehcache" name="ehcache-core" rev="2.2.0" />
<!--...-->
</dependencies>
</info>
</ivy-module>
当我运行Ivy时,它会获取EHCache的所有依赖项,甚至测试依赖项。具体来说,它试图引入Hibernate 3.5.1(在POM文件中,它被列为“测试”依赖项)。
如何阻止Ivy包含测试依赖项?我可以将它列为排除依赖项,但我不想为每个测试依赖项执行此操作。我是Ivy的新手,习惯了Maven做事的方式。我正在阅读有关配置但我不明白Maven的“范围”的这个方面如何映射到“配置”。
答案 0 :(得分:7)
您需要定义依赖项的配置,如:
<dependency org="net.sf.ehcache" name="ehcache-core" rev="2.2.0" conf="compile"/>
如果省略conf,则假设您的意思是conf =“*”,它将下载该依赖项的所有配置。
这是一个简单的例子:
<configurations>
<conf name="test" visibility="public" />
<conf name="compile" visibility="public" />
</configurations>
<publications>
<artifact name="${project.name}" type="jar" conf="compile" ext="jar"/>
<artifact name="${project.name}-test" type="jar" conf="test" ext="jar"/>
</publications>
<dependencies>
<!-- COMPILE -->
<dependency org="log4j" name="log4j" rev="1.2.14" conf="compile->*"/>
<dependency org="apache" name="commons-net" rev="2.0" conf="compile->*"/>
<dependency org="itext" name="itext" rev="1.4.6" conf="compile->*"/>
<dependency org="jsch" name="jsch" rev="0.1.29" conf="test->*"/>
<!-- TEST -->
</dependencies>
在这个例子中,jsch将包含在测试和编译配置中。
如果稍后使用conf =“compile”解决此依赖关系,您将获得除jsch之外的所有依赖项。 如果使用conf =“test”解决此依赖关系,则只能获得jsch。
如果测试会扩展编译,你会得到所有的罐子。
<configurations>
<conf name="test" visibility="public" extends="compile" />
<conf name="compile" visibility="public" />
</configurations>