2013-04-24 1 views
0

동일한 클래스가 모두 포함 된 두 개의 다른 병이있는 프로젝트가 있습니다. Jar "B"앞에 Jar "A"의 클래스를 사용하는 것이 필요합니다. 일반적인 자바 컴파일 (Ant와 함께)에서는 클래스 경로 자체의 순서를 지정할 수 있습니다. 이 방법으로, Jar "A"의 클래스가 Jar "B"의 클래스보다 먼저 사용된다는 것을 보증 할 수 있습니다.Ivy - Ivy에서 컴파일/런타임 클래스 경로 지정

아이비에서이 작업을 수행 할 수있는 방법이 있습니까? 내가 할 수있는,

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

다음 <javac/>에 :

<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 참조 : 나는이 일을 생각할 수

있는 유일한 방법은 내 ivy.xml에 두 개의 분리 된 구성을 만드는 것입니다 경로를 지정하십시오 :

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

그러나 Ivy가 해결을 수행 할 때 jar가 클래스 경로에로드되는 방식을 보장하는 방법이 있어야한다고 가정합니다.

이 방법이 있습니까?

+0

당신의 해결책은 좋아 보인다. 솔직히 말해서 나는 (클래스 패스에서 같은 클래스를 혼합하는) 그 문제에 결코 직면 해본 적이 없다. 나는 이것이 이상한 제 3 자 포장 문제라고 생각하고 있나? –

+0

@ MarkO'Connor - 위에서 언급 한 방식대로이 작업을 끝내 었습니다. 새 구성을 작성하여 해당 항아리를 먼저 배치 할 수 있습니다. 개발자가 문제를 해결했습니다. 구식의 jar의 클래스는, 메소드를 열거자를 돌려주는 것으로서 처리해, 새로운 Jar의 클래스는,이 메소드를 반복자를 돌려주는 것으로서 처리했습니다. 2 개 또는 3 개의 소스 파일을 약간 수정하여 수정했습니다. 물론 개발자는 문제를 수정했지만 컴파일되지 않아서 제대로 작동하는지 확인하지 못했습니다. 쓸데없는 항아리 클래스가 사용 중이기 때문에 컴파일 할 수 없습니다. 나는 고칠 수밖에 없었다. –

답변

1

모든 Ivy Ant 작업과 IvyDE조차도 ivy.xml 파일의 종속성 선언 순서를 준수합니다. 따라서 ivy.xml에서 b.jar 이전에 a.jar에 대한 종속성을 선언하면 결과 클래스 경로에 a.jar first와 b.jar after가 생깁니다.

+0

정보를 제공해 주셔서 감사합니다. 이것이 사실 일지 확실하지 않았습니다. 어디에서나이 정보를 찾을 수 없었습니다. 다행히 개발자는 형식을 열거 자 대신 _iterator_로 선언하여이 문제를 해결했으며 더 이상 사용되지 않는 jar에 대한 종속성을 제거했습니다. –