일부 레거시 코드를 새 버전으로 이식하는 중입니다. 1.5x 버전이 1.6x 및 1.7x와 호환되지 않는 특정 모듈 (slf4j)은 내 프로젝트가 의존하는 프로젝트가 클래스 패스에 jar로 포함되어 있습니다. 이러한 문제를 해결할 수있는 방법이 있습니까?maven에서 전이 종속성 제거
답변
가있는 경우 치어 메이븐에서 직접 의존성이 그것을 사용하고 동일한 유물에 어떤 이적 종속성을 생략 할 것이다 예를 들어 여기
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
낙타 코어가있는 전이 의존성 SLF4J-API-1.6.6하지만, Maven은 slf4j-api-1.7.5를 선택할 것입니다.
이게 옳은지 확실하지 않습니다. 동일한 시도했습니다. 내 프로젝트 POM에 slf4j의 최신 버전이 추가되었습니다. 여전히 호환성 문제가 발생합니다. 이것은 sl4j의 경우 일 수도 있지만 확실하게 말할 수는 없습니다. – user1801279
Eclipse에서 쉽게 확인할 수 있습니다. "dependency hierarchy"탭 –
옙 mvn dependency : 트리는 프로젝트에 새 버전을 연결 했더라도 의존성이 여전히 어떻게 몰래 움직 였는지 추론하는 데 사용되었습니다. – user1801279
내 문제를 해결하는 방법은 내 프로젝트가 의존하는 프로젝트를 재배포하는 것입니다. 항아리 였기 때문에 필자는 그것을 maven 형식으로 다시 만들고 그 수준에서 모든 전이 의존성을 막기 위해 필요한 제외 구문을 추가해야했습니다. 이것은 모범 사례는 아니지만 제 경우에는 효과가있을 수 있습니다. 나는 프로젝트의 최신 버전이 모든 maven 기반의 제외 태그로 충분해야한다고 생각한다.
그래서 프로젝트는 SLF4J의 1.5.x 버전에 달려있다. 그 맞습니까? – Vidya
예, 1.5x와 역 호환되지 않는 1.6x 및 1.7x 버전을 사용할 계획입니다. 내가 (작업중인 프로젝트의) 전쟁을 할 때마다 전 이적 종속성으로 인해 사용되는 다른 버전으로 인해 존재하는 비 호환성으로 인해 실패합니다. – user1801279