1

私はある種のフレームワークを書いており、使用する特定の機能を提供したいと考えていますlucene(ここでは、機能の例として lucene を取り上げます)。

したがって、私のフレームワークでは、機能を構築できるようにmavenlucene ライブラリを含める必要があります。dependency

ここで、すべての機能に対してサブモジュールを作成するのではなく、すべてを 1 つの jar ライブラリにまとめたいと考えています。また、ユーザーが lucene 機能を使用したい場合は、 を使用してアクティブ化することができSpring、maven で lucene ライブラリを含める必要もあります。

しかし、どうすればこれを達成できますか?これまでのところ、フレームワークに lucene ライブラリがあり、これを依存関係として使用すると、機能が使用されていなくても、自動的に lucene ライブラリもインポートされます。どうすればこれを防ぐことができますか?

4

1 に答える 1

3

Mavenスコープprovidedがあなたの問題を解決すると思います:

<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-core</artifactId>
    <version>4.10.0</version>
    <scope>provided</scope>
</dependency>

Mavenのドキュメントから:

  • コンパイル

これはデフォルトのスコープで、何も指定されていない場合に使用されます。コンパイルの依存関係は、プロジェクトのすべてのクラスパスで利用できます。さらに、それらの依存関係は依存プロジェクトに伝播されます。

  • 提供された

これはコンパイルによく似ていますが、実行時にJDKまたはコンテナが依存関係を提供することを期待していることを示しています。たとえば、Java Enterprise Edition 用の Web アプリケーションを構築する場合、サーブレット API および関連する Java EE API への依存関係を提供範囲に設定します。これは、Web コンテナーがこれらのクラスを提供するためです。このスコープは、コンパイルおよびテスト クラスパスでのみ使用でき、推移的ではありません。

あなたの場合、コンテナが依存関係を提供することを期待していませんが、フレームワークのユーザーがそれを含める必要があります(必要な場合)。

于 2014-09-09T11:30:52.820 に答える