让Ivy不要包含测试依赖项

时间:2011-04-12 18:46:38

标签: ivy

考虑如下的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的“范围”的这个方面如何映射到“配置”。

1 个答案:

答案 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>