如何检查哪个 JRuby 版本与哪个 Java 版本兼容?
How to check which JRuby version is compatible with which Java version?
在 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 对我来说 'working' 在 openjdk 15 下有一个变化:
平台 class (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;
}
在 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 对我来说 'working' 在 openjdk 15 下有一个变化:
平台 class (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;
}