小警告
虽然这没有描述为什么要使用 maven-shade-plugin(因为所选答案描述得很好),但我想指出我遇到了问题。它改变了 JAR(因为它正在做的事情)并导致我的软件回归。
因此,我没有使用这个(或 maven-jarjar-plugin),而是使用了 JarJar 的二进制文件,它似乎可以正常工作。
我在这里发布我的解决方案,因为我花了一些时间才找到一个体面的解决方案。
下载 JarJar 的 JAR 文件
您可以从此处下载 jar:
https ://code.google.com/p/jarjar/
在左侧菜单中,您有一个下载链接。
如何使用 JarJar 将 JAR 的类从一个包重新定位到另一个包
在本例中,我们将把包从“com.fasterxml.jackson”更改为“io.kuku.dependencies.com.fasterxml.jackson”。- 源 JAR 称为“jackson-databind-2.6.4.jar”,新修改的(目标)JAR 称为“kuku-jackson-databind-2.6.4.jar”。- “jarjar” JAR 文件的版本为 1.4
创建一个“rules.txt”文件。文件的内容应该是(注意'@'字符之前的句点):rule com.fasterxml.jackson.** io.kuku.dependencies.com.fasterxml.jackson.@1
运行以下命令: java -jar jarjar-1.4.jar process rules.txt jackson-databind-2.6.4.jar kuku-jackson-databind-2.6.4.jar
将修改后的 JAR 安装到本地存储库
在这种情况下,我正在安装位于“c:\my-jars\”文件夹中的 3 个文件。
mvn install:install-file -Dfile=C:\my-jars\kuku-jackson-annotations-2.6.4.jar -DgroupId=io.kuku.dependencies -DartifactId=kuku-jackson-annotations -Dversion=2.6.4 - dpackaging=jar
mvn install:install-file -Dfile=C:\my-jars\kuku-jackson-core-2.6.4.jar -DgroupId=io.kuku.dependencies -DartifactId=kuku-jackson-core -Dversion=2.6.4 - dpackaging=jar
mvn install:install-file -Dfile=C:\my-jars\kuku-jackson-databind-2.6.4.jar -DgroupId=io.kuku.dependencies -DartifactId=kuku-jackson-annotations -Dversion=2.6.4 - dpackaging=jar
在项目的 pom 中使用修改后的 JAR
在此示例中,这是项目 pom 中的“依赖项”元素:
<dependencies>
<!-- ================================================== -->
<!-- kuku JARs -->
<!-- ================================================== -->
<dependency>
<groupId>io.kuku.dependencies</groupId>
<artifactId>kuku-jackson-annotations</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>io.kuku.dependencies</groupId>
<artifactId>kuku-jackson-core</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>io.kuku.dependencies</groupId>
<artifactId>kuku-jackson-databind</artifactId>
<version>2.6.4</version>
</dependency>
</dependencies>