使用 Flatten 从 Maven Shade 依赖减少 pom 中删除父级

Remove parent from Maven Shade dependency reduced pom with Flatten

项目结构如下:

FatJarRootPom 具有 XY 的依赖项。 FatJarAFatJarB 都将 FatJarRootPom 声明为它们的父级,因此它们将其依赖项 XY 与它们自己的依赖项一起隐藏到它们的 JAR 中。

问题在于,Shade 插件将在 dependency-reduced-pom.xml 中保留对父级的引用,因此 FatJarA 的 pom 仍将明确依赖于 XY,尽管已经将它们放在 JAR 中了。

Flatten Plugin 可以摆脱 parent,因此最好在扁平化的 pom 上使用 运行 Shade Plugin。它将处理所有依赖项,然后将它们从 dependency-reduced-pom.xml 中删除。但是,当我配置 Flatten 插件时,Shade 插件不会获取其输出并且仍然会产生不正确的 pom。

我发现 建议更改 shade 和 flatten 的调用顺序,以便 shade 首先出现,但是 它不会工作 因为来自 FatJarRootPom 仍将在 pom 中,我正试图避免这种情况。

也许有一些其他方法可以在不使用 flatten 插件的情况下从 dependency-reduced-pom.xml 中删除父部分?

更新: 我已经尝试将我的 FatJarRootPom 更改为 POM 依赖项 FatJarPom,其中列出了传递依赖项,有趣的是,Maven Shade 插件将特别是跳过 POM 依赖并且不会将其从依赖减少的 POM 中删除,即使这意味着所有阴影依赖将绝对显示为 fat-jar 工件的依赖。

我忽略了 Flatten 插件具有“fatjar”模式,它将去除所有依赖项。这是一种非常粗粒度的方法,但它应该适用于我的用例。

所以解决方案是放置

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <version>1.2.7</version>
                <executions>
                    <execution>
                        <id>flatten</id>
                        <phase>package</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                        <configuration>
                            <updatePomFile>true</updatePomFile>
                            <flattenMode>fatjar</flattenMode>
                        </configuration>
                    </execution>
                    ...

在相应的阴影插件部分之后。