2012-04-13 2 views
0

아파치 -commons-collections 2.1에 의존하는 타사 라이브러리에 의존하는 모듈 X가 있습니다.두 버전의 Jar에 대한 종속성

모듈 X에서는 2.1보다 몇 가지 추가 방법이있는 최신 apache-commons-collections 3.0을 사용하고 싶습니다. 3.0에 의존성을 추가하면 클래스 로더가 클래스 패스에서 볼 수있는 첫 번째 클래스를 선택하기 때문에 문제가 발생합니다. 이 문제를 해결할 수있는 좋은 방법이 있습니까?

감사합니다, S

답변

0

그냥 프로젝트에 3.0 종속성을 추가하고 2.1 이전 버전의 이상을 선호합니다. 명시 적으로 제외를 추가 할 수 있습니다. 어쨌든 의존성 플러그인과 분석 및 트리 목표를 사용하여 어떤 일이 일어나고 있는지 확인하십시오.

짧은 이야기 ...이 모든 일이 항상 발생하며 문제가되지 않으며 어떤 경우 에든 제어 할 수 있습니다.

1

IMHO 실제로 (Java EE의 EAR 또는 OSGi와 같은) 모듈성을위한 추가 솔루션없이 좋은 방법입니다. 그러나 제 3 자 lib를 직접 사용하는 단순한 웹 (또는 아닌) 모듈에 대해 묻고있는 것 같습니다. 이 충돌을 수동으로 해결해야 할 것 같습니다. 사실 Maven은 commons-collections의 2 가지 버전을 제공하지 않으며 클래스 로더의 해상도에 의존하지 않고 종속성 그래프를 해결하고 POM의 선언을 염두에두고 버전을 선택합니다. 즉, commons-collections 버전 3.0에 대한 모듈 X 종속성을 선언하면이 선언이 일부 타사 라이브러리의 종속성보다 더 중요하므로 해당 버전이 사용됩니다.

자바 플랫폼 자체의 심각한 문제입니다. 유명한 JAR 지옥과 같은 문제가 있습니다. 불행히도, 당신과 제 3 자의 lib를 모두 만족시키는 버전을 선택하고 선언하는 것이 문제가됩니다 (commons-collections).