我有一个库A,它依赖于库B和C.我使用maven-dependency-plugin将B和C的库类解压缩到库的jar中(见下文)。
现在,当库D使用库A时,库D可以访问A,B和C的所有类。但是,我希望D仅依赖于A而不依赖于传递依赖性B和C.
我知道这可以通过手动排除B和C作为依赖关系A-D来实现,但我想以某种方式在A中声明B和C不会被使用A的模块所知。
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
答案 0 :(得分:6)
我认为您可以使用“提供”范围标记依赖关系,因此依赖项目将假定jar已经“提供”。通常它们是由容器提供的,在您的情况下,您“依赖”它“提供”它们。
在任何情况下,依赖于A的模块都将忽略依赖关系B和C.
答案 1 :(得分:4)
第一个选项,使用dependency:unpack
而不是dependency:unpack-dependencies
,因此在插件配置中列出B和C,而不是将它们声明为依赖项(因此D将不知道它们)。
第二个选项,根据Peter的建议(参见Transitive Dependencies)将B和C声明为A与provided
范围的A的依赖关系,并且您不会在D中“看到”它们。
答案 2 :(得分:0)
本周我使用maven-shade-plugin创建了一个类似的东西。 然而,当我将超级罐作为依赖项添加到另一个项目时,底层罐子被传递添加 为了解决这个问题,我必须在它的pom中将uber-jar的依赖关系标记为&lt; optional&gt; true&lt; / optional&gt; ,然后重新安装uber-jar。 见http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html