12971
Java 8 を用いた実行可能jarを配布したいのですが、ユーザーのJavaが7以前であるときに、Java
8のダウンロードを促すメッセージを出したいのですが、このjarファイルを介してそのようなことは可能でしょうか？  
別にソフトウエアを用意する必要があるのでしょうか？
CC BY-SA 3.0
2015-08-03T03:24:42.590
12966
2015-08-05T03:06:11.743
10768
question
java
Java 互換性チェック
起動時にJava7以前には無くてJava8以降にあるクラスなりメソッドなりをチェックしてみるとか？  
それでなければダウンロードを促すメッセージを出力してプログラム終了。あれば通常動作とかいかが？
CC BY-SA 3.0
2015-08-03T04:46:47.423
12971
2015-08-03T04:46:47.423
10771
12966
answer
JWS (Java Web Start) を使用して配布するのであれば、JNLP ファイルの j2se
要素に指定するだけでメッセージなりを出すことができるはずです。  
昨今は JWS を使用してゐる例はあまり見かけないのですが。
CC BY-SA 3.0
2015-08-03T06:22:01.883
12981
2015-08-03T06:22:01.883
4381
12966
answer
Javaのバージョンを取得するシステムプロパティはいくつか種類があります。

  1. `java.version`
  2. `java.specification.version`
  3. `java.vm.version`
  4. `java.runtime.version`

取得する方法は単純で、例えば以下のようなコードを実行するだけです。

```

    String version = System.getProperty("java.specification.version");
    
```

手元の環境(Windows10/Java8)で試したところ、それぞれ以下のような値が取得できました。

```

    java.version : 1.8.0_51
    java.specification.version : 1.8
    java.vm.version : 25.51-b03
    java.runtime.version : 1.8.0_51-b16
    
```

Java8かどうかだけを判定したいのであれば、`java.specification.version`の値をチェックするのが手っ取り早いでしょう。脆弱性の判定などのために細かいバージョンもチェックが必要ということであれば`java.version`か
`java.runtime.version`を見ればよいと思います。

なお、環境や使用されているvmによっては上記のプロパティが存在せずに取得できない場合があるかもしれませんので、戻り値のnullチェックは忘れずに。
CC BY-SA 3.0
2015-08-05T03:06:11.743
13052
2015-08-05T03:06:11.743
10492
12966
answer