由shade插件生成的dependency-reduced-pom.xml的目的是什么?


77

我看了看文档,却没有发现任何有关其用途的信息。


1
在Mojo文档中相对不是很清楚:maven.apache.org/plugins/maven-shade-plugin/…吗?
Tome

7
不,它的目的没有任何意义。
2014年

5
好吧,如果您有一个具有X依赖项的模块A,并且将它们中的某些阴影放置在特定的JAR(A-shaded.jar)中,那么如果您想依赖A-shaded.jar,则不需要那些阴影的依赖项A.jar。因此,该插件创建了一个pom.xml,其中仅包含Y个非阴影依赖项。
Tome 2014年

Answers:


46

shade:shade Mojo有很好的文档,这里特别是关于createDependencyReducedPom参数的信息,它将创建该dependency-reduced-pom.xml文件:maven-shade-plugin/shade-mojo.html#createDependencyReducedPom

简而言之,如果您打算将阴影的JAR(而不是普通的JAR)用作另一个模块的依赖项,则这非常有用。那dependency-reduced-pom.xml将不包含阴影阴影中已经存在的JAR,从而避免了无用的重复。


43
我不确定我是否同意关于mvn的任何资料都有据可查,因此该技术本质上难以理解。了解如何使用dependency-reduced-pom.xml会有所帮助。在何处以及如何使用它。
Scott Boring

1
上方,@ ScottBoring询问应在何处添加设置。它位于配置块中,并且在maven shade插件使用页面插件定义中有该块的示例。
杰里米·D

6
但是,当您依靠阴影罐子时,如何使用drp代替它呢?
OrangeDog

如果将插件配置为要创建(例如,用于安装和部署阶段),则插件不使用该drp作为项目pom吗?
Tome,

3
@JeremyD他不是在询问在哪里使用设置,而是在询问在哪里使用生成的POM。
香农

23

我阅读了大约一百次文档,但仍然不明白这是什么目的,真正的用例是什么。

最后,这就是我的想法:假设您有一个依赖项为A,B,C,D,E的项目。在pom.xml配置遮阳插件时,它会创建uber-jar(称为foo.jar)时,在阴影罐中包含A,B,C,但由于某些原因,您决定不将D,E包含在阴影罐中,即使您的项目依赖于它们,例如,有些情况是仅用于测试的依赖项(例如,任何依赖项)具有scopetest,并且不包括在阴影罩)。在dependency-reduced-pom.xml将它定义d,E。这个想法是,如果有人要使用,foo.jardependency-reduced-pom.xml提示您要提防其中foo.jar缺少依赖项D,E-使用后果自负。然后,您可以决定在将使用的项目中显式添加D,Efoo.jar

因此,dependency-reduced-pom.xml它更像missing-dependencies.xml并列出了shade插件输出的uber-jar中缺少的依赖项。


6
您能否确定随着时间的推移,这种理解是否正确?
anir
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.