当前位置: 首页 > 知识库问答 >
问题:

从Maven Shade dependency中删除父级使用Flatte减少pom

井修雅
2023-03-14

本项目结构如下:

FatJarRootPomXY有依赖项。FatJarAFatJarB都声明FatJarRootPom为其父级,因此它们将其依赖项XY连同它们自己的依赖项一起添加到JAR中。

问题是,Shade插件会在dependency-reduced-pom.xml中留下对父节点的引用,因此FatJarA的pom仍然显式依赖于XY,尽管它们已经在JAR中。

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

我已经找到了这个答案,它建议更改shade和flatte的调用顺序,以使shade优先,但它不起作用,因为来自FatJarRootPom的依赖项仍然存在于pom中,我正在尝试避免这种情况。

也许还有其他方法可以从依赖性减少的pom中删除父节。没有扁平化插件的xml?

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

共有1个答案

谭云瀚
2023-03-14

我忽略了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>
                    ...

在相应的Shade插件部分之后。

 类似资料:
  • 问题内容: 假设我们有3个Entities对象类: 如何使用JPA2.x(或hibernate)批注来: 父级删除时(一对多)自动删除所有子级 删除后自动从子级列表中删除子级(多对一) 儿童删除时(一对一)自动删除玩具 我正在使用Hibernate 4.3.5和mysql 5.1.30。 谢谢 问题答案: 如本文所述, 实体状态转换应从父级到子级联,而不是相反。 您需要这样的东西:

  • 本文向大家介绍如何使用jQuery从父级删除所有子级节点?,包括了如何使用jQuery从父级删除所有子级节点?的使用技巧和注意事项,需要的朋友参考一下 要从父级删除所有子节点,请使用方法。该方法从匹配的元素集中删除所有子节点。 示例 您可以尝试运行以下代码以了解如何从父级删除所有子节点-

  • 我有两个实体使用Spring和Hibernate

  • 问题内容: 我有以下实体: 球队 } 和 USER_TEAM_ROLE 现在,当使用{UTR1,UTR3}更新包含例如Team.userTeamRoles = {UTR1,UTR2}的Team实体时,我希望删除UTR2。但是我现在的方法是,旧列表保持不变,并且只将UTR3添加到列表中。 这是我目前的做法: 我认为通过执行该列表将被重置,并且由于级联,先前的列表将被删除。 任何帮助表示赞赏。谢谢 问

  • 我有一些关于“级联”的问题,在我的项目中,我有类别类,每个类可以是父类或子类。但我在同一个类中定义了哪一个是父母还是孩子。父母和孩子之间存在一对多的关系。这是我的实体类 我的问题是;当我删除子类别时,它的成功并没有问题。如果父类别有子类别,则无法删除父类别。 错误消息; Servlet.service()的servlet[调度Servlet]在上下文中与路径[]抛出异常[请求处理失败;嵌套异常or

  • 问题内容: 我准备了一个 小提琴 来演示这个问题。 我想要一种在删除子记录时将其删除到CASCADE到父记录的方法。 例如: 这应该级联到父表并删除记录。 问题答案: 外键仅在另一个方向上起作用:从父级到子级级联删除,因此,当删除父级(引用)记录时,所有子级(引用)记录也会被删除。 如果是1:1关系,则可以创建双向外键关系,其中一侧为,而两侧均为级联。 否则,您将需要在子表上创建一个触发器,以在没