2012-12-06 6 views
0

두 개의 프로젝트가 있습니다 :
A ---- lib가 있습니다. 1.3.7 --- (B에 따라 다름)
B ----는 lib commons vers를가집니다. 1.2.5종속성 버전 충돌 빌드

그래서 우리는 프로젝트 B, lib commons vers을 만들고 있습니다. 1.2.5가 포함되어 로컬 저장소에 설치되고 그 다음에 ... M 빌드가 A의 빌드 (B에 의존 함)를 실행하면 Maven은 lib가 공유한다는 것을 결정합니다. lib가 트리의 루트로부터 최소 거리에 있기 때문에 1.3.7을 포함해야합니다 ... 권장 버전 인 1.2.5와 같은 이슈 버전을 설정하면 알 수 있습니다. 그러나 우리가 그것을 []에 넣는다면, 그것은 어려운 요구 사항이며, 버전 충돌을 해결하기위한 또 다른 전략을 적용해야한다. - 그 아티펙트의 권장 버전을 포함해야한다. 그러나 Maven이 loc 저장소에서 유물을 가져 오므로 lib의 commons vers에 대한 참조가 포함되어 있기 때문에 내가 그것을하려고하면, 그것은 작동하지 않습니다. 매니페스트 파일에서 1.2.5, 포함되는 lib - commons vers. 1.3.7. 이 문제를 해결할 수있는 방법을 알려 주시고, 목록에서 해당 충돌에 대해 알 수있는 몇 가지 도구 또는 메이븐 플러그인이 있는지 알려주십시오.

답변

1

실행해야합니다. 뭐 그런 (그 단지 샘플) : 이클립스를 사용하고 손으로 그것을하지 않으려면

<dependency> 
<groupId>org.springframework.integration</groupId> 
<artifactId>spring-integration-amqp</artifactId> 
<version>2.1.0.RELEASE</version> 
<exclusions> 
    <exclusion> 
     <artifactId>spring-beans</artifactId> 
     <groupId>org.springframework</groupId> 
    </exclusion> 
</exclusions> 
</dependency> 

, 당신이 치어 파일을 열고는 '종속성 계층 구조'탭을 선택하여 작업을 수행 할 수 있습니다 아래에서 모든 종속 계층 구조를 볼 수 있습니다. 그런 다음 제외시킬 종속성을 마우스 오른쪽 버튼으로 클릭 한 다음 'Maven 아티팩트 제외'를 클릭하십시오.

+0

@jonasas, 프로젝트를 빌드하는 동안 프로젝트 B가 공유 라이브러리없이 포함될 것입니다. 하지만 그건 해결책이 아닙니다. 사실 프로젝트 A는 프로젝트 B에 대해 아무 것도 모릅니다. 메이븐 (maven)은 B.jar에 commons vers를 제공합니다. MANIFEST 파일에서 1.2.5이지만 "가장 가까운 승리"전략 때문에 Maven은 lib가 다른 것을 결정합니다. 1.3.7이 포함되어야한다. 그게 문제 야. – gizzy

+0

1.3.7 버전을 사용하고 싶지 않고 종속 프로젝트의 버전 (1.2.5)을 사용하려면 프로젝트 A에서 직접 의존성을 제거 할 수 없습니까? – jonasnas

0

당신은 당신은 의존성에 제외를 사용할 필요가 mvn dependency:tree