2

それ自体が依存関係 DEP を持つ Maven プラグインを作成しています。DEP は、複数のバージョンのうちの 1 つです。私が必要としているのは、消費者が DEP とそのバージョンを明示的に言及する必要があるということです。コンシューマーが DEP への暗黙の依存関係を使用したり、新しい DEP をリリースしたときに新しいバージョンを自動的に取得したりしたくありません。

これが私が今持っているものですが、これは、コンシューマーの pom で DEP が指定されていない場合、常に最新のものを取得することを意味します。

私のプラグインの依存関係セクションには、次のものがあります。

<dependencies>
    <dependency>
        <groupId>org.foo.bar</groupId>
        <artifactId>DEP</artifactId>
        <version>[1.8.3-01,9.9.9)</version>
    </dependency> 
    ...
</dependencies>

次に、誰かが私のプラグインを使用しています:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <compilerId>my-compiler-id/compilerId>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.foo.bar</groupId>
                    <artifactId>my-compiler</artifactId>
                    <version>1.0.0-SNAPSHOT</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

上記の場合、すべてがコンシューマに対して機能し、コンシューマは常に最新バージョンの を取得しDEPます。`DEP の特定のバージョンが必要な場合は、maven-compiler-plugin の依存関係セクションのように、pom に明示的に追加する必要があります。

                <dependency>
                    <groupId>org.foo.bar</groupId>
                    <artifactId>DEP</artifactId>
                    <version>1.8.6-09</version>
                </dependency>

現在、この追加の明示的な依存関係はオプションです。欠落している場合は、最新のものを使用します。この依存関係を必須にしたい。それ、どうやったら出来るの?

4

1 に答える 1

1

次の質問とリンクされたブログ投稿で説明されているように、DEP を「オプションの」依存関係として定義できるはずです。

オプションの依存関係を処理するための最良の戦略

http://axelfontaine.com/blog/optional-dependencies.html

基本的には次のとおりです。

            <dependency>
                <groupId>org.foo.bar</groupId>
                <artifactId>DEP</artifactId>
                <version>1.8.6-09</version>
                <optiona>true</optional>
            </dependency>

ユーザーは、このプラグインを使用するときにこの依存関係を明示的に追加する必要があります。そうしないと、エラーが発生します。

Maven Enforcer プラグインを使用するか、コンパイラ プラグインをラップ/拡張するカスタム プラグインを作成することで、より有益なエラー メッセージを表示して同じ結果を達成する方法もあるかもしれませんが、<optional>おそらく最も適切な方法です。

于 2013-06-26T17:33:42.167 に答える