【问题标题】:can i make .jar file compatible with older versions of java我可以使 .jar 文件与旧版本的 java 兼容吗
【发布时间】:2014-05-06 16:47:45
【问题描述】:

我收到此错误:

由于我的 Java 版本。我想制作一个与 Java 的旧版本和新版本兼容的 .jar 文件。我的 PC 没有问题,但我的听众使用的是旧版本的 Java。如何使我的程序与旧版本和新版本兼容?我应该在多大程度上使用它?

【问题讨论】:

  • 他的版本正朝着相反的方向发展。我会说很接近,但没有雪茄。
  • 那么,你有没有找到一种方法来重新编译/转换一个 jar 而无需从源代码重新编译它?

标签: java jar versions


【解决方案1】:

您可以返回并编译源代码并使用与特定 java 版本兼容的旧 javac 生成 jar 文件。

【讨论】:

  • 你好,downvoter。你能告诉我这个答案有什么问题吗?
  • 当 Java 向前兼容时,他为什么要回去用旧的 javac 编译,尤其是当源代码已经用旧的 javac 编译时?你的回答没有意义。
【解决方案2】:

要么使用旧的编译器编译你的 jar,要么将 java 目标设置为你的客户端支持的版本。

要设置版本,请关注此线程:Setting the target version of Java in ant javac

【讨论】:

  • 请注意,如果您更改编译器的sourcetarget,那么您还必须从相应的Java 版本中获取类库的副本并设置bootclasspath,否则,即使您生成的字节码与 Java 7 JVM 兼容,它仍可能调用仅存在于 Java 8 中的方法。我通常发现首先使用正确的 Java 目标版本进行编译更容易。
【解决方案3】:

UnsupportedClassVersionError 与 JAR 无关(JAR 只是一个 zip 存档),而是关于 JAR内部的类。

.class 文件只是编译后的 Java 源代码,格式为 JVM(Java 虚拟机)用于在底层平台上执行操作的字节码。字节码的格式每隔一段时间就会发生变化(Java 一直在 since 1991 左右),因此硬编码到已编译类格式中的版本号通常会在 JRE 版本之间发生变化。

tl;博士: 您需要做的是获取源代码并针对您想要的 JRE 重新编译。没有办法只告诉类文件更改或与旧版本兼容。存档的 JRE 版本为 available,但您必须注册一个帐户才能下载最新版本以外的版本。

编辑

我没有注意版本号。您的.class 文件是compiled with J2SE 1.8,并且您正在运行JRE7。 Install the JRE 1.8.

【讨论】:

    【解决方案4】:

    唯一确保您的代码实际上与较旧的主要 java 版本兼容的方法是在该版本的 JDK 下编译。虽然它可以为较旧的 JVM 版本进行编译,但如果您使用较新的 JDK 进行编译,您永远无法确定不使用较旧 JRE 中不存在的方法/类。

    为确保您的代码在较新的 JRE 上实际运行良好,您需要使用较新的 JRE 对其进行测试。没有办法解决这个问题,虽然较新的 JRE 保留了很好的向后兼容性,但有些细微的差异可能会导致您的代码出错。

    【讨论】:

      【解决方案5】:

      您可以为此目的使用 NetBeans IDE。

      运行>>设置项目配置>>自定义>> 在左侧面板中,选择来源。 最后,选择 Source/Binary 格式的最低 JDK 版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-17
        • 2021-11-05
        • 1970-01-01
        相关资源
        最近更新 更多