12

我已将 Web 应用程序部署到 Google 应用程序引擎,并且我的 Web 服务使用 jersey 1.14 框架。当我尝试在 GAE 上使用或调用 Web 服务时,我得到一个 java.lang.IncompatibleClassChangeError:Implementing class。我四处搜索并意识到 jersey 1.14 依赖于 asm 3.1 而 google app engine 使用 asm 4.0 并意识到我必须使用 JarJar 来打包依赖项来解决这个问题,但我不知道如何做到这一点与罐子。我发现的教程非常神秘,面向有经验的程序员。所以有人可以发布一个面向初学者的教程,或者引导我完成解决这个问题的步骤。

4

2 回答 2

17

好吧,这是一个很晚的答案,但是如果有人经过可能会有所帮助。我将举一个例子来解释这一点。jarjar 可用于重新打包 java 库。它可用于更改命名空间,例如 org.apache.common.codec 需要更改为 some_random_name.org.apache.common.codec。稍后从jarjar 下载站点下载 jarjar将要更改的 jar 文件 (myinjar.jar) 和下载的 jarjar 粘贴到一个文件夹中并java -jar jarjar-1.4.jar process myrules.txt myinjar.jar myoutjar.jar在 myrules.txt 中运行此命令添加这些行

rule org.apache.commons.codec.** some_random_name.org.apache.commons.codec.@1

输出 myoutjar.jar 将保存到同一文件夹中,您可以在项目中使用它而不会发生任何冲突

于 2015-11-08T09:33:35.397 回答
0

您可以使用 jdk 的 jar 命令来提取和合并 jar 文件。
jar -xvf firstjar.jar .... 它将提取 jar 类文件夹/包明智 -com/pak1/pak2
现在同样提取第二个 jar 并合并两个展开的文件夹
不,您可以创建一个合并的类文件的 jar。
jar -cvf mappedjar.jar [folders name [ex com org ...]],有关详细信息,请检查 jar 命令的工作方式。

于 2014-01-10T12:43:54.013 回答