Mavenリリースプラグインが、依存関係管理のスナップショットバージョンを許可するのはなぜですか?
-
21-09-2019 - |
質問
1社の親POMがあります。これは、依存関係管理を使用して、使用されるすべてのアーティファクトのすべての依存関係に対してバージョンを管理します。
驚くべきことは、スナップショットバージョンを依存管理で定義できることです。 Mavenリリースが実行されると、POMは依存管理のスナップショットバージョンでリリースされることが許可されています。なんで?
子どものプロジェクトを、リリースバージョンの親POMに向け、この子プロジェクトは、Snapshotバージョンであるにもかかわらず、依存管理で定義された依存関係を使用している場合、子プロジェクトをリリースすることはできません。
Mavenは、依存管理で定義されたアーティファクトのスナップショットバージョンをリリースするのになぜ許可するのですか?また、スナップショットバージョンが定義されている場合、Mavenリリースプラグインを失敗するように構成するにはどうすればよいですか?
解決
驚くべきことは、スナップショットバージョンを依存管理で定義できることです。 Mavenリリースが実行されると、POMは依存管理のスナップショットバージョンでリリースされることが許可されています。なんで?
私は期待します Maven-Release-Plugin スナップショットバージョンを更新するには dependencyManagement
リリース時。実際、これについてはジラがあります。たとえば MRELEASE-91 と MRELEASE-202 それはあなたに影響を与えるかもしれません。
質問は、どのバージョンのプラグインを使用していますか?
しかし、正直に言うと、どのバージョンが影響を受けるかはあまり明確ではありません MRELEASE-202, 、コメントは混乱しています(そのため、問題が修正されているかどうかは疑問です)。とにかく、使用しているバージョンが影響を受ける場合、より最近のバージョンにアップグレードします。そして、バグ/回帰(バグだと思う)がまだそこにある場合は、新しい問題を提起します。
他のヒント
「なぜ」(個人的にはバグだと思います)についての答えはありませんが、これを防ぐ方法があります。MavenEnforcerプラグインを使用します。
電話をかける会社 スマートス (小文字)はルールを作成しました(nosnapshotdependencies IndependencyManagementRule)この正確な問題を防ぐため。
基本的には、親pomに次のものを追加する必要があります。
<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>