モジュラーjarにmaven-shade-plugin
を使用しようとします。
<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>
ただし、Mavenは警告付きでmodule-info.class
を色付きのjarファイルから削除します。
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
それを残すように構成するにはどうすればよいですか?
編集:警告は実際には、私自身ではなく、影付きのjarのモジュール記述子を削除すると発生します。
JPMSの世界ではmodule-infoがモジュールの公開を指示しているため、アイテムをシェーディングすると、「パッケージが2つの異なるモジュールから読み取られました」というエラーが発生する場合があります。
私はそれを次の方法で解決しました
<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>
これは本当に迷惑なことであり、私が読んだすべてのものから、それを削除したり、バイパスするためのフラグを追加したりする意図はありません。