我有一个Ancestor依赖项依赖于提供的范围,我需要将该范围传播到依赖于我的项目的任何内容。
例如,假设我SomeProjectA
取决于SomeLibraryB
。我需要提供范围SomeLibraryB
。
目前要编译依赖SomeProjectA
的任何内容,还必须设置SomeLibraryB
。我宁愿传播那个范围,然后有任何项目依赖于我的项目的家属处理..
答案 0 :(得分:20)
我不认为这是可能的。每个项目都应该自己声明提供的依赖项。传播该范围是错误的,因为您不会对部署所做的部署做出假设,因为您不负责部署。您图书馆的用户会这样做..
答案 1 :(得分:0)
这可以通过简单的破解来实现。
您可以在直接依赖项标签中排除SomeLibraryB
和SomeLibraryC
。
以下是您的SomeProjectA
的依赖项标签。
<dependency>
<groupId>org.direct.dependency</groupId>
<artifactId>SomeProjectA</artifactId>
<exclusions>
<exclusion>
<groupId>org.some</groupId>
<artifactId>SomeLibraryB</artifactId>
</exclusion>
<exclusion>
<groupId>org.some</groupId>
<artifactId>SomeLibraryC</artifactId>
</exclusion>
</exclusions>
</dependency>
但是,如果您具有此配置,则您的测试和编译其他验证将开始失败。因此,您可以使用 <scope>test</scope>
将直接依赖项置于那些库中。
<dependency>
<groupId>org.some</groupId>
<artifactId>SomeLibraryB</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.some</groupId>
<artifactId>SomeLibraryC</artifactId>
<scope>test</scope>
</dependency>
答案 2 :(得分:-3)
从Maven documentation可以看出,提供的范围不会影响编译,而是影响运行时。通常,您只需要在打包项目的依赖关系中指定提供的范围,例如 war 类型的项目。因此,它不具有传递性并不重要。
换句话说,如果在没有明确指定其范围的情况下向jar
项目添加依赖项,那么在编译期间将使该依赖项可用,因此依赖项的依赖项也是如此。如果您明确声明该依赖项已提供范围,则不会更改。