将 fastxml.jackson 类 重定位到 my.package.fastxml.jackson
Relocating fastxml.jackson classes to my.package.fastxml.jackson
我正在尝试将 "com.fasterxml.jackson" 中的包重新定位到我自己的包中(即 "mypackage.com.fasterxml.jackson"),然后在我拥有的另一个 JAR 中使用它。
我已经设法 运行 使用此配置的 maven-shade 插件来完成它:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
<createDependencyReducedPom>true</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>com.fasterxml.jackson</pattern>
<shadedPattern>mypackage.com.fasterxml.jackson</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
我面临的问题是当我尝试使用它时,出于某种原因,Eclipse 不断向原始 jackson ("mypackage.com.fasterxml.jackson") 添加依赖项,而不是新的。
为了清楚起见,我的设置是:
- Jar X 依赖于 ThirdPartyArtifcats。
- ThirdPartyArtifcats 引用 Jackson 和 运行 maven-shade 插件,因此它包含 Jackson (mypackage.com.fasterxml.jackson) 的修改版本。
当我尝试在 Jar X 中使用 Jackson 的 ObjectMapper 时,Eclipse 不断提供对原始 jackson 的引用。
非常感谢你的帮助!
最后我使用了 JarJar 并创建了一个修改后的 JAR。然后我在我的代码中添加了一个依赖项并手动更新它,所以它现在与修改后的包相关而不是原始包。
下面是描述我所做工作的程序:
如何使用 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" 文件。该文件的内容应该是(注意“@”字符之前的句点):
规则 com.fasterxml.jackson.** io.kuku.dependencies.com.fasterxml.jackson.@1
运行命令如下:
java -jar jarjar-1.4.jar 进程 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" 元素:
<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>
我正在尝试将 "com.fasterxml.jackson" 中的包重新定位到我自己的包中(即 "mypackage.com.fasterxml.jackson"),然后在我拥有的另一个 JAR 中使用它。
我已经设法 运行 使用此配置的 maven-shade 插件来完成它:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
<createDependencyReducedPom>true</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>com.fasterxml.jackson</pattern>
<shadedPattern>mypackage.com.fasterxml.jackson</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
我面临的问题是当我尝试使用它时,出于某种原因,Eclipse 不断向原始 jackson ("mypackage.com.fasterxml.jackson") 添加依赖项,而不是新的。
为了清楚起见,我的设置是: - Jar X 依赖于 ThirdPartyArtifcats。 - ThirdPartyArtifcats 引用 Jackson 和 运行 maven-shade 插件,因此它包含 Jackson (mypackage.com.fasterxml.jackson) 的修改版本。
当我尝试在 Jar X 中使用 Jackson 的 ObjectMapper 时,Eclipse 不断提供对原始 jackson 的引用。
非常感谢你的帮助!
最后我使用了 JarJar 并创建了一个修改后的 JAR。然后我在我的代码中添加了一个依赖项并手动更新它,所以它现在与修改后的包相关而不是原始包。
下面是描述我所做工作的程序:
如何使用 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" 文件。该文件的内容应该是(注意“@”字符之前的句点): 规则 com.fasterxml.jackson.** io.kuku.dependencies.com.fasterxml.jackson.@1
运行命令如下: java -jar jarjar-1.4.jar 进程 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" 元素:
<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>