/ / Dziedziczenie konfiguracji wtyczek / maven (strategia scalania zagnieżdżonych elementów) - java, maven, maven-plugin

dziedziczenie konfiguracji wtyczek maven (strategia łączenia elementów zagnieżdżonych) - java, maven, maven-plugin

Przeczytałem to i który. Mają w zasadzie tę samą treść, z wyjątkiem pewnych różnic słownych. Jest w tym ostatnim krytyczne słowo, na które chcę zwrócić uwagę:

Elementy konfiguracji są rekurencyjnie scalone na podstawie nazwy elementu ...

gdzie w pierwszym mówi tylko:

Domyślne zachowanie polega na scaleniu zawartościelement konfiguracji zgodnie z nazwą elementu. Jeśli potomny POM ma określony element, wartość ta staje się wartością skuteczną. jeśli potomny POM nie ma elementu, ale element nadrzędny ma, wartość nadrzędna staje się wartością efektywną.

Moje pytanie brzmi, kiedy element konfiguracji jest elementem zagnieżdżonym. Powiedzmy, że w moim nadrzędnym pliku pom.xml mam:

<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>
...

Następnie w moim dziecku pom mam:

<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>
...

Jak widać, staram się include zależność rodzicielska excludewyd. Ponieważ element, który próbuję tu scalić (<excludes> i <includes>) są w środku </rules>/</bannedDependencies>, Nie wiem czy dostanę:

<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>
...

lub po prostu to, co określa pom-dziecko (innymi słowy, element zagnieżdżony w pom-pom jest zastępowany elementem w pom-pom).

Odpowiedzi:

1 dla odpowiedzi № 1

Dostaniesz oba includes i excludes. Możesz to sprawdzić, uruchamiając mvn help:effective-pom. Wtyczki modułu Enforcer traktują jako wyjątki od wykluczeń, więc wykluczenie, a następnie włączenie tego samego artefaktu powinno spowodować, że nie zostanie zbanowany (chociaż nie przetestowałem tego).

Kiedy mam wątpliwości co do dziedziczenia konfiguracji, wyobrażam sobie, że maven rekurencyjnie scala elementy konfiguracji z najgłębszy element i na zewnątrz, więc w tym przypadku bannedDependencies element pobiera oba includes element od dziecka i excludes element nadrzędny. Jeśli nie chcesz, aby dziecko odziedziczyło cokolwiek po bannedDependencies elementu, możesz wykonać następujące czynności w pom pom:

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