maven 패키지 충돌 해결 방법 상세 설명

2440 단어 maven포괄 충돌
Maven 은 최근 승리 전략(nearest wins strategy)의 원칙 에 따라 작업 하고 의존 충돌 을 해결 합 니 다.이 는 의존 트 리 에서 더 가 까 운 버 전 을 찾 고 이 버 전 을 사용 하 며 다른 버 전 을 무시 하 는 것 을 의미 합 니 다.실제로 Maven 은 게 으 르 기 때문에 의존 도 를 찾기 시작 할 때마다 루트 디 렉 터 리 부터 나 무 를 옮 겨 다 닙 니 다.어떤 버 전 을 찾 았 든 간 에 선택 하고 더 이상 돌아 오지 않 습 니 다.의존 버 전 을 더 찾 으 면 업 데 이 트 된 버 전 을 유기 적 으로 찾 을 수 있 지만 첫 번 째 로 발 견 된 버 전 으로 되 돌아 가 기 존 버 전 으로 의존 관 계 를 해결 할 수 있 습 니 다.
의존 트 리 를 아래 명령 으로 표시 할 수 있 습 니 다:

mvn dependency:tree
솔직히 이것 은 Maven 의 잘못 이 아니다.왜냐하면 그것 은 가능 한 한 빨리 이 일 을 완성 하고 싶 기 때문이다.가장 중요 한 것 은 Maven 이 당신 의 응용 프로그램 이 어떤 버 전 을 원 하 는 지 모 르 기 때문에 Maven 은 당신 에 게 알려 줄 것 입 니 다.헤 이,당신 은 나 에 게 당신 이 어떤 버 전 을 원 하 는 지 알려 줄 책임 이 있 습 니 다.만약 당신 이 나 에 게 알려 주지 않 는 다 면 나 는 자신의 방식 으로 일 할 것 입 니 다.즉,더 가 까 운 것 이 좋 습 니 다.
이 글 의 github 소스 코드 를 다운로드 하 십시오.
https://github.com/yujiaao/maven-dependency-conflict-demo
프로젝트-A 와 프로젝트-B,프로젝트-A 는 프로젝트-common 의 1.0 버 전에 의존 하고 그 중의 sayHello()방법 을 호출 하 는 웹 응용 프로그램 resolve-web 이 있 습 니 다.procject-B 는 procject-C 에 의존 하고 procject-C 는 procject-comon 의 2.0 버 전에 의존 하 며 그 중의 sayGoodBye()방법 을 호출 합 니 다.procject-comon 의 1.0 과 2.0 버 전 은 다 릅 니 다.1.0 에는 sayHello()방법 이 포함 되 어 있 고 2.0 에는 sayHello()와 sayGoodBye()두 가지 방법 이 포함 되 어 있 습 니 다.전체 항목 의 의존 관 계 는 다음 그림 과 같다.

Maven 의 transitive 의존 체제 에 따라 resolve-web 는 procject-comon 의 1.0 과 2.0 버 전에 동시에 의존 하여 의존 충돌 을 초래 할 것 이다.최근 승리 전략 에 따 르 면 Maven 은 procject-comon 의 1.0 버 전 을 최종 의존 으로 선택 할 것 이다.
Gradle 과 달리 Gradle 은 기본적으로 최신 버 전 을 승리 버 전 으로 선택 합 니 다.
한편,Maven 에 대해 서 는 proejct-comon 의 1.0 버 전이 2.0 버 전보 다 의존 트 리 에서 resolve-web 와 가 까 워 1.0 버 전이 이 겼 다.resolve-web 에서 mvn dependency:tree-Dverbose 를 실행 하면 resolve-web 의 의존 관 계 를 볼 수 있 습 니 다.

[INFO] resolve-web:resolve-web:war:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:3.8.1:test
[INFO] +- project-B:project-B:jar:1.0:compile
[INFO] | \- project-C:project-C:jar:1.0:compile
[INFO] |   \- (project-common:project-commmon:jar:2.0:compile - omitted for conflict with 1.0)
[INFO] +- project-A:project-A:jar:1.0:compile
[INFO] | \- project-common:project-commmon:jar:1.0:compile
[INFO] \- javax.servlet:servlet-api:jar:2.4:provided
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기