Tom*_*ome 40

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

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

  • 我不确定我是否同意有关mvn的任何内容都有详细记载,该技术本身很难理解.理解如何使用dependency-reduced-pom.xml会很有帮助.应该在何处以及如何使用. (30认同)
  • 但是,当你依赖阴影罐时,你是如何使用drp代替? (6认同)
  • @JeremyD他不会问在哪里使用设置,他在询问在哪里使用生成的POM. (3认同)

mor*_*eus 18

我读了大约一百次左右的文档但仍然无法理解这是什么,它的用例是什么.

最后这就是我的想法:假设你有一个带有依赖关系A,B,C,D,E的项目.在pom.xml你配置阴影插件的方式,当它创建超级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,E foo.jar.

所以dependency-reduced-pom.xml更像是missing-dependencies.xml并且列出了由阴影插件输出的uber-jar中缺少的依赖项.

  • 您能否确认这种理解随着时间的推移是否被证明是正确的? (8认同)

Rup*_*ott 6

简答

Dependency-reduced-pom.xml 删除了已经在你的着色 jar 中的传递依赖项。这可以防止消费者两次拉他们。

长答案

给罐子遮荫有几个原因。

如果您正在生成一个捆绑了所有依赖项的可执行 jar,那么您可能正在将其上传到包存储库,而用户正在手动下载它。在这种情况下,dependency-reduced-pom.xml 不会为您做任何事情。

另一个原因是因为您正在构建一个库并使用其他公共库的特定版本。您不想强迫您的用户使用与您相同的版本。通过着色,您可以有效地命名这些依赖项,然后您的用户可以再次包含相同的库,但使用不同的版本。

在这种情况下,如果您上传原始 pom,那么依赖您的库的用户最终将两次拉取所有依赖项。一次来自阴影副本,一次来自 pom.xml 中声明的副本。上传dependency-reduced-pom.xml 可以防止这种情况发生,因为阴影依赖声明被删除。

  • @Madeo 的经验法则是不要提交构建过程中创建的任何内容。它会在每次构建时重新创建,因此可以安全地忽略它。提交它会导致额外的、不必要的提交。 (2认同)