mavenで外部ライブラリを再パッケージする

Java のライブラリを JAR でパッケージングする際に、ライブラリを利用する環境の依存関係と衝突してしまうという問題がおきることがあります。バージョンが異なると利用できるメソッドや挙動が変わってしまう可能性もあります。

この問題を回避するために maven でパッケージングする際に、以下のように pom.xml を設定すると、依存関係のライブラリを独自のパッケージに差し替えてライブラリ化してくれます。

<project>
...
<build>
<plugins>
...
<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>
                <relocations>
                    <relocation>
                        <pattern>com.amazonaws</pattern>
                        <shadedPattern>com.amazonaws.repackaged</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>org.apache</pattern>
                        <shadedPattern>org.apache.repackaged</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
        </execution>
    </executions>
</plugin>
...
</plugins>
</build>
...
</project>