オンラインのさまざまな場所で、Maven ビルドを再現可能にするには、使用するすべてのプラグインのバージョン番号を明示的に指定して、新しいプラグインがビルドを壊さないようにすることが重要であるという議論を見てきました。推奨されるアプローチは、エンフォーサ プラグインを使用することのようです。以下は、オンラインで見つけた設定をコピーして貼り付けたものです。
<execution>
<id>enforce-plugin-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requirePluginVersions>
<message>Best Practice is to always define plugin versions!</message>
<banLatest>true</banLatest>
<banRelease>true</banRelease>
<banSnapshots>true</banSnapshots>
<phases>clean,deploy,site</phases>
<additionalPlugins>
<additionalPlugin>org.apache.maven.plugins:maven-eclipse-plugin</additionalPlugin>
<additionalPlugin>org.apache.maven.plugins:maven-reactor-plugin</additionalPlugin>
</additionalPlugins>
<unCheckedPluginList>org.apache.maven.plugins:maven-enforcer-plugin,org.apache.maven.plugins:maven-idea-plugin</unCheckedPluginList>
</requirePluginVersions>
</rules>
</configuration>
</execution>
pom を実行すると、enforcer プラグインから次のエラーが表示されます。
[INFO] --- maven-enforcer-plugin:1.1.1:enforce (enforce-plugin-versions) @ seedling ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequirePluginVersions failed with message:
Some plugins are missing valid versions:(LATEST RELEASE SNAPSHOT are not allowed )
org.apache.maven.plugins:maven-clean-plugin. The version currently in use is 2.4.1
org.apache.maven.plugins:maven-deploy-plugin. The version currently in use is 2.7
org.apache.maven.plugins:maven-install-plugin. The version currently in use is 2.3.1
org.apache.maven.plugins:maven-site-plugin. The version currently in use is 3.0
org.apache.maven.plugins:maven-reactor-plugin. The version currently in use is 1.0
org.apache.maven.plugins:maven-eclipse-plugin. The version currently in use is 2.9
Best Practice is to always define plugin versions!
maven-clean-plugin、maven-install-plugin、maven-reactor-plugin などの一部のプラグインは、maven の中心的な部分であり、これらの「コア」プラグインのバージョンを私が使用しているmavenのバージョン。
私の質問:
- プラグインのバージョンは Maven 自体と同じリリース サイクルにありますか?
- Maven リリースを構成するコア Maven プラグインのグループはありますか? はいの場合、maven リリースのそのようなプラグインのリストを取得する方法は?
- 3.0.4 などの Maven リリースは、いくつかのコア プラグインを含むバージョンですか? それとも、maven 3.0.4 のリリース後にリリースされた Reactor などの最新のプラグインを常に取得しますか?
- 3.0.4 がリリースされた時点でリリースされたプラグインを使用するように言う方法はありますか?
- 異なるプラグイン バージョン間の互換性はどのように示されますか? マイナーな 2.x はすべて相互に互換性がありますが、3.x は 2.x と互換性がないなど、プラグインが普遍的に従う規則はありますか?
- プラグインのバージョン番号を指定することは、本当にベスト プラクティスなのか、それともやり過ぎなのか?