以下のようなプロジェクトで2つのMaven依存関係が定義されているとします。異なるスコープの依存関係内のMaven依存関係
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mycompany.library</groupId>
<artifactId>mylibrary</artifactId>
<version>1.0.1</version>
<scope>compile</scope>
</dependency>
次に、mylibrary内で、以下のように定義された依存関係もあります。
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
<scope>compile</scope>
</dependency>
プロジェクトをパッケージ化すると、xstreamがパッケージ化されて表示されません。私は、プロジェクトのxstream依存関係のスコープ、 'test'がmylibraryのxstream依存スコープである 'compile'をオーバーライドしていると思います。
このような状況では、プロジェクト全体にxstreamを含めると、サブモジュールはプロジェクト内にパッケージ化されたときにアクセスできるようになります。
私は、Transitive依存性に関するApache MavenのWebサイトの説明を読んだが、その意味を理解し、この状況でのベストプラクティスを見つけるのには苦労している。
Apache Maven Webサイトから: - コンパイル これはデフォルトのスコープで、指定されていない場合に使用されます。コンパイルの依存関係は、プロジェクトのすべてのクラスパスで使用できます。さらに、これらの依存関係は依存するプロジェクトに伝播されます。 –
「サブモジュール」を使用したため、私のオリジナルの質問が混乱を引き起こしたのかもしれません。上記の私の編集した質問をご覧ください。 –
はい、私はテストの範囲についてもっと疑問に思っていました。 – aperkins