JREまたはJDKがインストールされているかどうかを確認する方法


134

意図的にJDKをインストールしたコンピュータが1台あります。特にテスト用に、JREを備えた別のコンピュータを持っています。しかし、このコンピューターでJavaアプリケーションを動作させて別のコンピューターで試したところ、JDKが必要であると不満がありました。JDKが何らかの方法でシステムにインストールされているかどうかを確認するにはどうすればよいですか?注:問題のコンピューターはMacです。


1
エラーの実行方法など、エラーの全文を投稿できますか?Javaプログラムを実行するのにJDKは必要なく、JREだけが必要です。
Kevin Workman

それは友達のコンピュータでした-コマンドラインツールのインストールについての何か。再検査の機会がありましたらまたコメントします。
PopKernel、2014年

Javaを確実に使用することについて話しているように思われるかもしれませんが、それは推測にすぎません。どちらの方法でも、Javaプログラムを実行するにはJREのみが必要です。それらをコンパイルするにはJDKが必要です。
Kevin Workman、

JDKをコンパイルするために、JDK、IDE、tomcatなどのサーブレットコンテナーを必要とするJavaプログラムはほとんどありません。どのようなアプリケーションに問題がありますか?
Arne Burmeister 14

回答:


159

あなたはターミナルを開いて単純にタイプすることができます

java -version // this will check your jre version
javac -version // this will check your java compiler version if you installed 

これにより、システムにインストールされているJavaのバージョンが表示されます(システム環境でJavaのパスを設定していると想定)。

まだ追加していない場合は、

export JAVA_HOME=/path/to/java/jdk1.x

あなたのシステムにJavaがまったくあるかどうかわからない場合はfind、ターミナルで使用してください

すなわち find / -name "java"


1
@MaciejCygan、私のJAVA_HOMEがJDKではなくJREを指しているのはなぜですか?
Pacerier 2014

@Pacerierなぜ?? 私は確かに笑ってそれを知らない!多分あなたはJDKをインストールしていませんか?WindowsまたはLinuxを実行していますか?
Maciej Cygan 14

@MaciejCygan、私は窓を使っています。ええ、私もJDKをインストールしています。
Pacerier 2014

@Pacerier環境変数内で-見つからない場合は編集またはエントリを作成できます。
Maciej Cygan 14

@MaciejCygan、そうですが、私のJAVA_HOMEがJDKではなくJREを指しているのはなぜですか?
Pacerier 2014

18

通常、jdkのインストールでは、環境パス変数にjavacが含まれています。そのため、パスでjavacを確認すると、jdkがインストールされていることを示しています。


3
OPがMacについて質問していたことはわかっているので、そこでは異なる場合があります。しかし、Windowsに関しては、このテストは信頼できるとは思えません。チェックjavacしたところ、パスにありませんが、jdkがインストールされています。(私の場合、私のJAVA_HOMEはを指していますC:\Program Files\Java\jdk1.8.0_45
kmote '22

ええ、あなたは正しいですjavacは実際には%JAVA_HOME%\ binにあります
Hamed

6

@ maciej-cyganはプロセスをうまく説明しましたが、Javaパスを見つけるために:

$ which java

ディレクトリjava内のリンクファイルであるバイナリファイルのパスを提供します/usr/bin。次:

$ cd /usr/bin/ && ls -la | grep java

(私にとって)次のような指摘された場所を見つけます:

ここに画像の説明を入力してください 次にcd、ポイントされたディレクトリに移動して、Javaの実際のホームディレクトリを見つけます。次:

$ ls -la | grep java

この場合、次のようになります。

ここに画像の説明を入力してください

スクリーンショットからわかるように、私のJavaホームディレクトリは/usr/lib/jvm/java-11-openjdk-amd64です。したがって.bashrc.bash_profile以下のように、JAVA_HOMEをbashプロファイル(OSに応じて、など)に追加する必要があります。

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

どうぞ!



0

汎用の純粋なJavaソリューション。

WindowsおよびMacOSの場合、次のことが推測できます(ほとんどの場合)...

public static boolean isJDK() {
    String path = System.getProperty("sun.boot.library.path");
    if(path != null && path.contains("jdk")) {
        return true;
    }
    return false;
}

しかし... Linuxではこれはそれほど信頼できません...例えば...

  • Linux上の多くのJREにopenjdkはパスが含まれています
  • JREにJDKも含まれていないという保証はありません。

したがって、より安全な方法は、javac実行可能ファイルの存在を確認することです。

public static boolean isJDK() {
    String path = System.getProperty("sun.boot.library.path");
    if(path != null) {
        String javacPath = "";
        if(path.endsWith(File.separator + "bin")) {
            javacPath = path;
        } else {
            int libIndex = path.lastIndexOf(File.separator + "lib");
            if(libIndex > 0) {
                javacPath = path.substring(0, libIndex) + File.separator + "bin";
            }
        }
        if(!javacPath.isEmpty()) {
            return new File(javacPath, "javac").exists() || new File(javacPath, "javac.exe").exists();
        }
    }
    return false;
}

警告:これはsun.boot.library.path、JREとJDKの間でJREがまったく同じであることを報告するJRE + JDKコンボでは引き続き失敗します。たとえば、上記のコードを実行すると、FedoraのJDKは失敗します(または、見方によっては合格します)。詳細については、以下の単体テストを参照してください...

単体テスト:

# Unix
java -XshowSettings:properties -version 2>&1|grep "sun.boot.library.path"
# Windows
java -XshowSettings:properties -version 2>&1|find "sun.boot.library.path"
    # PASS: MacOS AdoptOpenJDK JDK11
    /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/lib

    # PASS: Windows Oracle JDK12
    c:\Program Files\Java\jdk-12.0.2\bin

    # PASS: Windows Oracle JRE8
    C:\Program Files\Java\jre1.8.0_181\bin

    # PASS: Windows Oracle JDK8
    C:\Program Files\Java\jdk1.8.0_181\bin

    # PASS: Ubuntu AdoptOpenJDK JDK11
    /usr/lib/jvm/adoptopenjdk-11-hotspot-amd64/lib

    # PASS: Ubuntu Oracle JDK11
    /usr/lib/jvm/java-11-oracle/lib

    # PASS: Fedora OpenJDK JDK8
    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.fc24.x86_64/jre/lib/amd64

    #### FAIL: Fedora OpenJDK JDK8
    /usr/java/jdk1.8.0_231-amd64/jre/lib/amd64

0

問題のコンピューターはMacです。

macOSのみのソリューション:

/usr/libexec/java_home -v 1.8+ --exec javac -version

1.8+Java 1.8以上はどこにありますか。

残念ながら、java_homeヘルパーは適切な戻りコードを設定しないため、失敗をチェック2>&1 |grep -v "Unable"するには、ロケールに基づいて変化する出力(例:)を解析する必要があります。

Javaはにも存在する可能性がありますが/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin、これを書いている時点では、そこにインストールされjavacているJREも認識していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.