Bagaimana cara mengetahui apakah JRE atau JDK diinstal

134

Saya memiliki satu komputer yang saya gunakan untuk menginstal JDK. Saya memiliki komputer lain dengan JRE, untuk, antara lain, pengujian. Namun, ketika saya mendapatkan aplikasi java yang bekerja di komputer ini, dan kemudian mencobanya di aplikasi lain, ia mengeluh bahwa JDK diperlukan. Bagaimana saya bisa mengecek apakah JDK telah diinstal pada sistem saya? Catatan: komputer yang dimaksud adalah Mac.

PopKernel
sumber
1
Bisakah Anda memposting teks lengkap kesalahan, termasuk bagaimana Anda mencoba menjalankannya? Anda tidak perlu JDK untuk menjalankan program Java, hanya JRE.
Kevin Workman
Itu adalah komputer teman-sesuatu tentang menginstal alat-alat baris perintah. Saya akan berkomentar lagi ketika saya mendapat kesempatan untuk memeriksanya lagi.
PopKernel
Sepertinya Anda mungkin berbicara tentang memastikan bahwa Java ada di jalur Anda, tapi itu hanya dugaan. Apa pun itu, Anda hanya perlu JRE untuk menjalankan program Java. Anda memerlukan JDK untuk mengkompilasi mereka.
Kevin Workman
Hanya beberapa program java yang membutuhkan JDK, IDE, wadah servlet seperti kucing jantan untuk mengkompilasi JSP dan beberapa lainnya. Aplikasi apa yang bermasalah?
Arne Burmeister

Jawaban:

159

Anda dapat membuka terminal dan cukup mengetik

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

ini akan menunjukkan kepada Anda versi java yang diinstal pada sistem (dengan asumsi bahwa Anda telah menetapkan path java di lingkungan sistem).

Dan jika belum, tambahkan via

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

dan jika Anda tidak yakin apakah Anda memiliki java di sistem Anda, gunakan saja finddi terminal

yaitu find / -name "java"

Maciej Cygan
sumber
1
@MaciejCygan, Mengapa JAVA_HOME saya menunjuk ke JRE dan bukan JDK?
Pacerier
@Pacerier Why ?? saya tidak tahu pasti itu lol !. Mungkin Anda belum menginstal JDK? Menjalankan windows atau linux ??
Maciej Cygan
@ MaciejCygan, saya menggunakan windows. Ya, saya sudah menginstal JDK juga.
Pacerier
@Pacerier Anda dapat mengedit / atau membuat entri jika tidak ditemukan - di dalam variabel lingkungan Anda.
Maciej Cygan
@MaciejCygan, Ya, tapi mengapa JAVA_HOME saya menunjuk ke JRE, bukannya JDK?
Pacerier
18

Biasanya instalasi jdk memiliki javac di variabel path lingkungan ... jadi jika Anda memeriksa javac di path, itu cukup banyak indikator yang baik bahwa Anda memiliki jdk diinstal.

Shiraaz.M
sumber
3
Saya menyadari bahwa OP bertanya tentang Mac, jadi mungkin berbeda di sana. Tetapi untuk Windows, tes ini tampaknya tidak dapat diandalkan. Saya baru saja memeriksa, dan saya TIDAK ada javacdi jalur saya, tetapi saya memiliki jdk diinstal. (Dalam kasus saya, JAVA_HOME saya diarahkan ke C:\Program Files\Java\jdk1.8.0_45)
kmote
Ya, Anda benar karena javac sebenarnya terletak di% JAVA_HOME% \ bin
Hamed
6

@ maciej-cygan menggambarkan proses dengan baik, namun untuk menemukan jalur java Anda:

$ which java

ini memberi Anda path javafile biner yang merupakan file tertaut dalam /usr/bindirektori. lanjut:

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

temukan lokasi runcing yang merupakan sesuatu sebagai berikut (untuk saya):

masukkan deskripsi gambar di sini kemudian cdke direktori runcing untuk menemukan direktori home yang sebenarnya untuk Java. lanjut:

$ ls -la | grep java

yaitu sebagai berikut dalam hal ini:

masukkan deskripsi gambar di sini

jadi seperti yang terlihat jelas di screenshot, direktori home Java saya /usr/lib/jvm/java-11-openjdk-amd64. Jadi dengan demikian saya perlu menambahkan JAVA_HOME ke profil pesta saya ( .bashrc, .bash_profile, dll tergantung pada OS Anda) seperti di bawah ini:

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

Ini dia!

Shayan Amani
sumber
0

Solusi generik, Java murni ..

Untuk Windows dan MacOS, berikut ini dapat disimpulkan (sebagian besar waktu) ...

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

Namun ... di Linux ini tidak dapat diandalkan ... Misalnya ...

  • Banyak JRE di Linux mengandung openjdkpath
  • Tidak ada jaminan bahwa JRE juga tidak mengandung JDK.

Jadi pendekatan yang lebih aman-gagal adalah untuk memeriksa keberadaan javacexecutable.

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;
}

Peringatan: Ini masih akan gagal untuk kombo JRE + JDK yang melaporkan JRE secara sun.boot.library.pathidentik antara JRE dan JDK. Misalnya, JDK Fedora akan gagal (atau lulus tergantung pada bagaimana Anda melihatnya) ketika kode di atas dijalankan. Lihat tes unit di bawah ini untuk info lebih lanjut ...

Tes unit:

# 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
tresf
sumber
0

komputer yang dimaksud adalah Mac.

Solusi khusus macOS:

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

Di mana 1.8+Java 1.8 atau lebih tinggi.

Sayangnya, java_homehelper tidak menetapkan kode pengembalian yang tepat, jadi memeriksa kegagalan memerlukan penguraian output (mis. 2>&1 |grep -v "Unable") Yang bervariasi berdasarkan lokal.

Catatan, Java mungkin juga ada di /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, tetapi pada saat penulisan ini, saya tidak mengetahui JRE yang menginstal di sana yang berisi javacjuga.

tresf
sumber