【发布时间】:2017-06-02 01:09:02
【问题描述】:
我读过this,但它还不够好!
我的意思是:当我运行时
java-版本
我明白了:
java version "1.8.0"
Java(TM) SE Runtime Environment (build pxa6480sr3fp20-20161019_02(SR3 FP20))
IBM J9 VM (build 2.8, JRE 1.8.0 Linux amd64-64 Compressed References 20161013_322271 (JIT enabled, AOT enabled)
J9VM - R28_Java8_SR3_20161013_1635_B322271
JIT - tr.r14.java.green_20161011_125790
GC - R28_Java8_SR3_20161013_1635_B322271_CMPRSS
...
但是当我使用任何编程方式“从内部”访问 JVM 版本时(如我链接到的问题所述),我只看到如下值:
Property: java.vm.specification.version : 1.8
Property: java.vm.specification.vendor : Oracle Corporation
Property: java.vm.specification.name : Java Virtual Machine Specification
Property: java.vm.version : 2.8
Property: java.vm.vendor : IBM Corporation
Property: java.vm.name : IBM J9 VM
Property: java.specification.version : 1.8
Property: java.specification.vendor : Oracle Corporation
Property: java.specification.name : Java Platform API Specification
使用
MX bean --- vmversion: 2.8
我的问题:我们的构建服务器运行稍旧版本的 IBM java。 java -version 会显示,就像
J9VM - R28_Java8_SR1_20150410_1531_B243669
但是:当我打印那些系统属性时,这些细节就丢失了!我还没有找到一种编写 java 代码的方法,能够将稍旧的 JVM 与较新的 JVM 区分开来。
长话短说:是否有任何程序化方式可以“在我的 JVM 内”做某事,从而为我提供该级别的详细信息?
(基本上我需要它来动态禁用我们的一些 JUnit 测试;它们根本不适用于较旧的 JVM;但我希望在使用较新 JVM 的本地 eclipse 安装中运行时执行它们)
【问题讨论】:
-
我检查了 MX bean,它们似乎没有透露更多信息。所以我认为除了读取属性
java.home,添加bin和java,使用-version参数执行它并读取并解析输出之外别无他法。