19

目標: マシン上の Java のバージョンを確認します (これは から取得できますjava -version)。Java Webサイトから入手可能な最新のものと比較してください

マシンに JRE/JDK がインストールされていると仮定して、最新の Java リリースを確認できる方法があるかどうかを知りたいです。

Java 自体でこれを行うことができれば、ソリューションはプラットフォームに依存しません。クラスを使用java.net.URLしてJava Webサイトにリクエストを送信し、HTMLを取得できますが、OracleはWebサイトとスタイルを変更できるため、応答は動的になり、長期的にはメンテナンスの問題が発生する可能性があります.

私はjavatester.orgを見てきましたが、アプレットではなく、コマンドライン (スクリプトに追加できます) を使用したいと思います。

javacpl.exe を使用して定期的なチェックをスケジュールできますが、必要に応じて実行したいと考えています。

4

9 に答える 9

18

答えは実に簡単です。http://java.com/en/download/testjava.jspは、 http://java.com/applet/JreCurrentVersion2.txtにリクエストを発行します。そのファイルには現在、「1.7.0_11」という単一のバージョン番号が含まれています...実際、これは最新かつ最高です。

Java コードの例

try (BufferedReader br = new BufferedReader(new InputStreamReader(new URL(
    "http://java.com/applet/JreCurrentVersion2.txt").openStream()))) {
  String fullVersion = br.readLine();
  String version = fullVersion.split("_")[0];
  String revision = fullVersion.split("_")[1];
  System.out.println("Version " + version + " revision " + revision);
} catch (IOException e) {
  // handle properly
}

2014-03-20 更新

Java 8 は最近リリースされましたが、 http: //java.com/applet/JreCurrentVersion2.txtは現在も 1.7.0_51 を返します。

更新 2016-07-13

数か月ごとにこれに戻る必要があるようです... 現在、JavaScript 変数についてhttp://java.com/en/download/installed8.jsplatest8Versionをスキャンする必要があります。したがって、実行できますcurl -s https://java.com/en/download/installed8.jsp | grep latest8Version

2018-08-19 更新

http://javadl-esd-secure.oracle.com/update/baseline.versionは、他の回答で言及されている別のホットスポットです。

于 2013-01-13T19:49:06.890 に答える
9

現在は機能していない「JreCurrentVersion2.txt」に非常によく似た URL:

http://javadl-esd-secure.oracle.com/update/baseline.version

リンクの内容は次のようになります。

1.8.0_111
1.7.0_121
1.6.0_131
1.5.0_99
1.4.2_43

コンテンツを簡単に解析して、最新の JRE バージョンを見つけることができます。

于 2016-10-20T04:04:55.937 に答える
9

更新: この JRE は Ask.com ツールバーを備えているため、この方法はお勧めしません。自分でダウンロードして自分で配布する方がよいでしょう。

jusched.exe プログラムは、次の URL にアクセスして、利用可能なバージョンを確認します。jusched は何百万台ものコンピュータにインストールされているため、変更される可能性は低いと思います。

https://javadl-esd-secure.oracle.com/update/1.7.0/map-m-1.7.0.xml

これが私に返すもののスニペットです:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>

<java-update-map version="1.0">
      <mapping>
      <version>1.7.0_17</version>
      <url>https://javadl-esd-secure.oracle.com/update/1.7.0/au-descriptor-1.7.0_25-b17.xml</url>
   </mapping>
   <mapping>
      <version>1.7.0_21</version>
      <url>https://javadl-esd-secure.oracle.com/update/1.7.0/au-descriptor-1.7.0_25-b17.xml</url>
   </mapping>
   </java-update-map>

指している実際のバージョンを取得するには、上記の URL を取得する必要があります。この XML がどのように見えるかの別のスニペットを次に示します。

xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- XML file to be staged anywhere, and pointed to by map.xml file -->
<java-update>
  <information version="1.0" xml:lang="en">
    <caption>Java Update - Update Available</caption>
    <title>Java Update Available</title>
    <description>Java 7 Update 25 is ready to install. Installing Java 7 Update 25 might uninstall the latest Java 6 from your system. Click the Install button to update Java now.  If you wish to update Java later, click the Later button.</description>
    <moreinfo>http://java.com/moreinfolink</moreinfo>
    <AlertTitle>Java Update Available</AlertTitle>
    <AlertText>A new version of Java is ready to be installed.</AlertText>
    <moreinfotxt>More information...</moreinfotxt>
    <url>http://javadl.sun.com/webapps/download/GetFile/1.7.0_25-b17/windows-i586/jre-7u25-windows-i586-iftw.exe</url>
    <version>1.7.0_25-b17</version>
    <post-status>https://nometrics.java.com</post-status>
    <cntry-lookup>http://rps-svcs.sun.com/services/countrylookup</cntry-lookup>
    <predownload></predownload>
    <options>/installmethod=jau FAMILYUPGRADE=1 SPWEB=http://javadl-esd.sun.com/update/1.7.0/sp-1.7.0_25-b17</options>
    <urlinfo>24595ec7f861bc67e572f1e4ad3992441335e1a7</urlinfo>
  </information>
