3

我正在编写一个需要在多个平台上监视文件系统事件的程序。Java 7 包含一个新的标准库 ,WatchService它充当不同类型的文件系统事件处理程序(inotifyFSEventsFileSystemWatcher)的抽象。

使用 Java 7 编译器编译的代码是否需要 Java 7 JVM 才能运行?

如果是这样,对于该平台(旧的 OSX、Windows XP 等)没有安装/可用的 JVM 7 的客户端机器,我会遇到各种问题吗?

4

4 回答 4

5

使用 Java 7 编译器编译的代码是否需要 Java 7 JVM 才能运行?

是的。

您将能够使用 Java 7 编译器进行编译-target 6.0,但如果代码依赖于 Java 7 特定的类库,这将无济于事……就像您的那样。

如果是这样,对于没有为该平台安装/可用的 JVM 7 的客户端机器(旧的 OSX、Windows XP 等),我会遇到各种问题吗?

是的。在“已安装”方面肯定是这种情况。如果您的代码依赖于 Java 7,最好的选择是让您的客户安装 Java 7 JVM 来运行它。(并排安装多个 Java 版本是一件简单的事情,其他 Java 应用程序很有可能在 Java 7 JVM 上运行良好。)

在“可用”方面,在 Oracle 实际发布 Java 7 之前,我们无法确定将支持哪些平台。如果存在不支持的重要平台,则很有可能:

  • 有人会将 OpenJDK 7 移植到该平台,或者
  • 第三方供应商(例如 IBM)将在Java 7 产品中支持它。

(但我不会打赌任何支持 Windows pre-XP 的人,而且旧版本的 OSX 是值得怀疑的,IMO。)


我的建议是不要“跳”到 Java 7 ......但是......如果支持旧平台是一项重要要求。

于 2011-03-13T23:25:57.963 回答
2

是与否,Java 7 版本是 java 字节码规范。您可以使用该标志编译为旧版本的字节码-target,但要使用 java 7 核心库,您需要有一个 java 7 发行版。

有一个项目正在进行中,为 OS X 提供 java 7。我已经使用过它,它对我来说效果很好。 适用于 Mac 的二进制 Java 7

于 2011-03-13T23:25:44.667 回答
1

不,在 Java 6 VM 上运行为 Java 7 编译的代码不会有各种问题。您只会遇到一种问题:代码将拒绝运行,因为在 Java 6 VM 上,因为 Java 6 VM 将识别类文件中的版本号高于 Java 6 VM 所知道的任何内容。你会得到一个容易诊断的错误。

您的客户将无法使用该代码,但至少您不会试图找出细微问题的原因。

于 2011-03-14T01:02:50.750 回答
1

Java 7 编译器将编译来自 JDK 7 及更低版本的代码,但 JDK 6 及更低版本无法编译使用来自 JDK 7 的对象/类的代码。

使用 Java 7 编译器编译的代码是否需要 Java 7 JVM 才能运行?

是的!!!!

如果是这样,对于没有为该平台安装/可用的 JVM 7 的客户端机器(旧的 OSX、Windows XP 等),我会遇到各种问题吗?

是的,因为类版本号将高于 Java 6 和更低的 JVM 所需的版本号。必须通知客户端将其 JVM 升级到 Java 7。

于 2011-03-13T23:29:38.110 回答