2013-04-24 232 views
0

/運行時類路徑我有了,二者含有一些相同的類的兩種不同的罐子的項目。我需要的是使用Jar「B」之前的Jar「A」中的類。在普通的Java編譯(和Ant)中,我可以指定類路徑本身的順序。這樣,我可以保證Jar「A」中的類將在Jar「B」中的類之前使用。常春藤 - 指定編譯常春藤

有沒有辦法在常春藤做到這一點?

我能想到這樣做的唯一方法是在我ivy.xml創建兩個單獨的配置:

<dependency org="com.vegibank" name="a.jar" 
    rev="1.0" conf="foo->default"/> 

<dependency org="com.vegibank" name="b.jar" 
    rev="1.0" conf="compile->default"/> 

然後創建兩個單獨的pathclass引用:在<javac/>

<ivy:cachepath pathid="compile.foo.classpath" 
    conf="foo"/> 
<ivy:cachepath pathid="compile.normal.classpath" 
    conf="compile"/> 

然後,我可以指定路徑:

<javac ...> 
    <classpath refid="compile.foo.classpath"/> 
    <classpath refid="compile.normal.classpath"/> 
</javac> 

但是,我認爲當艾維正在做出決定時,必須有一種方法來保證罐子被加載到類路徑中的方式。

有沒有辦法做到這一點?

+0

您的解決方案看起來不錯。說實話,我從來沒有遇到過這個問題(在classpath中混合相同的類)。我假設這是一些奇怪的第三方包裝問題? – 2013-04-24 21:00:39

+0

@ MarkO'Connor - 我弄成這樣做我上面提到的方法:創建一個新的配置,所以我可以強制罐子是第一。開發商最終解決了這個問題。過時的jar類將該方法視爲返回一個枚舉器,新的jar類將該方法視爲返回一個迭代器。它在兩個或三個源文件中進行了一些小修改來修復它。當然,開發者會固定這個問題,但從來沒有編譯過,以確保它能正常工作。它無法編譯,因爲使用了過時的jar類。我不得不解決我的問題。 – 2013-04-25 15:15:08

回答

1

每常春藤Ant任務,甚至IvyDE是尊重在ivy.xml文件的依賴關係的聲明的順序。因此,如果在你的ivy.xml中你在b.jar之前聲明瞭對a.jar的依賴,那麼得到的類路徑將首先是a.jar,而後面是b.jar。

+0

感謝您的信息。我不確定這是否一定是真的。我無法在任何地方找到這些信息。幸運的是,開發者通過聲明的類型作爲_iterator_而不是一個枚舉修復了這個問題,並淘汰過時的罐子的依賴。 – 2013-04-29 02:26:23