web-dev-qa-db-ja.com

pom.xmlの<dependency>の下の<scope>は何のためのものですか?

ドキュメンテーション http://maven.Apache.org/surefire/maven-surefire-plugin/examples/testng.html を見ると、<scope>タグがあります。 <dependency>の下

それは何ですか。また、テストを実行するためにそれをどのように使用できますか?

153
TDHM

<scope>要素は6つの値を取ることができます:コンパイル提供ランタイムテストシステムインポート

このスコープは、依存関係の推移性を制限し、さまざまなビルドタスクに使用されるクラスパスに影響を与えるためにも使用されます。

コンパイル

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

提供された

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

ランタイム

このスコープは、依存関係がコンパイルには必要ではなく、実行には必要であることを示します。実行時クラスパスとテストクラスパスにありますが、コンパイルクラスパスにはありません。

テスト

この範囲は、依存関係がアプリケーションの通常の使用には必要ではなく、テストのコンパイル段階と実行段階でのみ使用可能であることを示しています。

システム

このスコープは、明示的にそれを含むJARを提供しなければならないことを除いて、providedと似ています。成果物は常に使用可能であり、リポジトリー内で検索されません。

import(Maven 2.0.9以降でのみ利用可能)

このスコープは、セクション内のpom型の依存関係に対してのみ使用されます。指定されたPOMをそのPOMのセクションの依存関係に置き換える必要があることを示します。それらが置き換えられるので、インポートの範囲を持つ依存関係は、依存関係の推移性を制限することに実際には関与しません。

質問の後半に答えるには:

テストを実行するためにそれをどのように使用できますか?

testスコープではテスト段階でのみ依存関係を使用できます。

詳しくは ドキュメント を読んでください。

222
Ortomala Lokni

1行に6つのDependencyスコープ:

  • compile:デフォルト
  • 提供:実行時にJDKまたはコンテナによって
  • ランタイム:コンパイルには不要
  • test:テスト中にのみ使用されます
  • system:ローカルに提供
  • import:Maven 2.0.9以降でのみ利用可能
8
Premraj

explainスコープ付きの良い画像を追加

enter image description here

enter image description here

7
vaquar khan

スコープタグはクラスパスレベルでjarの推移的な依存性と可用性を制限するために常に使用されます。スコープを指定しない場合、デフォルトのスコープが機能します。つまり、コンパイルとなります。

3
Mukesh

スコープを指定しない場合はデフォルトのスコープがコンパイルされます。確認したい場合は、Eclipseエディタの[Effective pom]タブに移動するだけで、コンパイル済みとして表示されます。

0
Umanath