如果您曾经使用过java,我认为至少有一次您遇到过不支持版本的错误。每个人都知道如何修复它,改变JRE等等。
今天,我想知道如何制作可以在任何地方(任何JRE)运行的jar文件。
答案 0 :(得分:5)
简短回答:不可能。
更好的答案:定义您的最低目标(实际上不应该是“任何JRE”)。也许你的意思是“标准的J2SE 1.4安装”或“在Android上”(这不是真的一个“JRE”)。
确切的最低要求是使用的Java语言功能,API和/或其他库使用(它们编译的对象是什么?)以及不同Java平台的差异的组合。 DVD播放器非常不像台式机。
答案 1 :(得分:2)
我不确定你是否希望将其作为一个目标,这些天大多数人都瞄准Java 1.4+平台,这意味着它们也将在1.5和1.6上运行,因为几乎没有人使用任何版本的Java 1.4,你应该安全。
话虽如此,它并非完全不可能,只是非常努力,维护是一场噩梦。
答案 2 :(得分:0)
即使您将其作为目标,您也只能测试一个子集。根据您的自动测试的综合程度,您可能只想定义一小组(可能是6个左右)正确支持的JRE。如果有人试图在别的东西上运行它,那么它可能会起作用,但你不能声称已经测试过它。
如果它是一个GUI应用程序,这更像是一场噩梦,因为测试GUI非常糟糕。因此,在这种情况下,您需要支持更少的JRE。
请记住,您需要测试JRE / OS的组合,并且有很多不同的操作系统 - 至少有十几种不同版本的Windows可供使用(不计算本地化)。
答案 3 :(得分:0)
如果您创建的应用程序是使用Java 1.5语法编写的,则可以尝试使用Retrotranslator。它使用字节码操作来修改您的类和一些运行时代码,这些代码可以允许您的代码与版本1.4和1.3的JVM一起运行。
当然,它有很多限制,但它支持1.5规范中的许多功能(摘自其网站):
支持哪些Java 5.0功能?
- 泛型
- 注解
- 关于泛型和注释的反思
- Typesafe enums
- 自动装箱/拆箱
- 增强型循环
- 可变参数
- 协变返回类型
- 格式化输出
- 静态导入
- 并发实用程序
- 收藏框架改进
在同一页面的末尾还有一些指向类似工具的链接。但Retrotranslator似乎是唯一仍然积极维护的人。
答案 4 :(得分:0)
当您的java类在一个版本中编译时会出现此错误。在另一个版本中运行。