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 exclude
wyd. 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 № 1Dostaniesz 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>