[Spring][Maven]実行可能jarを生成するときの落とし穴 その2

fatjarを生成すると当然jarの署名も変わります。なのでchecksumを検証するような行儀の良いjarを含んでいると実行時にSecurityExceptionが吹っ飛んできます。

回避策は以下の通り。署名のマニフェストをjarから除外するのです。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>jp.co.tsr_net.omega.pdf.Main</mainClass>
</transformer>

<!-- Springの各jarにこれらのファイルが存在するため、マージする。 -->
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>

<!-- jarを作りなおすため、署名は無効にする -->
<transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
<resource>.RSA</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
<resource>.DSA</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
<resource>*.SF</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>