我正在编写一个需要在多个平台上监视文件系统事件的程序。Java 7 包含一个新的标准库 ,WatchService
它充当不同类型的文件系统事件处理程序(inotify
、FSEvents
等FileSystemWatcher
)的抽象。
使用 Java 7 编译器编译的代码是否需要 Java 7 JVM 才能运行?
如果是这样,对于该平台(旧的 OSX、Windows XP 等)没有安装/可用的 JVM 7 的客户端机器,我会遇到各种问题吗?
使用 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 之前,我们无法确定将支持哪些平台。如果存在不支持的重要平台,则很有可能:
(但我不会打赌任何支持 Windows pre-XP 的人,而且旧版本的 OSX 是值得怀疑的,IMO。)
我的建议是不要“跳”到 Java 7 ......但是......如果支持旧平台是一项重要要求。
是与否,Java 7 版本是 java 字节码规范。您可以使用该标志编译为旧版本的字节码-target
,但要使用 java 7 核心库,您需要有一个 java 7 发行版。
有一个项目正在进行中,为 OS X 提供 java 7。我已经使用过它,它对我来说效果很好。 适用于 Mac 的二进制 Java 7
不,在 Java 6 VM 上运行为 Java 7 编译的代码不会有各种问题。您只会遇到一种问题:代码将拒绝运行,因为在 Java 6 VM 上,因为 Java 6 VM 将识别类文件中的版本号高于 Java 6 VM 所知道的任何内容。你会得到一个容易诊断的错误。
您的客户将无法使用该代码,但至少您不会试图找出细微问题的原因。
Java 7 编译器将编译来自 JDK 7 及更低版本的代码,但 JDK 6 及更低版本无法编译使用来自 JDK 7 的对象/类的代码。
使用 Java 7 编译器编译的代码是否需要 Java 7 JVM 才能运行?
是的!!!!
如果是这样,对于没有为该平台安装/可用的 JVM 7 的客户端机器(旧的 OSX、Windows XP 等),我会遇到各种问题吗?
是的,因为类版本号将高于 Java 6 和更低的 JVM 所需的版本号。必须通知客户端将其 JVM 升级到 Java 7。