【发布时间】:2022-01-27 20:02:31
【问题描述】:
项目结构如下:
FatJarRootPom 依赖于 X 和 Y。
FatJarA 和 FatJarB 都将 FatJarRootPom 声明为它们的父级,因此它们将其依赖关系 X 和 Y 与它们自己的依赖关系一起隐藏到它们的 JAR 中。
问题在于,Shade Plugin 将在 dependency-reduced-pom.xml 中保留对父级的引用,因此 FatJarA 的 pom 仍将明确依赖于 X 和 Y,尽管它们已经在 JAR 中。
Flatten Plugin 可以摆脱父级,因此最好在扁平化 pom 上运行 Shade Plugin。它将处理所有依赖项,然后将它们从dependency-reduced-pom.xml 中删除。但是,当我配置 Flatten Plugin 时,Shade Plugin 不会拾取它的输出,仍然会产生不正确的 pom。
我找到了this answer,它建议更改 shade 和 flatten 的调用顺序,以便首先使用 shade,但是 它不起作用,因为来自 FatJarRootPom 的依赖项仍会在 pom 中,我试图避免。
也许还有其他方法可以在不使用 flatten 插件的情况下从 dependency-reduced-pom.xml 中删除父部分?
更新:我尝试将我的 FatJarRootPom 更改为 POM 依赖项 FatJarPom,其中列出了传递依赖项,有趣的是,Maven Shade 插件将专门跳过 POM 依赖项并且不会删除它from dependency 减少了 POM,即使这意味着所有阴影依赖项都将绝对显示为 fat-jar 工件的依赖项。
【问题讨论】:
标签: maven maven-shade-plugin fatjar maven-flatten-plugin