由于公共Java SE 6 JRE越来越接近它的EOL(十一月'12),我考虑移植我的项目从Java 6到Java 7中这would'nt是一个大问题,如果苹果将提供一个Java JRE 7用于Mac OS X.但由于苹果不愿意这样做,我还是要支持,只有有一个Java JRE 6用户。
有没有办法在Java 7的javac编译Java 6兼容的二进制文件(类文件)? 当然,我知道,这样做的时候,我不能使用新的Java 7的功能。
谢谢anticiption!
由于公共Java SE 6 JRE越来越接近它的EOL(十一月'12),我考虑移植我的项目从Java 6到Java 7中这would'nt是一个大问题,如果苹果将提供一个Java JRE 7用于Mac OS X.但由于苹果不愿意这样做,我还是要支持,只有有一个Java JRE 6用户。
有没有办法在Java 7的javac编译Java 6兼容的二进制文件(类文件)? 当然,我知道,这样做的时候,我不能使用新的Java 7的功能。
谢谢anticiption!
这取决于。 如果你的程序不使用新的Java 7语言的扩展,那么你可以与运行Java编译器-source 1.6
和-target 1.6
选项。 但是如果你使用的Java 7语言扩展则-source 1.6
会导致编译错误。
当然,我知道,这样做的时候,我不能使用新的Java 7的功能。
这包括Java 7的语言功能...和依赖于Java 7名更改标准类库的API。 另外要注意,也有行为上的差异(又名API错误修复)可能导致代码运行在不同的Java 6和Java 7,他们应该在Java 6来描述Java 7的过渡文件小的数目。
更新 -这可能不再是一个你无论如何问题,因为Oracle已经发布的Java 7的Mac OSX。
我已经安装了JDK6。 如果你检查的javac手册页:
Cross-Compilation Options
By default, classes are compiled against the bootstrap and extension classes of the platform that javac shipped with. But javac also supports cross-compil‐
ing, where classes are compiled against a bootstrap and extension classes of a different Java platform implementation. It is important to use -bootclasspath
and -extdirs when cross-compiling; see Cross-Compilation Example below.
-target version
Generate class files that target a specified version of the VM. Class files will run on the specified target and on later versions, but not on earlier
versions of the VM. Valid targets are 1.1 1.2 1.3 1.4 1.5 (also 5) and 1.6 (also 6).
是的,但在某些情况下没有。 在Java 1.6的,他们没有与资源的尝试,用绳子,或者多catch语句等,所以该计划的这些部分将无法编译切换。 但Java的想法是一次编译,到处运行; 因此代码可以在旧的JVM工作
斯蒂芬C'S答案是正确的,但不完整。 你的Java 7的程序将无法在Java 6的编译,如果他们使用的Java 7语言功能,但被警告微妙其他错误仍然可以使用一个开发者用Java 6编码和另一个编译Java 7发生。
就拿java.sql.Driver中。 在Java 7中,接口获得一个额外的方法。
Java 7的开发此开发实现驱动程序接口,并使用在实施额外的驱动程序的方法“替换”的注释。 因为Java 6的编译器看到类确实有该方法和代码中被选中。编译程序如Java 6并不意味着Java 6的编译器会自动切换到使用Java 6来源的程序编译罚款作为Java 6的程序码!
Java 6的开发 Java 6的开发者试图构建Java 7开发商承诺的代码,并得到即使Java 7的开发者并没有实现任何Java 7语言结构编译错误。
因此,即使你可以编译为Java 6中,我建议不这样做。