在不支持的Java版本上运行Java包

在不支持的Java版本上运行Java包,java,macos,Java,Macos,我有一个PowerMac,它在一些.jar上给了我错误的版本号。我很想让它看起来像我在运行Java6。我如何伪造版本?我还要说,我正在运行PowerPC和Leopard。最可能的问题是,您有Java 6 JAR文件,并且试图在旧的Java安装上运行它们 我如何伪造版本 你问题的答案是你不能。运行Java6特定JAR文件的方法是使用Java6(或更高版本)JRE或JDK 问题是Java类文件的格式已经改变,您的安装无法适应新的格式。这不是一个无缘无故的改变,你可以假装它不存在。Java6(实际上是

我有一个PowerMac,它在一些.jar上给了我错误的版本号。我很想让它看起来像我在运行Java6。我如何伪造版本?我还要说,我正在运行PowerPC和Leopard。最可能的问题是,您有Java 6 JAR文件,并且试图在旧的Java安装上运行它们

我如何伪造版本

你问题的答案是你不能。运行Java6特定JAR文件的方法是使用Java6(或更高版本)JRE或JDK

问题是Java类文件的格式已经改变,您的安装无法适应新的格式。这不是一个无缘无故的改变,你可以假装它不存在。Java6(实际上是Java5)支持泛型类型、枚举、注释和其他东西。假设jar包含使用这些新语言特性的代码,那么旧的JRE根本不知道如何处理它们

有两种解决方案:

  • 在所有计算机上将Java安装升级到所需级别。这是最好的解决方案。。。如果这是一个选项。。。因为这意味着您的用户将从安全性、bug修复和性能增强中获益。(而且您的项目进度不会因为支持遗留平台的限制而受到阻碍。)

  • 编译所有代码,以确保与仍然需要使用的最旧版本的Java兼容。可以在相应的旧JDK上编译,也可以使用适当的-source/-target/-Xbootclasspath选项在较新的JDK上编译。。。如
    javac
    手册页面所述

第二种解决方案的缺点是,如果所讨论的JAR文件的源代码使用了最近添加的Java语言特性或API,那么为旧平台重新编译将失败。要解决这个问题,你需要重写你的代码,用古旧的东西来替换现代的东西。这不是一个好的解决方案,国际海事组织


另一种可能是您看到的JAR文件已损坏。这不太可能,但如果您使用applet或webstart,并且服务器提供的是错误页面而不是JAR文件,则可能会发生这种情况



第三种可能是,您根本没有正确配置Mac的Java安装。将Java7设为默认值应该允许您运行所有内容,而不会出现类版本问题。(谢谢@paulsm4)注意,我帮不了你因为我没有在Mac上使用Java。

最可能的问题是您有Java 6 JAR文件,并且您正试图在旧的Java安装上运行它们

我如何伪造版本

你问题的答案是你不能。运行Java6特定JAR文件的方法是使用Java6(或更高版本)JRE或JDK

问题是Java类文件的格式已经改变,您的安装无法适应新的格式。这不是一个无缘无故的改变,你可以假装它不存在。Java6(实际上是Java5)支持泛型类型、枚举、注释和其他东西。假设jar包含使用这些新语言特性的代码,那么旧的JRE根本不知道如何处理它们

有两种解决方案:

  • 在所有计算机上将Java安装升级到所需级别。这是最好的解决方案。。。如果这是一个选项。。。因为这意味着您的用户将从安全性、bug修复和性能增强中获益。(而且您的项目进度不会因为支持遗留平台的限制而受到阻碍。)

  • 编译所有代码,以确保与仍然需要使用的最旧版本的Java兼容。可以在相应的旧JDK上编译,也可以使用适当的-source/-target/-Xbootclasspath选项在较新的JDK上编译。。。如
    javac
    手册页面所述

第二种解决方案的缺点是,如果所讨论的JAR文件的源代码使用了最近添加的Java语言特性或API,那么为旧平台重新编译将失败。要解决这个问题,你需要重写你的代码,用古旧的东西来替换现代的东西。这不是一个好的解决方案,国际海事组织


另一种可能是您看到的JAR文件已损坏。这不太可能,但如果您使用applet或webstart,并且服务器提供的是错误页面而不是JAR文件,则可能会发生这种情况



第三种可能是,您根本没有正确配置Mac的Java安装。将Java7设为默认值应该允许您运行所有内容,而不会出现类版本问题。(谢谢@paulsm4)注意,我帮不了你因为我不在Mac电脑上使用Java。

当程序询问“我运行的是什么版本”时,你想伪造返回的版本吗?如果是这样,我怀疑有没有办法,除了以某种方式修改JDK之外;这不仅仅是“Java报告错误版本”的问题。唯一的解决方案是升级JVM或为较低版本重新编译类。(可能有一个工具可以将类文件格式更改为兼容的格式,但这充其量也不确定。)我有OpenJDK 7和Java 1。5@Keaton然后使用Java 7 JVM-听起来像是在使用Java 5版本(有一种方法可以在系统首选项中指定这一点。)问题是它也不适用于这一点。它绝对讨厌它。当程序询问“我运行的是什么版本”时,你想伪造返回的版本吗?如果是这样,我怀疑有没有办法,除了以某种方式修改JDK之外;这不仅仅是“Java报告错误版本”的问题。唯一的解决方案是升级JVM或为较低版本重新编译类。(可能有一个工具可以将类文件格式更改为兼容的格式,但这充其量也不确定。)我有OpenJDK