J'essaie d'utiliser maven-shade-plugin
pour un pot modulaire:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<minimizeJar>true</minimizeJar>
<artifactSet>
<includes>
<include>javax.xml.bind:jaxb-api</include>
<include>com.Sun.xml.bind:jaxb-impl</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>javax.xml.bind</pattern>
<shadedPattern>org.update4j.javax.xml.bind</shadedPattern>
</relocation>
<relocation>
<pattern>com.Sun.xml.bind</pattern>
<shadedPattern>org.update4j.com.Sun.xml.bind</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>
Mais Maven supprimera mon module-info.class
du pot ombré, avec un avertissement:
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
Comment puis-je le configurer pour le laisser?
EDIT: l'avertissement se produit réellement quand il supprime le descripteur de module du pot ombré, pas le mien.
En raison des informations sur les modules dans le monde JPMS qui dictent l'exposition d'un module, l'ombrage des éléments dans peut provoquer cette erreur "Le paquet est lu à partir de deux modules différents".
Je l'ai résolu de la manière suivante
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<configuration>
<excludes>
<exclude>module-info.Java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.moditect</groupId>
<artifactId>moditect-maven-plugin</artifactId>
<executions>
<execution>
<id>add-module-infos</id>
<phase>package</phase>
<goals>
<goal>add-module-info</goal>
</goals>
<configuration>
<overwriteExistingFiles>true</overwriteExistingFiles>
<module>
<moduleInfoFile>
src/main/Java/module-info.Java
</moduleInfoFile>
</module>
</configuration>
</execution>
</executions>
</plugin>
C'est vraiment ennuyeux, et d'après tout ce que j'ai lu, ils n'ont pas l'intention de le supprimer ou d'ajouter un indicateur pour le contourner.