簡略化した次のシナリオがあります。
projectX ---> projectA ---> projectB
where--->は「依存する」という意味です。
ProjectB は実にシンプルです。依存関係を宣言しません。実際、関連する唯一の部分は次のとおりです。
<packaging>jar</packaging>
projectA の pom.xml で、projectB への依存関係を宣言しました。
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>projectB</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
そして、projectX の pom.xml には次のものがあります。
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>projectA</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
問題は、projectX が projectB で定義されているコンポーネント (クラスなど) を使用する必要があることです。projectA のスコープcompileを projectB に使用するように変更すると、すべてが機能しますが、projectX で war を生成するときに projectB が含まれます。他の部分で projectB を提供しているため、生成された war からこのライブラリを除外する必要があります。プロジェクトの。
実際のシナリオでは、projectA に影響を与える projectB のようないくつかの依存関係があるため、生成された war のサイズを小さくするために、それらを提供済みとして設定したいと考えていますが、projectX はそれらのライブラリで定義されたコンポーネントを使用できません。コンポーネントの例: Spring、Hibernate など
質問: 多くの場所で依存関係を再宣言せずに、クリーンな方法でこれを実現する方法はありますか?