考虑如下的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时,它会获
<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的“范围”的这个方面如何映射到“配置”.
您需要定义依赖项的配置,如:<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.
如果测试会扩展编译,你会获得所有的jar.
<configurations> <conf name="test" visibility="public" extends="compile" /> <conf name="compile" visibility="public" /> </configurations>