Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jar与所有JRE版本的兼容性_Java_Jar - Fatal编程技术网

Java Jar与所有JRE版本的兼容性

Java Jar与所有JRE版本的兼容性,java,jar,Java,Jar,我的小程序应用程序在JRE 7上编译并创建了签名jar。我在我的客户机上部署了.jar文件。但我在IE上遇到了一个例外,即“不支持的major.minor版本51.0”。我想提供一个小程序jar文件,以兼容所有浏览器。如何使兼容性成为jar文件?使用javac中的-source和-target标志,将源文件编译为较低的目标版本,具体地说,是您想要支持的目标JVM版本 例如: javac -source 5 -target 5 -sourcepath /path/to/code -d /path/

我的小程序应用程序在JRE 7上编译并创建了签名jar。我在我的客户机上部署了.jar文件。但我在IE上遇到了一个例外,即“不支持的major.minor版本51.0”。我想提供一个小程序jar文件,以兼容所有浏览器。如何使兼容性成为jar文件?

使用
javac
中的
-source
-target
标志,将源文件编译为较低的目标版本,具体地说,是您想要支持的目标JVM版本

例如:

javac -source 5 -target 5 -sourcepath /path/to/code -d /path/to/compiled/code *.java

使用
javac
中的
-source
-target
标志,将源文件编译为较低的目标版本,具体地说,就是要支持的目标JVM版本

例如:

javac -source 5 -target 5 -sourcepath /path/to/code -d /path/to/compiled/code *.java

最好的方法是使用较旧的JDK编译应用程序。我想这是您直接看到您在使用旧JRE上可用的正确JDK API以及在旧JRE/JDK上可用的正确二进制版本的依赖项(类路径上的第三方JAR文件)的唯一方法。您可以根据需要使用JDK,即使用版本1.3、1.4、1.5或1.6中的JDK


如果该库不适用于较旧的JRE版本,则需要以某种方式对其进行后置移植(可能还需要对其可传递的依赖项进行后置移植)。这可能会变得相当棘手,并且可能需要大量的工作(使用诸如RetroWeaver或类似的工具)。因此,请仔细选择向后兼容性。

最好的方法是使用较旧的JDK编译应用程序。我想这是您直接看到您在使用旧JRE上可用的正确JDK API以及在旧JRE/JDK上可用的正确二进制版本的依赖项(类路径上的第三方JAR文件)的唯一方法。您可以根据需要使用JDK,即使用版本1.3、1.4、1.5或1.6中的JDK


如果该库不适用于较旧的JRE版本,则需要以某种方式对其进行后置移植(可能还需要对其可传递的依赖项进行后置移植)。这可能会变得相当棘手,并且可能需要大量的工作(使用诸如RetroWeaver或类似的工具)。因此,请仔细选择向后兼容性。

另外一个好主意是使用某种API检查器,确保应用程序只使用JDK中可用的库。为什么不使用旧的JDK进行编译?然后您知道它不能使用该版本中不可用的库。编译器是向后兼容的。为什么我们需要让一个旧的编译器来使用故意嵌入的功能?@Makoto当然要使用Java 7中的编译器,但是如果你想知道你的代码是否可以在Java 5上运行,那么你需要指向Java 5版本的rt.jar以及设置
-source
-target
。如果您不这样做,那么您就是针对Java7类库进行编译,以及类似于
If(someString.isEmpty())
将成功编译,但在Java 5上运行时会出现NoSuchMethodError失败。另外,最好使用某种API检查器来确保应用程序只使用任何JDK中可用的库。为什么不使用较旧的JDK进行编译?然后您知道它不能使用该版本中不可用的库。编译器是向后兼容的。为什么我们需要让一个旧的编译器来使用故意嵌入的功能?@Makoto当然要使用Java 7中的编译器,但是如果你想知道你的代码是否可以在Java 5上运行,那么你需要指向Java 5版本的rt.jar以及设置
-source
-target
。如果您不这样做,那么您是在针对Java 7类库进行编译,像
If(someString.isEmpty())
这样的东西将成功编译,但在Java 5上运行时会出现NoSuchMethodError失败。“所有浏览器任何JRE”都是愚蠢的差事。支持Java1.3或更早版本没有太多的价值和麻烦,我个人也不会为1.6之前的任何东西烦恼。“所有浏览器,任何JRE”都是愚蠢的差事。支持Java1.3或更早版本没有太多的价值和麻烦,就个人而言,我不会为1.6之前的任何东西而烦恼。