2016-10-20 3 views
1

두 개의 타사 라이브러리를 사용하는 프로젝트가 있습니다. 그리고이 두 가지는 모두 org.eclipse.jetty를 사용하지만 완전히 다른 버전입니다. 그 나무는 다음과 같습니다 :Maven, 호환되지 않는 버전의 lib를 사용하는 두 번째 타사

[INFO] +- com.some.package:my-core-lib:jar:1.0-SNAPSHOT:compile 
[INFO] | \- org.apache.samza:samza-core_2.10:jar:0.9.1:compile 
[INFO] |  \- org.eclipse.jetty:jetty-webapp:jar:8.1.8.v20121106:compile 
[INFO] |  +- org.eclipse.jetty:jetty-xml:jar:8.1.8.v20121106:compile 
[INFO] |  | \- org.eclipse.jetty:jetty-util:jar:8.1.8.v20121106:compile 
[INFO] |  \- org.eclipse.jetty:jetty-servlet:jar:8.1.8.v20121106:compile 
[INFO] |   \- org.eclipse.jetty:jetty-security:jar:8.1.8.v20121106:compile 
[INFO] |    \- (org.eclipse.jetty:jetty-server:jar:8.1.8.v20121106:compile - omitted for conflict with 9.2.18.v20160721) 
[INFO] \- come:third-party-two:jar:2.0.3:compile 
[INFO] +- org.eclipse.jetty.websocket:websocket-client:jar:9.2.18.v20160721:compile 
[INFO] | +- org.eclipse.jetty:jetty-io:jar:9.2.18.v20160721:compile 
[INFO] | \- org.eclipse.jetty.websocket:websocket-common:jar:9.2.18.v20160721:compile 
[INFO] |  \- (org.eclipse.jetty:jetty-io:jar:9.2.18.v20160721:compile - omitted for duplicate) 
[INFO] +- org.eclipse.jetty:jetty-server:jar:9.2.18.v20160721:compile 
[INFO] | +- org.eclipse.jetty:jetty-http:jar:9.2.18.v20160721:compile 
[INFO] | \- (org.eclipse.jetty:jetty-io:jar:9.2.18.v20160721:compile - omitted for duplicate) 
[INFO] \- org.eclipse.jetty.websocket:websocket-server:jar:9.2.18.v20160721:compile 
[INFO]  \- (org.eclipse.jetty:jetty-http:jar:9.2.18.v20160721:compile - omitted for duplicate) 

나는이 두 당사자에게 의존성을 변경하도록 요청할 수 없습니다. 올바른 버전을 사용하도록 할 수있는 방법이 있습니까? 감사합니다.

+1

동일한 이슈의 두 버전에 따라 [Maven 프로젝트]가 중복 될 수 있습니다. (http://stackoverflow.com/questions/27147660/maven-project-depending-on-two-versions-of-the-same-artifact) – Joe

답변

0

일반적으로 Maven에는 특정 종속성의 한 버전 만있을 수 있습니다. 그래서 무엇보다 먼저 모든 버전에 맞는 버전을 찾을 수 있는지 알아보기 위해 다른 버전의 jetty로 프로그램을 컴파일하고 테스트해야합니다 (최신 버전부터 시작). dependencyManagement 섹션에 버전을 설정하여이 작업을 수행 할 수 있습니다.

이 아닌 경우을 찾으면 문제가 발생합니다. 어떤 트릭을 사용하면 두 항아리를 모두로드 할 수 있지만 같은 이름의 클래스가있는 경우 (가능한 경우) 클래스 로더는 그 중 하나만로드 할 수 있습니다. 클래스의 이름을 바꾸는 데 사용할 수있는 도구가있을 수 있지만 이는 매우 지저분해질 수 있습니다.