使用 Flatten 从 Maven Shade 依赖减少 pom 中删除父级
Remove parent from Maven Shade dependency reduced pom with Flatten
项目结构如下:
FatJarRootPom
具有 X
和 Y
的依赖项。
FatJarA
和 FatJarB
都将 FatJarRootPom
声明为它们的父级,因此它们将其依赖项 X
和 Y
与它们自己的依赖项一起隐藏到它们的 JAR 中。
问题在于,Shade 插件将在 dependency-reduced-pom.xml
中保留对父级的引用,因此 FatJarA
的 pom 仍将明确依赖于 X
和 Y
,尽管已经将它们放在 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>
...
在相应的阴影插件部分之后。
项目结构如下:
FatJarRootPom
具有 X
和 Y
的依赖项。
FatJarA
和 FatJarB
都将 FatJarRootPom
声明为它们的父级,因此它们将其依赖项 X
和 Y
与它们自己的依赖项一起隐藏到它们的 JAR 中。
问题在于,Shade 插件将在 dependency-reduced-pom.xml
中保留对父级的引用,因此 FatJarA
的 pom 仍将明确依赖于 X
和 Y
,尽管已经将它们放在 JAR 中了。
Flatten Plugin 可以摆脱 parent,因此最好在扁平化的 pom 上使用 运行 Shade Plugin。它将处理所有依赖项,然后将它们从 dependency-reduced-pom.xml
中删除。但是,当我配置 Flatten 插件时,Shade 插件不会获取其输出并且仍然会产生不正确的 pom。
我发现 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>
...
在相应的阴影插件部分之后。