jarjar-maven-plugin を捨てて、maven-shade-plugin に戻すことで、この問題の解決策を見つけました。これにより、独自の名前空間内でクラスを再パッケージ化し、jar のメイン クラスを設定し、重要なことに、生成された pom を書き換えて、現在バンドルされているコンパイル時の依存関係を含めないようにすることができます。
これを達成した私の pom.xml の部分は次のとおりです。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
<createDependencyReducedPom>true</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>org.objectweb.asm</pattern>
<shadedPattern>${repackage.base}.org.objectweb.asm</shadedPattern>
</relocation>
</relocations>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${package.base}.my.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
この構成の重要な部分は次のとおりです。
shadedArtifactAttached
false に設定すると、影付きの jar が通常生成されるメインのアーティファクトに置き換わることを意味します。これはデフォルトで false ですが、指摘する価値があります。
createDependencyReducedPom
true に設定すると、shaded jar がデプロイまたはインストールされるときに、デプロイされる pom.xml には、jar に再パッケージ化されたコンパイル スコープの依存関係が含まれないことを意味します。
relocation
これらの要素は、依存関係内のファイルが影付きの jar に再パッケージ化される方法を構成します。上記の例では、正規名が で始まるクラスはすべてorg.objectweb.asm
に移動されるため${package.base}.org.objectweb.asm
、jar にパッケージ化されると、jar 内に同等のファイル パスが含まれます。
この構成では、プロジェクトがデプロイされたときに、クライアントがプロジェクトでコンパイル スコープの依存関係を宣言すると、シェーディングされた jar のみが取り込まれ、推移的な依存関係は取り込まれません。