2017-01-17 14 views
0

私はthisを読みましたが、は十分ではありませんプログラムからJVMのバージョンを見つける方法...詳細は?

私は何を意味することは次のとおりです。私は

のjava -version

を実行したときに私が取得:

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のバージョンにアクセスするためのプログラム的な方法( "私はリンクしている質問で概説されているように"私の問題

MX bean --- vmversion: 2.8 

を使用して

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 

::)、私は唯一のような値を見るために私達のビルド・サーバーは、IBMのJavaのわずか古いバージョンを実行します。 java -versionは次のように表示します。

J9VM - R28_Java8_SR1_20150410_1531_B243669 

しかし、これらのシステムプロパティを印刷すると、そのような詳細は失われます。私は、少し古いJVMと新しいものを区別できるJavaコードを書く方法を見つけられませんでした。

短いストーリー:「JVM内で」そのような詳細レベルを得るためのプログラム的な方法はありますか?

(基本的に私は動的に私たちのJUnitテストの一部を無効にすることが必要で、彼らは単に古いJVMで動作いけない。しかし、新しいJVMで私の地元のEclipseインストールで実行しているとき、私はそれらを実行することにしたい)

+0

私はMXの豆をチェックしましたが、それ以上の情報を明らかにしていないようです。ですから、 'java.home'プロパティを読み込み、' bin'と 'java'をタックし、' -version'引数でそれを実行し、出力を読み込んで解析する以外の方法はありません。 – Holger

答えて

3

私はIBM Javaを持っていません、Oracle Javaだけです。私はjava -versionを行うと私が取得:

java version "1.8.0_91" 
Java(TM) SE Runtime Environment (build 1.8.0_91-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode) 

私はこのコードでその正確な出力再現することができます:IBMのJavaによって追加の他の情報があるかもしれません

System.out.printf("java version \"%s\"%n" + 
        "%s (build %s)%n" + 
        "%s (build %s, %s)%n", 
        System.getProperty("java.version"), 
        System.getProperty("java.runtime.name"), 
        System.getProperty("java.runtime.version"), 
        System.getProperty("java.vm.name"), 
        System.getProperty("java.vm.version"), 
        System.getProperty("java.vm.info")); 

を。

new TreeMap<>(System.getProperties()).entrySet().forEach(e -> 
     System.out.printf("%s = %s%n", e.getKey(), e.getValue()) 
); 
+1

面白いこと:家に帰る途中ですべての物件をダンプすると思った。この考え方を完全に忘れてしまった。だから、ちょうど爪を打った - 少なくともIBM JDKは、私が探しているものを私に与えるプロパティ "java.fullversion"を持っています!だから、単純に、しかし非常に役立つ。あなたの道をupvotesの束を送った... – GhostCat

関連する問題