将fastxml.jackson类重定位到my.package.fastxml.jackson

时间:2016-01-13 10:51:54

标签: jackson maven-shade-plugin jarjar

我正在尝试将包从“com.fasterxml.jackson”重新定位到我自己的包中(即“mypackage.com.fasterxml.jackson”),然后在我拥有的另一个JAR中使用它。

我已设法运行maven-shade插件来使用此配置执行此操作:

compatible mode

我面临的问题是当我尝试使用它时,由于某些原因Eclipse不断添加对原始jackson(“mypackage.com.fasterxml.jackson”)的依赖,而不是新的。

为了清楚起见,我的设置是: - Jar X在ThirdPartyArtifcats中具有依赖性。 - ThirdPartyArtifcats引用Jackson并运行maven-shade插件,因此它包含Jackson的修改版本(mypackage.com.fasterxml.jackson)。

当我尝试在Jar X中使用Jackson的ObjectMapper时,Eclipse不断提供对原始jackson的引用。

我将感激你的帮助!

1 个答案:

答案 0 :(得分:1)

最后,我使用了JarJar并创建了一个修改过的JAR。然后,我已经为我的代码添加了依赖项并手动更新,因此它现在与修改后的包而不是原始包相关。

这是一个描述我所做过的事情的程序:

如何使用JarJar将JAR的类从一个包重定位到另一个包

在这个例子中,我们将从" com.fasterxml.jackson"更改包。 to" 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

  1. 创建" rules.txt"文件。该文件的内容应该是(观察' @'字符之前的时间段): 规则com.fasterxml.jackson。** io.kuku.dependencies.com.fasterxml.jackson。@ 1

  2. 运行以下命令: java -jar jarjar-1.4.jar process rules.txt jackson-databind-2.6.4.jar kuku-jackson-databind-2.6.4.jar

  3. 将修改后的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

    在这个例子中,这是"依赖"项目中的元素:

    <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>