2014-11-17 3 views
2

상위 버전의 가져온 dependencyManagement 섹션에 라이브러리 버전을 지정했습니다. 나는 효과적인 pom이이 의존성을 한 번만 경험했다는 것을 확인했다. 종속성 관리 섹션에 있습니다 :종속성 관리 섹션을 무시합니까?

<dependencyManagement> 
    <dependency> 
     <groupId>org.javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>[3.18.1-GA]</version> 
    </dependency> 
</dependencyManagement> 

종속성 종속성에 따라 버전을 재정의해야합니다. 받는다는 - 종속성 - 플러그인 : 2.8 : 나무 인쇄 : 설치 (및 버전 범위를 일치하도록 종속 다시 설치), org.apache.maven.plugins 후 (종속성을 다시 설치하지 않고, 원래)

org.javassist:javassist:jar:3.18.1-GA:compile (version selected from constraint [3.18.1-GA,3.18.1-GA]) 

그러나이 감독 당국에 대한 잘못된 불평 버전 :

[WARNING] Rule 1: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message: 
Failed while enforcing releasability the error(s) are [ 
Dependency convergence error for org.javassist:javassist:3.18.2-GA paths to dependency are: 
... 

그리고 먼저 전이 의존성이 차례로에 의존하는 의존에서 오는

org.javassist:javassist:3.18.2-GA 

를 사용하는 것을 보여줍니다 :

<dependencies> 
    <dependency> 
     <groupId>org.javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.18.2-GA</version> 
    </dependency> 
</dependencies> 

다른 용도

org.javassist:javassist:3.18.1-GA 

왜 종속성 트리와 일치 시행자는? 무엇이 잘못 될 수 있습니까? 버전 범위를 사용하는 경우이를 존중합니까?이 목적을 위해 시행자를 사용하여 건너 뛸 수 있습니까?

또한 프로젝트 모듈에 대한 종속성을 추가해도 아무런 변화가 없습니다.

답변

2

T1 내지, 박사이 대답을 이행 종속성

모든 신용 버전을 무시 dependencyManagement은 그의 블로그 포스트 내가 우연히 앤디 Dennie로 이동 :
http://andydennie.com/2012/08/02/maven-enforcer-plugin-vs-dependencymanagement/

dependencyManagement 두 가지를 수행합니다 - 그 중 하나는 잘 알려져 있고 다른 하나는 거의 언급되지 않았습니다.

  1. 이 서브 모듈의 의존성에 대한 기본 버전을 설정/아이는
  2. 재정을 이행 종속

의 버전 그래서 감독 당국의 플러그인이 dependencyManagement을 무시하지 않는 프로젝트. 그러나 이전 버전의 종속성 버전이 작동하기 전에 버전이 변경되었으므로 불일치를 인식 할 수 없습니다.

  1. 내 최상위 POM의 dependencyManagement 섹션에서 종속성을 넣지 마십시오 : 앤디 데니 진행 방법에 대한 자신의 블로그에 좋은 제안이있다. 필자는 불일치가있을 때 maven-enforcer-plugin에 경고를 받고 싶습니다. 대신, 위의 내 접근 # 1에서 언급 한 것처럼 버전 속성을 사용합니다.
  2. maven-enforcer-plugin이 불일치를 알려주면 같은 버전의 분기 종속성을 사용하도록 관련된 아티팩트를 얻을 수 있는지 확인하려고합니다. 관계된 모든 종속성이 내 자체 아티팩트에 포함되어 있다면, 나는 같은 버전의 의존성에 정렬되도록 노력한다.일부 아티팩트가 제 3 자이고 일부가 제 3자인 경우, 제 3 자와의 종속성을 조정하거나 서로 정렬 된 종속성 버전이있는 타사 아티팩트의 다른 버전과 코드를 찾습니다.
  3. 위와 같은 작업을 수행 한 후에도 여전히 해결할 수없는 불일치가있는 경우 문제가되는 이슈의 "최적"버전을 선택하고 프로젝트 POM의 pluginManagement 섹션에 maven-enforcer-plugin이보고 한 내용을 지정합니다. 문제 (내 최상위 POM 없음). 해당 POM의 종속성 선언에 주석을 추가하여 문제 및 해결 방법을 언급하므로 향후에 종속성의 최신 버전으로 업그레이드해야합니다. 참고 사항을 확인하고 그 불일치 가능성을 다시 확인할 수 있습니다. 해결되다.

절충 여기 당신이 의존성 지옥 당신을하는 데 도움이되는 작업 집행자 플러그인을 가지고 있지만, 손으로 더 많은 일을해야한다는 것입니다.