【问题标题】:using JarJar repackaging tool使用 JarJar 重新打包工具
【发布时间】:2012-09-18 17:28:30
【问题描述】:

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

【问题讨论】:

    标签: java google-app-engine jersey


    【解决方案1】:

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

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

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

    【讨论】:

    • 收到Syntax error: Duplicate jar entries: META-INF/LICENSE.txt
    • gikarasojo 也许这个link 可以提供帮助
    • 我有一个复杂的案例。我想使用一些功能,提供了一个库m.jar 这个库要求我使用一个类BindingProvider,它在包javax 中找到,但不在android 中。因此我不得不下载另一个名为android-ws-combine.jar 的jar。当我将它添加到我的模块中并尝试运行它时,我收到了错误Error:trouble processing "javax/xml/XMLConstants.class":。我认为重新包装 android-ws-combine.jar 会有所帮助,但我的另一个 jar m.jar 也会引发一些错误,因为它找不到 javax.BindingProvider,因为我在 repa 时重命名了 javax
    • 也许你不应该改变android-ws-combine.jar,因为重新打包它会改变命名空间并且你的m.jar找不到合适的包并且会抛出一个错误,你可以尝试包括那不用重新打包,看看它是否仍然抛出任何错误?
    • 由于 SPI META-INF/services 文件(Jersey 大量使用它们),这种方法可能存在问题。 AFAIK jarjar 不会处理它们,因此当您合并 jar 时,有关服务提供商的信息会丢失。您应该使用提供的解决方案:stackoverflow.com/questions/19150811/what-is-a-fat-jarstackoverflow.com/questions/11947037/what-is-an-uber-jar
    【解决方案2】:

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

    【讨论】:

    • 这无济于事,因为在运行时具有相同完全限定名称的类会发生冲突。 Jarjar 不仅仅是合并 jars。不过,我仍然必须自己解决这个问题。
    猜你喜欢
    • 2012-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多