【问题标题】:change compile version of existing jar file in java在java中更改现有jar文件的编译版本
【发布时间】:2016-05-25 09:08:46
【问题描述】:

我有 bccapi-1.2.0.jar 文件,我想在 linux 服务器上运行,但由于它的编译版本,它无法运行。

jar文件的编译版本是jdk1.7,我从URL下载的:http://www.antepedia.com/detail/p/bccapi.html

服务器的jdk是jdk1.5。那么如何使用 jdk1.5 环境重新编译现有的 jar。 当我试图运行它时,它会给出这样的错误

java.lang.UnsupportedClassVersionError:.class 中的版本号错误 文件(无法加载类 com.lambdaworks.crypto.SCryptUtil) org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2858) org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) com.elitecore.activation.utilities.CryptUtilities.validateScryptPassword(CryptUtilities.java:135) inventory.Application.CUsers.getUserBeanByNameandPassword(CUsers.java:131) inventory.modes.ChkLogin.process(ChkLogin.java:55) 库存.servlet.UserServlet.doPost(UserServlet.java:62) javax.servlet.http.HttpServlet.service(HttpServlet.java:643)

当我在服务器上执行 jar 文件时发生此错误。

【问题讨论】:

  • 是否不可能更新您的服务器以拥有过去十年发布的 JRE?
  • 如果你下载的jar是用jdk1.7编译的,它可能使用了jdk1.5中不存在的特定功能。恐怕您必须将服务器上的 jre 升级到 1.7
  • 感谢您的回复,但现在不可能,因为整个项目及其依赖项都在那里。所以如果我这样做,那么可能会出现很多问题。

标签: java jar jdk1.5


【解决方案1】:

最后我从https://github.com/wg/scrypt/blob/master/src/main/java/com/lambdaworks/crypto/SCryptUtil.java找到了所需的java文件(com.lambdaworks,SCrypUtils.java)源代码

所以我在 Eclipse 中打开,只需将编译版本更改为 java 1.5,就像右键单击项目 -> 属性 -> java 编译器 -> 更改为 1.5

然后用 jar 导出这个项目。所以我很高兴我不需要更改服务器配置并成功运行项目。

【讨论】:

    【解决方案2】:

    从这里下载源代码:https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/bccapi/source-archive.zip 并尝试为/使用 Java 5 编译库,也许您必须应用一些更改。

    【讨论】:

    • 感谢您的回复。我需要 lambdaworks.crypto.SCryptUtis.java 但没有你提供源代码的地方。而且我不需要更改现有代码,只需要使用 jdk1.5 重新编译 jar 文件或代码。
    • Java 1.5 和 1.7 的字节码略有不同,并且有些事情发生了变化,例如覆盖注释、打开字符串、菱形、尝试使用资源等。试试这个: - 反编译你的 jar,例如via cfr benf.org/other/cfr - 创建一个新项目 - 将您的项目设置为 Java 5 项目 - 粘贴反编译的代码 - 修复所有错误和警告 - 导出您自己的库。在这种情况下,我不确定许可证。
    【解决方案3】:

    您应该尝试将项目的环境更改为 jdk 1.7,以便您可以使用您的 jar 文件。

    【讨论】:

    • 是的,我知道。但我不能这样做,因为服务器上有多个项目并且使用 jdk1.5 运行。所以我不敢做这个解决方案。
    • 所以我们不能用不同版本的java重新编译现有的jar文件。?
    • @vimalsuthar 对不起我的错误,我的意思是你可以将你的项目环境设置为 jdk1.7 并且应该能够在服务器上运行。对我来说,我有多个项目同时在 jdk 1.7 和 1.5 上运行,它们仍然能够在同一台服务器上运行。
    • 这很好@chit Khine,但我无法像我之前所说的那样用 jdk1.5 转换整个项目,所以我需要重新编译与 jdk1.5 兼容的 jar,而且我不需要更改在 jar 文件中,我只需要在 jdk1.5 中重新编译。
    • 如果您有足够的信心,您可以将您的服务器环境更改为 1.7,但您担心这会给您带来问题。我不知道你如何运行需要 1.7 和 1.5 的 jar
    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 2020-01-27
    • 2019-01-31
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多