我安装了Java 7但是将我的项目JDK合规性设置为Java 6.不幸的是,这与使用Java 6进行编译不同。
例如,界面javax.imageio.stream.ImageInputStream
在Java 7中扩展Closable
,这在Java 6中不是这种情况。使用ImageInputStream
,其中Closable
在我的设置下编译正常(Java 7符合Java 6)但是给出了使用Java 6时编译错误。
这应该是这样吗?
答案 0 :(得分:10)
为了编译旧JRE的Java代码,您需要做两件事:
你已经涵盖了第一点,但不是第二点,因此是你的问题。
如何执行此操作取决于您的构建环境。
javac
进行编译时,使用选项-bootclasspath
。示例:javac -target 1.5 -bootclasspath jdk1.5.0/lib/rt.jar OldCode.java
(来自javac manpage,“交叉编译选项”部分)。答案 1 :(得分:6)
您使用JDK合规性设置的内容主要是类格式。
类的字节码格式有几个变化。 JDK可以使用以前的格式进行编译,而VM无法执行以更新格式编译的类。
但是使用的库总是您用于执行的JDK中可用的库。 JDK 6版本的javax.imageio.stream.ImageInputStream未与Java 7捆绑在一起。
答案 2 :(得分:3)
编译时使用bootclasspath
选项。我认为JDK 7警告不要这样做,如果做cross-compilation。