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


179

ドキュメントhttp://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.htmlを見る<scope>と、下にタグがあります<dependency>

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


15
それはすべての非常によくドキュメントで説明している:maven.apache.org/guides/introduction/...
グイド・

回答:


266

<scope>:エレメントは6つの値取ることができ、コンパイル提供実行試験システム及びインポート

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

コンパイル

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

提供

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

ランタイム

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

テスト

このスコープは、依存関係がアプリケーションの通常の使用に必要ではなく、テストのコンパイルおよび実行フェーズでのみ使用できることを示します。

システム

このスコープは、明示的に含まれるJARを提供する必要があることを除いて、提供されたスコープと似ています。アーティファクトは常に利用可能であり、リポジトリで検索されません。

インポート(Maven 2.0.9以降でのみ使用可能)

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

質問の2番目の部分に答えるには:

テストの実行にどのように使用できますか?

testスコープでは、テスト段階でのみ依存関係を使用できることに注意してください。

詳細については、ドキュメントをご覧ください。


「テスト」を使用する場合、作成された.jarで終了しますか?
markthegrea

1
コンパイルと実行時に依存関係が必要な場合はどうなりますか?
アルビン


12

6つの依存関係スコープ:

  • コンパイル:デフォルトのスコープ、クラスパスは両方src/mainで利用可能src/test
  • テスト:クラスパスが利用可能src/test
  • 提供:complieに似ていますが、実行時にJDKまたはコンテナによって提供されます
  • runtime:コンパイルには不要、実行時にのみ必要
  • システム:ローカルで提供され、クラスパスを提供します
  • import:他のPOMのみをにインポート<dependencyManagement/>できます。Maven2.0.9以降でのみ使用できます


4

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


11
コンパイルとは、アプリをコンパイルして実行するためにJARが必要であることを意味します。Webアプリケーションの場合、例として、JARはWEB-INF / libディレクトリに配置されます。提供されるとは、コンパイルにJARが必要であることを意味しますが、実行時にはすでに環境によって提供されるJARがあるため、アプリにパッケージ化する必要はありません。Webアプリの場合、これはJARファイルがWEB-INF / libディレクトリに配置されないことを意味します。Webアプリの場合、アプリサーバーがすでにJAR(またはその機能)を提供している場合は、「提供」を使用します。
ムケシュ

1
回答の中にコメントを追加してください
Supun Wijerathne

0

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


OPは、スコープが尋ねている、デフォルトのスコープが何であるかを見つけることではありません、。
Wouter 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.