我看到了this question,它激励我再次查看motivated (没有成功),寻找声明配置的替代方法,以便将其附加到父POM的配置中,而不是覆盖它。在Maven POM中,如果配置声明了与父配置相同的元素,它将覆盖父配置。正如另一个问题的公认答案所说,这是预期的行为。
但这并不总是我们想要的行为。在Maven中是否应该有添加而不是覆盖配置的方法?
例如:-提供声明配置最终元素的能力,以便子项可以添加到这些元素中,但不能替换?-允许子项配置将元素声明为添加,以便与父项合并
aspectj-maven-plugin的aspectLibraries元素就是一个很好的例子,说明覆盖行为并不总是可取的。
在我的父POM中,我为aspectj插件定义了一个配置,它声明了一个要用作aspectLibrary的跟踪jar。
<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的配置,但这涉及到维护,如果我想在配置文件中声明跟踪配置,以便在需要时禁用它(我确实这样做了),那么我需要在子POM中重新实现该配置文件。
上述示例中的依赖项声明与父级和其他位置中的其他依赖项声明合并。我知道依赖是一种特殊情况,但它表明实现它是可行的。
https://stackoverflow.com/questions/1102369
复制相似问题