3

オンラインのさまざまな場所で、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のバージョン。

私の質問:

  1. プラグインのバージョンは Maven 自体と同じリリース サイクルにありますか?
  2. Maven リリースを構成するコア Maven プラグインのグループはありますか? はいの場合、maven リリースのそのようなプラグインのリストを取得する方法は?
  3. 3.0.4 などの Maven リリースは、いくつかのコア プラグインを含むバージョンですか? それとも、maven 3.0.4 のリリース後にリリースされた Reactor などの最新のプラグインを常に取得しますか?
  4. 3.0.4 がリリースされた時点でリリースされたプラグインを使用するように言う方法はありますか?
  5. 異なるプラグイン バージョン間の互換性はどのように示されますか? マイナーな 2.x はすべて相互に互換性がありますが、3.x は 2.x と互換性がないなど、プラグインが普遍的に従う規則はありますか?
  6. プラグインのバージョン番号を指定することは、本当にベスト プラクティスなのか、それともやり過ぎなのか?
4

2 に答える 2

3

Maven は、一部のプラグインをそのライフサイクル フェーズにバインドします。たとえば、maven-compiler-plugin をフェーズにバインドしcompile、maven-install-plugin をフェーズにバインドinstallします。これらは、「maven の中心的な部分」という意味のプラグインです。ただし、これらのプラグインには個別のリリース サイクルがあります。たとえば、maven のdeployライフサイクル フェーズにバインドされている maven-deploy-plugin を見てください。最新のリリース (2.7) は 2011 年 10 月でしたが、最新の Maven リリース (3.0.4) は 2012 年 1 月でした。 3.0.4。

特にあなたの質問に答えるには:

  1. いいえ、そうではありません。各プラグインには独自のリリース サイクルがあります。上記の例を参照してください。
  2. Maven のパッケージ固有のライフサイクル フェーズにバインドされているさまざまなプラグインがあります。これらを「コア Maven プラグイン」と見なすことができます。完全なリストを取得するには、Maven bookを参照してください。
  3. POM ファイルでプラグインのバージョンを指定しない場合、maven は使用されている各プラグインの最新リリースを使用します。
  4. いいえ。これが必要な場合は、http: //search.maven.org でプラグインのリリース日を確認し、Maven の最新リリースと比較してください。ただし、使用する各プラグインのバージョンを POM ファイルで指定し、maven が正しいアーティファクトを生成する場合、これは必要ありません。
  5. 異なる Maven プラグイン間に互換性の問題はありません (少なくとも私が知っている問題はありません)。同じプラグインの別のバージョンについては、それを試して、特定のプロジェクトが新しいバージョンのプラグインで動作するかどうかを確認する必要があります。
  6. 再現可能なビルドが必要な場合は、必須です。
于 2012-11-01T21:31:03.720 に答える
2

質問のリストに対する回答は次のとおりです。

  1. いいえ
  2. いいえ。Maven 自体には小さなカーネルがありますが、カーネルにはプラグインはありません。すべてのプラグインは、必要に応じて実行中にダウンロードされます。Maven 2 では、Maven 3 で変更された Maven 自体 (サイト生成の一部) と共にリリースされる Maven の一部がありました。
  3. Maven リリースには、いくつかのプラグイン バージョンなどの定義を含むスーパー pom は含まれていませんが、スーパー pom を介してのみです。
  4. いいえ、バージョンだけでリリースの時期を定義することはできません。
  5. さまざまなプラグインはさまざまなコミュニティ/人々によって維持されており、バージョンと maven リリースとの関係についてさまざまな意見があります。通常、適切なプラグインのサイトは、文書化されている場合はそれを文書化します (たとえば、maven-site-plugin)。
  6. はい、問題なくさまざまな Maven リリースで動作します。
于 2012-11-01T21:29:08.387 に答える