【发布时间】:2021-02-06 08:07:32
【问题描述】:
在 JRuby 发行说明中,我经常发现特定版本的 JRuby 与哪个版本的 Ruby 兼容。它与哪个版本的 Java 运行时兼容呢?
例如,http://jruby.org/2016/05/27/jruby-9-1-2-0 页面提到它与 Ruby 2.x 兼容,但没有说明 Java 运行时版本。
【问题讨论】:
在 JRuby 发行说明中,我经常发现特定版本的 JRuby 与哪个版本的 Ruby 兼容。它与哪个版本的 Java 运行时兼容呢?
例如,http://jruby.org/2016/05/27/jruby-9-1-2-0 页面提到它与 Ruby 2.x 兼容,但没有说明 Java 运行时版本。
【问题讨论】:
它不在发行说明中,因为它在不同的版本之间没有变化(除非指定),应该在下载附近,但不是。目前,您可以在项目README中找到
JRuby 的每个主要版本都支持在其发布时所支持的 JVM,以后的版本通常会修复对较新 Java 版本的支持,但不会放弃对旧版本的支持......因此:
JRuby 1.7.x 支持 Java 6 或更高版本(7、8,可能支持 9)
JRuby 9.0/1 支持 Java 7 或更高版本(8,将支持 Java 9)
JRuby 9.2/3 仅支持 Java 8 或更高版本
【讨论】:
看起来 jruby-1.7.27 在 openjdk 15 下对我来说是“工作”,但有一个变化:
平台类 (core/src/main/java/org/jruby/ext/ffi/Platform.java) 正在检测基于 1.x 版本字符串的版本,即 java 1.5、1.6、1.7 等。对于 Java 5、6、7。
openjdk 使用:15.0.2(作为 java 15 的示例)作为版本字符串。
protected Platform(OS_TYPE os) {
... (to line 231)
int version = 5;
try {
String versionString = System.getProperty("java.version");
if (versionString != null) {
String[] v = versionString.split("\\.");
//we are looking for the major version here
//Oracle uses: 1.8.0_101 which has the major version in the second position
//openjdk uses: 15.0.2
version = Integer.valueOf(v[0]);
if(version == 1) {
version = Integer.valueOf(v[1]);
}
}
} catch (Exception ex) {
version = 0;
}
javaVersionMajor = version;
}
【讨论】: