2013-04-24 138 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