[maven] 멀티 모듈 Maven 프로젝트에서 모듈의 버전 번호 업데이트

멀티 모듈 maven 프로젝트가 있습니다. 우리는이 모든 모듈을 함께 버전 화하려고합니다. 그러나 지금은 아래와 같이 각 모듈 pom.xml에서 하드 코딩 버전을 끝내고 있습니다.

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>

기본 상위 모듈의 구성은 다음과 같습니다.

<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>



답변

versions-maven 플러그인versions:set 에서 사용하십시오 .

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT

다중 모듈 프로젝트에서 모든 pom 버전, 상위 버전 및 종속성 버전을 조정합니다.

실수를했다면

mvn versions:revert

나중에 또는

mvn versions:commit

결과에 만족한다면.


참고 :이 솔루션은 모든 모듈이 집계 pom을 부모 pom으로 사용한다고 가정합니다.이 답변은 당시 표준으로 간주되었습니다. 그렇지 않은 경우 Garret Wilson의 답변으로 이동하십시오 .


답변

주어진 답변은 해당 프로젝트가 모듈 집계 외에도 프로젝트 상속을 사용한다고 가정합니다. 실제로 이들은 고유 한 개념입니다.

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation

일부 프로젝트는 모듈의 집계 일 수 있지만 집계 자 POM과 집계 된 모듈간에 상위-하위 관계가 없습니다. 부모-자식 관계가 전혀 없거나 하위 모듈이 모두 “부모”로 별도의 POM을 사용할 수 있습니다. 이러한 상황에서는 주어진 답변이 작동하지 않습니다.

많은 독서와 실험 끝에 Versions Maven Plugin 을 사용하여 애그리 게이터 POM뿐만 아니라 모든 집계 된 모듈도 업데이트 할 수있는 방법이 있습니다 . 그것은이다 processAllModules옵션을 선택합니다. 수집기 프로젝트의 디렉토리에서 다음 명령을 수행해야합니다.

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules

Versions Maven Plugin은 포함 된 모든 모듈의 버전을 업데이트 할뿐만 아니라 모듈 간 종속성도 업데이트합니다! 이것은 큰 승리이며 많은 시간을 절약하고 모든 종류의 문제를 방지합니다.

물론 모든 모듈에서 변경 사항을 커밋하는 것을 잊지 마십시오. 동일한 스위치로 수행 할 수도 있습니다.

mvn versions:commit -DprocessAllModules

백업 POMS를 모두 사용하지 않고 하나의 명령으로 모든 작업을 수행 할 수 있습니다.

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false


답변

프로세스를 완전히 자동화하려면 (즉, 현재 버전 번호가 무엇인지 알 필요없이 버전 번호를 늘리려면) 다음을 수행하십시오.

mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit


답변

Maven 릴리스 플러그인의 release : update-versions 목표 를 살펴볼 수 있습니다 . 부모의 버전과 그 아래의 모든 모듈을 업데이트합니다.


업데이트 : 위의 릴리스 플러그인입니다. 출시하지 않을 경우 사용할 수 있습니다versions:set

mvn versions:set -DnewVersion=1.2.3-SNAPSHOT


답변

멀티 모듈 (리액터) 빌드에 대한 Maven Book 을 읽으십시오 .

나는 특히 다음을 의미했다.

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>

로 변경해야합니다. 여기서 정의되지 않은 버전은 정의 된 상위 부분에만주의하십시오.

<modelVersion>4.0.0</modelVersion>

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>

이것은 더 나은 링크입니다 .


답변

versions:update-child-modules당신이 찾고있는 것처럼 들립니다. 언급 한대로 버전 : 세트를 수행 할 수 있지만 이것은 상위 버전 번호를 업데이트하는 간단한 방법입니다. 자식 모듈의 <version>경우 부모 모듈의 버전 번호를 상속하므로 정의를 제거해야한다고 생각합니다 .


답변

가장 좋은 방법은 모듈을 함께 묶으려고하므로 <dependencyManagement>태그 pom.xml아래 가장 바깥 쪽 (상위 모듈)에 직접 태그를 지정할 수 있습니다 <project>. 버전 및 그룹 이름을 제어합니다. 개별 모듈에서는에 <artifactId>태그 를 지정하면 pom.xml됩니다. 부모 파일에서 버전을 가져옵니다.