2014-07-07 4 views
1

저는 회사에서 내부적으로 사용할 응용 프로그램을 개발 중입니다. 다른 내부 시스템과 상호 작용하려면 내부적으로 사용하는 일부 종속성을 사용해야하지만 외부에서 필요한 타사 종속성을 사용하는 데 문제가 발생합니다. Maven : 중복 의존성 해결

그래서 기본적으로 내 치어는 다음과 같습니다

<dependencies> 
    <dependency> 
     internal-framework-artifact 
    </dependency> 

    <dependency> 
     necessary-third-party-artifact 
    </dependency> 
</dependencies> 

내가 이러한 종속성 모두 가지고 찾아 왔어요 아파치의 commons-collections 자신의 종속성 중 하나로서 (다른 사람의 많은 수의 사이,하지만 우리 이 질문의 단순성을 위해 하나에 보관하십시오). 나는 commons-collections 치어 그들 모두에 제외 규칙을 배치하면

것은 내가 프로젝트를 컴파일 할 수 있습니다,하지만 내 결과 항아리 commons-collections의 버전 중 하나에 액세스 할 수 없습니다 단지 java.lang.NoClassDefFoundError 예외가 발생합니다. 그들 중 하나에 제외 규칙을 제거하는 것은 단지 MVN 컴파일러 오류가 발생합니다 :

[WARNING] Rule 2: org.apache.maven.plugins.enforcer.BanDuplicateClasses failed with message: Duplicate classes found:

나는 다양한 그래서 Q/A의를 통해 찾아 봤는데와 정말 100 % 관련이 뭔가를 찾을 수 없습니다 내 상태. 이 문제를 해결하는 방법에 관해서는 정말 실망 스럽습니다. 나는 정말 분명한 것을 놓치고 있는가?

+0

내가 언급 한 것처럼, 그것들 중 하나에서 제외하면 위에 인용 한 maven 오류가 발생합니다. 왜 또는 무엇을해야할지 모르겠습니다. 그것은 정말로 나의 질문의 핵심이다. –

+0

이'mvn dependency : tree -Doutput =/path/to/file'을 실행하고 그 결과를 조사 할 것을 제안합니다. – BevynQ

+1

두 가지 모두에 대한 제외 사항을 추가하여 공유 컬렉션에 대한 자신의 종속성을 시도 했습니까? 이것은 컴파일해야하고 항아리를 행복하게 유지해야합니다. 이로 인해 런타임 오류가 발생하면 하나 또는 다른 프레임 워크를 업그레이드해야 할 수 있습니다. – kiwiron

답변

1

실제로는 음영 처리를 위해 maven-shade-plugin을 사용한 적이 없지만, 이것이 설계된 정확한 사용 사례라고 생각합니다. 그 internal-framework-artifact의 클래스 및 모든 종속성을 포함 internal-framework-artifact의 동네 짱 - 항아리 버전을 생산하기 위해 :

maven-shade-plugin을 ( http://maven.apache.org/plugins/maven-shade-plugin/ 참조)를 사용하는 새 프로젝트를 만듭니다. necessary-third-party-artifact의 종속성을 갖는 모든 클래스를 충돌하지 않는 패키지 이름으로 재배치하도록 플러그인을 구성하십시오. 이 새로운 프로젝트는 internal-framework-artifact-with-dependencies과 같은 다른 이름의 .jar 파일을 만들어야합니다.

이제 원래의 폰을 internal-framework-artifact-with-dependencies에 종속되도록 수정하십시오. 그러면 작동합니다.