</java-update>

version タグには、完全なバージョン番号が含まれています。

于 2013-07-02T14:28:24.267 に答える
4

Java SE ダウンロード ページを解析して、Java バージョンを抽出できます。
このようにして、JDK6 と JDK7 の両方のバージョンを取得し、最新の Oracle に対して特定の JDK (6 または 7) をテストできます。( JDK7のみをリストする無料のJavaダウンロード・ページ
とは対照的)

Her はGoの粗いスクリプトあり、Windows、Unix、MacO で単一の独立した実行可能ファイルにコンパイルし、コマンド ラインまたはスクリプト内で使用できます。

package main

import (
    "bytes"
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "net/http"
    "os/exec"
    "regexp"
)

type Jdk struct {
    Url    string
    Ver    string
    update string
}

func main() {
    resp, err := http.Get("http://www.oracle.com/technetwork/java/javase/downloads/index.html")
    if err != nil {
        fmt.Printf("Error on http Get: %v\n", err)
        return
    }
    bodyb, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Printf("QueriesForOwner: error in ReadAll: %v\n", err)
        return
    }
    br := bytes.NewBuffer(bodyb)
    jdkre, err := regexp.Compile(`h3[^\r\n]+(/technetwork/java/javase/downloads/(jdk(?:6|7)(?:u(\d+))?)-downloads-\d+\.html)`)
    if err != nil {
        fmt.Printf("extract: error in regexp compilation: %v\n", err)
        return
    }
    jdks := jdkre.FindAllSubmatch(br.Bytes(), -1)
    jdk7 := Jdk{string(jdks[0][4]), string(jdks[0][5]), string(jdks[0][6])}
    jdk6 := Jdk{string(jdks[1][7]), string(jdks[1][8]), string(jdks[1][9])}
    fmt.Printf("Jdk7: %v\nJdk6: %v\n", jdk7, jdk6)
    jver, err := exec.Command("java", "-version").CombinedOutput()
    if err != nil {
        fmt.Printf("*ExitError from java -version:", err)
        return
    }
    fmt.Println("JVer: '", string(jver), "'")
    jverre, err := regexp.Compile(`1.(\d).\d(?:_(\d+))"`)
    jvers := jverre.FindSubmatch(jver)
    jj := string(jvers[0])
    jv := string(jvers[1])
    ju := string(jvers[2])
    jdk := jdk6
    if jv == "7" {
        jdk = jdk7
    }
    if jdk.update != ju {
        fmt.Println("Local JDK *NOT* up-to-date: you have ", jj, ", Oracle has ", jdk.Ver)
    } else {
        fmt.Println("Local JDK *up-to-date*: you have ", jj, ", equals to Oracle, which has", jdk.Ver)
    }
}

繰り返しますが、これは JDK 向けの粗雑なスクリプトであり、特定のニーズに合わせて調整し、その出力と終了ステータスがスクリプトに必要なものと一致するようにする必要があります。

私の(PC)ワークステーションでは、次のように返されます。

Jdk7: {/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html jdk7u9 9}
Jdk6: {/technetwork/java/javase/downloads/jdk6u37-downloads-1859587.html jdk6u37 37}
JVer: ' java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b05)
Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)
 '
Local JDK *NOT* up-to-date: you have  1.6.0_31" , Oracle has  jdk6u37
于 2012-10-18T13:24:09.017 に答える
2

正確にどの情報を探しているのかわかりませんが、次を使用してバージョン情報を取得できます

System.getProperty("java.version");

これが探しているものでない場合は、ここで利用可能な他のプロパティを確認してください: http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties ()

利用可能な最新バージョンについては、このサイトを手動で解析する必要があると思います: http://java.com/en/download/index.jsp

最新バージョンはそこにあり、現在は

バージョン 7 アップデート 9

「オラクルはウェブサイトとスタイルを変更できる」ため、これはあなたが望むものではないと書いています。ただし、Java のサービス (この場合は Web サイト) にアクセスして、Java の最新バージョンを確認したいと考えています。あなたがこれにお金を払っていない限り、彼らはあなたに対して義務を負わず、あなたの同意なしにいつでもサービスを変更することができます. また、有料の顧客である場合でも、期待できる最善のことは、今後の変更について通知され、メンテナンスの問題が残ることです.

覚えておいてください、それはあなたが使いたい彼らのサービスです.

