gpt4 book ai didi

java - 增强而不是覆盖 Maven 配置

转载 作者:IT老高 更新时间:2023-10-28 21:00:46 26 4
gpt4 key购买 nike

我看到了this question它促使我再次(没有成功)查看 Maven 配置以寻找另一种声明配置的方式,因此它被附加到父 POM 的配置而不是覆盖它。在 Maven POM 中,如果配置声明了与父级相同的元素,它将覆盖父级配置。正如另一个问题的公认答案所说,这是预期的行为

但这并不总是期望的行为。 Maven 中是否应该/是否有一种方法可以添加而不是覆盖配置?

例如: - 提供声明配置最终元素的能力,以便 child 可以添加但不能替换? - 允许子配置将元素声明为附加元素,因此它与父元素合并


对于 aspectj-maven-plugin 的 aspectLibraries 元素来说,覆盖行为并不总是可取的一个很好的例子。

在我的父 POM 中,我为 aspectj 插件定义了一个配置,该配置声明了一个跟踪 jar 用作 aspectLibrary。

 <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
<execution>
<id>compile_with_aspectj</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<aspectLibraries>
<aspectLibrary>
<groupId>name.seller.rich</groupId>
<artifactId>tracing</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<dependencies>
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.5.3</version>
</dependency>
</dependencies>
</plugin>

这是由所有子项目继承的,我可以在所有项目中进行跟踪,这很好。但是,如果我在子 POM 中定义另一个 aspectLibrary,它将替换我的跟踪配置。

请注意,我有解决此特定问题的方法,我对一般情况和对 Maven 的影响感兴趣。

简单的答案是在子 POM 和新 jar 中重新声明跟踪 jar 的配置,但这会影响维护,如果我想在配置文件中声明跟踪配置以便可以禁用它如果需要(我这样做),然后我需要在 child 中重新实现配置文件。

上述示例中的依赖声明与父级和其他地方的其他依赖声明合并。我知道依赖是一个特例,但它表明它是可行的。

最佳答案

这在 blog post 中有解释。由 Sonatype 提供。

在父pom中,指定

<configuration>
<aspectLibraries combine.children="append">
<aspectLibrary>
<groupId>name.seller.rich</groupId>
<artifactId>tracing</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>

一般来说,子元素的配置元素将覆盖任何给定插件的父元素中指定的元素。默认情况下,这使事情变得简单:完全配置的 child 将完全使用其 pom.xml 中的配置。但是, parent 可以通过在所需配置元素上使用 combine.children="append"设置来强制扩展而不是替换列表。

关于java - 增强而不是覆盖 Maven 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1102369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com