Я видел этот вопрос, и это мотивировало меня снова (без успеха) смотреть в конфигурациях Maven для альтернативного способа объявления конфигурации, поэтому оно добавляется к родительскому POM config вместо его переопределения. В Maven POM, если конфигурация объявляет те же элементы, что и в родительском, она переопределяет конфигурацию родителей. Как утверждает принятый ответ на другой вопрос, это ожидаемое поведение.
Но это не всегда желаемое поведение. Должно ли/быть средство в Maven для добавления, а не переопределения конфигурации?
Например: - Предоставить возможность объявлять элементы окончательной конфигурации, чтобы дети могли добавлять к ним, но не заменяли? - Разрешить дочерней конфигурации объявлять элемент как дополнение, поэтому он объединяется с родительским
Хорошим примером того, когда поведение переопределения не всегда желательно, является элемент elementLibraries для аспектj-maven-plugin.
В моей родительской POM я определяю конфигурацию для плагина aspectj, который объявляет баннер трассировки, который будет использоваться в качестве библиотеки аспектов.
<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>
Это унаследовано всеми дочерними проектами, и я получаю трассировку во всех проектах, что приятно. Однако, если я определяю другой файл aspectLibrary в дочернем POM, он заменяет мою конфигурацию трассировки.
Примечание. У меня есть обходной путь к этой конкретной проблеме. Меня интересует общий случай и последствия для Maven.
Простым ответом было бы переопределить конфигурацию баннера трассировки в дочерней POM, а также новую банку, но это имеет последствия для обслуживания, и если я хочу объявить конфигурацию трассировки в профиле, чтобы ее можно было отключить если это необходимо (что я и делаю), тогда мне нужно переопределить профиль в дочернем элементе.
Объявление зависимостей в приведенном выше примере объединяется с другими объявлениями зависимостей в родительском и в другом месте. Я знаю, что зависимости - это особый случай, но он показывает, что его можно реализовать.