于 2012-10-18T10:47:24.180 に答える
1

私はこのグルーヴィーなスクリプトで同様の問題を少し前に解決しました(免責事項:どういうわけか「おもちゃ」のスクリプトです):

@Grapes([
    @Grab(group='org.ccil.cowan.tagsoup', module='tagsoup', version='1.2.1')
])

def slurper = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser())
def url = new URL("http://www.java.com/download/manual.jsp")

def html
url.withReader { reader ->
    html = slurper.parse(reader)
}
def lastJava = html.body.div.div.div.strong.text()

println "Last available java version: ${lastJava}"
println "Currently installed java version: ${System.properties["java.version"]}"

次のような結果になります。

Last available java version: 
Version 7 Update 9

Currently installed java version: 1.7.0_07

ページ構造の変更によるメンテナンスの問題を回避したい場合は、「バージョンx更新y」を含む行を検索することをお勧めします。

于 2012-10-18T13:05:48.710 に答える
1

すべてのシステム変数を取得するには

Properties properties = System.getProperties();
System.out.println(properties);

サンプル出力。これは、OS および Java JDK/JRE のバージョンに応じて、システムで異なる場合があります。

{
    java.runtime.name = Java(TM) SE Runtime Environment,
    sun.boot.library.path = C:\Program Files\Java\jdk1.8.0_31\jre\bin,
    java.vm.version = 25.31-b07,
    java.vm.vendor = Oracle Corporation,
    java.vendor.url = http://java.oracle.com/,
    path.separator = ;,
    idea.launcher.port = 7534,
    java.vm.name = Java HotSpot(TM) 64-Bit Server VM,
    file.encoding.pkg = sun.io,
    user.country = NP,
    user.script = ,
    sun.java.launcher = SUN_STANDARD,
    sun.os.patch.level = ,
    java.vm.specification.name = Java Virtual Machine Specification,
    user.dir = C:\Users\...\roid,
    java.runtime.version = 1.8.0_31-b13,
    java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment,
    java.endorsed.dirs = C:\Program Files\Java\jdk1.8.0_31\jre\lib\endorsed,
    os.arch = amd64,
    java.io.tmpdir = C:\Windows\TEMP\,
    line.separator = ,
    java.vm.specification.vendor = Oracle Corporation,
    user.variant = ,
    os.name = Windows 8.1,
    sun.jnu.encoding = Cp1252,
    java.library.path = C:\Program...roid,
    java.specification.name = Java Platform API Specification,
    java.class.version = 52.0,
    sun.management.compiler = HotSpot 64-Bit Tiered Compilers,
    os.version = 6.3,
    user.home = C:\Users\Xxx,
    user.timezone = Asia/Kathmandu,
    java.awt.printerjob = sun.awt.windows.WPrinterJob,
    file.encoding = UTF-8,
    idea.launcher.bin.path = C:\Program Files (x86)\xxx\bin,
    java.specification.version = 1.8,
    java.class.path = C:\Program Files\Java\jdk1.8.0_31\jre\lib\charsets.jar;...,
    user.name = Xxx,
    java.vm.specification.version = 1.8,
    sun.java.command = com.xxxx.ameras,
    java.home = C:\Program Files\Java\jdk1.8.0_31\jre,
    sun.arch.data.model = 64,
    user.language = en,
    java.specification.vendor = Oracle Corporation,
    awt.toolkit = sun.awt.windows.WToolkit,
    java.vm.info = mixed mode,
    java.version = 1.8.0_31,
    java.ext.dirs = C:\Program Files\Java\jdk1.8.0_31\jre\lib\ext;...,
    java.vendor = Oracle Corporation,
    file.separator = \,
    java.vendor.url.bug = http://bugreport.sun.com/bugreport/,
    sun.io.unicode.encoding = UnicodeLittle,
    sun.cpu.endian = little,
    sun.desktop = windows,
    sun.cpu.isalist = amd64
}

特定の変数のみを取得する

String javaVersion = System.getProperty("java.version");
System.out.println(javaVersion);

出力

1.8.0_31
于 2015-02-18T04:18:25.400 に答える
0

@MarcelStör のソリューションは機能しなくなりました。ファイル内のバージョンは 1.8.0_51 ですが、実際の最新バージョンは 1.8.0_91/92 です。Firefox または Chrome でJava テスト ページに移動し、開発コンソールを開くと、latest8Version現在の変数を1.8.0_91。これは Selenium/Firefox ソリューションにラップすることができますが、この情報を取得するための信じられないほどハックな方法です。

于 2016-05-12T14:24:40.317 に答える
-1
System.getProperty("java.vm.specification.version");
System.getProperty("java.version");
于 2013-04-29T12:41:11.510 に答える