我有以下场景,简化:
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 中生成战争时将包含 projectB,并且我需要将这个库从生成的战争中移除,因为我在其他部分提供了 projectB的项目。
在实际场景中,我有几个像 projectB 这样影响 projectA 的依赖项,所以为了减少生成的战争的大小,我想将它们设置为提供的,但是 projectX 不能使用任何这些库中定义的组件。组件示例:Spring、Hibernate 等。
问题:有没有办法以一种干净的方式实现这一点,而无需在很多地方重新声明依赖关系?