/ / maven наследяване на конфигурацията на приставката (сливане на стратегия за вложени елементи) - java, maven, maven-plugin

maven конфигурация за наследяване (сливане стратегия за вложени елементи) - java, maven, maven-плъгин

Чел съм това и че, Те имат основно едно и също съдържание, с изключение на някои разлики в формулировката. В последната има критична дума, която искам да посоча:

Конфигурационните елементи са рекурсивно обединени въз основа на името на елемента, ...

където в първия той просто казва:

Поведението по подразбиране е да се слее съдържанието наконфигурационния елемент според името на елемента. Ако детето POM има определен елемент, тази стойност става ефективна стойност. ако детето POM няма елемент, но родителят го прави, родителската стойност става ефективна стойност.

Моят въпрос е кога конфигурационният елемент е вложен елемент. Да кажем, че в моя родител pom.xml, имам:

<build>
<plugins>
<plugin>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedDependencies>
<excludes>
<exclude>com.my.group:my.id</exclude>
</excludes>
</bannedDependencies>
</rules>
</configuration>
...

Тогава в детето ми имам:

<build>
<plugins>
<plugin>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedDependencies>
<includes>
<include>com.my.group:my.id</include>
</includes>
</bannedDependencies>
</rules>
</configuration>
...

Както виждате, аз се опитвам include зависимост, която родителят бомбардира excludeизд. Тъй като елементът, който се опитвам да слее тук (<excludes> и <includes>) са вътре </rules>/</bannedDependencies>, Не знам дали ще получа:

<build>
<plugins>
<plugin>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedDependencies>
<excludes>
<exclude>com.my.group:my.id</exclude>
</excludes>
<includes>
<include>com.my.group:my.id</include>
</includes>
</bannedDependencies>
</rules>
</configuration>
...

или точно това, което детето пом уточнява (с други думи, вложеният елемент в родителския pom се замества с елемента в детския pom).

Отговори:

1 за отговор № 1

Вие ще получите и двете includes и excludes, Можете да проверите това, като изпълните mvn help:effective-pom, Принудителният плъгин третира като изключения от изключенията, така че изключването и след това включването на същия артефакт трябва да има ефект, че не е забранен (въпреки че не съм тествал това).

Когато съм под съмнение относно наследяването на конфигурацията, си представям, че maven рекурсивно обединява конфигурационните елементи от съкровен елемент и навън, така че в този случай, bannedDependencies елемент получава и двете includes елемент от детето и детето excludes елемент от родителя. Ако не искате детето да наследи нещо от. \ T bannedDependencies елемент, можете да направите следното в детския pom:

<bannedDependencies combine.self="override">
...
</bannedDependencies>