首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDK遵从性-一个虚假的安全性?

JDK遵从性-一个虚假的安全性?
EN

Stack Overflow用户
提问于 2012-08-31 15:23:03
回答 3查看 251关注 0票数 5

我安装了Java7,但将项目的JDK兼容性设置为Java6。不幸的是,这与使用Java6编译并不相同。

例如,接口javax.imageio.stream.ImageInputStream在Java7中扩展了Closable,但在Java6中不是这样的。在我的设置下(Java7符合Java6),使用ImageInputStream可以很好地编译(Java7符合Java6),但在使用Java6时会出现编译错误。是这样的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-31 15:34:20

为了为较旧的JRE编译Java代码,您需要做两件事:

  • 适当地设置了合规性级别。正如dystroy所解释的那样,这确保了编译器生成旧的JVM可以understand.
  • Use旧的Java系统库的字节码。这将确保您针对Java系统库的版本(java.lang.*、java.net.*等)进行编译。与旧的JRE一起提供。

你已经谈到了第一点,但没有谈到第二点,这就是你的问题。

如何做到这一点取决于您的构建环境。

在Eclipse中,要使用的Java System库被设置为构建路径的一部分:转到项目属性/ Java Build Path / Libraries,然后删除错误的"JRE“,并使用"Add Library...".

  • When compiling
  • javac,you use option -bootclasspath”添加正确的库。示例:javac -target 1.5 -bootclasspath jdk1.5.0/lib/rt.jar OldCode.java (来自javac manpage的“交叉编译选项”部分)。
票数 10
EN

Stack Overflow用户

发布于 2012-08-31 15:27:26

对于JDK遵从性,您设置的主要是类格式。

类的字节码格式有几次演变。JDK可以用以前的格式编译,而VM不能执行用更新的格式编译的类。

但是所使用的库始终是您用于执行的JDK中可用的库。javax.imageio.stream.ImageInputStream的JDK6版本没有与Java7捆绑在一起。

票数 6
EN

Stack Overflow用户

发布于 2012-08-31 15:35:30

编译时使用bootclasspath选项。我以为JDK7警告说,如果使用cross-compilation,就不要这么做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12210665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档