2011-04-12 69 views
3

考慮一個的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> 

當我運行常春藤,這對於獲取的EHCache所有的依賴,甚至測試的依賴。具體來說,它試圖引入Hibernate 3.5.1(在POM文件中,它被列爲「測試」依賴項)。

如何防止常春藤包含測試依賴項?我可以將它列爲排除的依賴項,但我不想爲每個測試依賴項都執行此操作。我是常春藤新手,習慣了Maven做事情的方式。我正在閱讀配置,但我不明白Maven的「範圍」如何映射到「配置」。

回答

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>