【发布时间】:2016-08-20 21:56:07
【问题描述】:
我有以下场景,简化:
projectX ---> projectA ---> projectB
---> 的意思是“取决于”。
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 中的范围更改为对 projectB 使用compile,一切都会正常工作,但是在 projectX 中生成战争时将包含 projectB,并且我需要将这个库从生成的战争中删除,因为我正在提供 projectB在项目的其他部分。
在实际场景中,我有几个像 projectB 这样影响 projectA 的依赖项,所以为了减少生成的战争的大小,我想将它们设置为提供,但是 projectX 无法使用任何这些库中定义的组件.组件示例:Spring、Hibernate 等
问题:有没有办法以干净的方式实现这一点,而无需在很多地方重新声明依赖关系?
【问题讨论】:
-
提供的依赖不是传递的stackoverflow.com/questions/34904558/…。它以这种方式构建到 Maven 中,并且可能永远不会改变。
-
@Tunaki 这就是这个问题的动机(:
-
是的,但这就是这里的结论:使用您未声明的依赖项是错误的。 请参阅我的答案,有一个错误报告。您必须明确声明它。
-
@Tunaki 我的问题是:如何避免在多个项目中一遍又一遍地重新声明多个依赖项?有几个,我的意思是超过 10 个依赖项。
标签: java maven maven-3 pom.xml maven-dependency