Java Maven:解包依赖项。。。然后忘掉他们
我有一个库a,它依赖于库B和C。我使用maven依赖插件(见下文)将B和C的库类解压到库a的jar中 现在,当库D使用库a时,库D可以访问a、B和C的所有类。但是,我希望D只依赖于a,而不依赖于可传递依赖项B和C 我知道这可以通过手动排除依赖项A-D的B和C来实现,但我想在A中声明,使用A的模块不会知道B和CJava Maven:解包依赖项。。。然后忘掉他们,java,maven-2,Java,Maven 2,我有一个库a,它依赖于库B和C。我使用maven依赖插件(见下文)将B和C的库类解压到库a的jar中 现在,当库D使用库a时,库D可以访问a、B和C的所有类。但是,我希望D只依赖于a,而不依赖于可传递依赖项B和C 我知道这可以通过手动排除依赖项A-D的B和C来实现,但我想在A中声明,使用A的模块不会知道B和C <plugin> <artifactId>maven-dependency-plugin</artifactId&g
<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>
maven依赖插件
解包依赖项
产生资源
解包依赖项
我认为您可以使用范围“提供”标记依赖关系,这样依赖项目将假定jar已经“提供”。通常,它们是由容器提供的,在您的情况下,您是在依赖项A中“提供”它们的
在任何情况下,依赖于A的模块都将忽略依赖项B和C。第一个选项,使用而不是依赖项:解包依赖项
,从而在插件配置中列出B和C,而不是将它们声明为依赖项(因此D将不知道它们)
第二种选择,将B和C声明为A的依赖项,并按照Peter的建议(请参见)提供
范围,您将不会在D中“看到”它们。本周,我使用maven shade插件创建了一个uber jar。
然而,当我将uber jar作为一个依赖项添加到另一个项目时,底层jar是通过传递方式添加的。
为了修复它,我必须在其pom中将uber-jar的依赖项标记为true,然后重新安装uber-jar。
见谢谢!依赖项解包看起来是个不错的选择。感谢您提供Maven文档的链接!我认为“提供”的描述有点误导。但是,这个范围恰恰完成了上述情况下的工作。