5

우리는 1 개의 부모가 있습니다. dependencyManagement를 사용하여 사용 된 모든 아티팩트의 모든 종속성에 대한 버전을 관리합니다.maven release plugin이 왜 SNAPSHOT 버전을 종속성 관리에서 허용합니까?

놀라운 점은 SNAPSHOT 버전을 dependencyManagement에서 정의 할 수 있다는 것입니다. maven release가 수행 될 때, pom은 dependencyManagement에서 SNAPSHOT 버전으로 해제 될 수 있습니다. 왜?

자식 프로젝트를 회사 부모 pom의 출시 버전으로 가리키고이 자식 프로젝트가 SNAPSHOT 버전이지만 dependencyManagement에 정의 된 종속성을 사용하는 경우 하위 프로젝트를 릴리스 할 수 없습니다.

dependencyManagement에 정의 된 이슈에 대해 Maven에서 SNAPSHOT 버전을 릴리스 할 수있는 이유는 무엇입니까? SNAPSHOT 버전이 정의되어있는 경우 maven release plugin이 실패하도록 어떻게 구성 할 수 있습니까?

답변

3

놀라운 점은 SNAPSHOT 버전을 dependencyManagement에서 정의 할 수 있다는 것입니다. maven release가 수행 될 때, pom은 dependencyManagement에서 SNAPSHOT 버전으로 해제 될 수 있습니다. 왜?

은 내가 maven-release-plugin이 릴리스에 따라 dependencyManagement에 SNAPSHOT 버전을 업데이트하는 기대. 실제로, 이것에 관한 Jira가 있습니다 (예 : MRELEASE-91MRELEASE-202).

그래서 질문은 : 어떤 플러그인 버전을 사용하고 있습니까?

그러나 솔직히 말해서 어떤 버전이 MRELEASE-202의 영향을받는지는 분명하지 않습니다. 의견이 혼란 스럽습니다 (문제가 해결되었는지 아닌지 궁금합니다). 어쨌든, 사용중인 버전이 영향을받는다면 최신 버전으로 업그레이드하십시오. 버그/회귀 (버그라고 생각합니다)가 아직 남아 있다면 새로운 문제를 제기하십시오.

+0

들으 :

당신은 기본적으로 당신의 부모 POM에 다음을 추가해야합니다. 우리는 2.0-beta-9를 사용하고 있습니다. 우리는이 jira 티켓을 살펴볼 것입니다 – joshjdevl

+0

이 문제에 대한 새로운 JIRA [MRELEASE-454] (https://issues.apache.org/jira/browse/MRELEASE-454). 2.2.2에서 수정 된 것처럼 보이지만 적어도 2.4에서는 다시 도입되었습니다. – Tunaki

0

'이유'(개인적으로 버그라고 생각합니다.)에 대한 답변이 없지만 이러한 상황을 방지 할 수있는 방법이 있습니다. Maven Enforcer 플러그인을 사용하십시오.

이 정확한 문제를 방지하기 위해 smartics (소문자 s)이라는 회사가 규칙 (NoSnapshotDependenciesInDependencyManagementRule)을 만들었습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.4.1</version> 
    <executions> 
    <execution> 
     <id>enforce-project-rules</id> 
     <phase>test</phase> 
     <goals> 
     <goal>enforce</goal> 
     </goals> 
     <configuration> 
     <rules> 
      <NoSnapshotDependenciesInDependencyManagementRule 
      implementation="de.smartics.maven.enforcer.rule.NoSnapshotsInDependencyManagementRule"> 
      <onlyWhenRelease>true</onlyWhenRelease> 
      <checkOnlyResolvedDependencies>false</checkOnlyResolvedDependencies> 
      </NoSnapshotDependenciesInDependencyManagementRule> 
     </rules> 
     </configuration> 
    </execution> 
    </executions> 
    <dependencies> 
    <dependency> 
     <groupId>de.smartics.rules</groupId> 
     <artifactId>smartics-enforcer-rules</artifactId> 
     <version>1.0.2</version> 
    </dependency> 
    </dependencies> 
</plugin>