JRE'nin mi yoksa JDK'nın mı yüklü olduğu nasıl anlaşılır?


134

JDK'yı bilinçli olarak kurduğum bir bilgisayarım var. Diğer şeylerin yanı sıra test etmek için JRE ile başka bir bilgisayarım var. Ancak, bu bilgisayarda çalışan bir java uygulaması aldığımda ve daha sonra başka bir bilgisayarda denediğimde, JDK'nın gerekli olduğundan şikayet etti. JDK'nın sistemime bir şekilde kurulup kurulmadığını nasıl kontrol edebilirim? Not: söz konusu bilgisayar bir Mac'tir.


1
Nasıl çalıştırmaya çalıştığınız da dahil olmak üzere hatanın tam metnini gönderebilir misiniz? Bir Java programını çalıştırmak için JDK'ya ihtiyacınız yok, sadece JRE.
Kevin Workman

Bir arkadaş bilgisayarıydı - komut satırı araçlarının yüklenmesi ile ilgili bir şey. Tekrar inceleme şansı bulduğumda tekrar yorum yapacağım.
PopKernel

Java'nın yolunuzda olduğundan emin olmaktan bahsediyor olabilirsiniz, ancak bu sadece bir tahmin. Her iki durumda da, Java programlarını çalıştırmak için yalnızca JRE'ye ihtiyacınız vardır. Bunları derlemek için JDK'ya ihtiyacınız var.
Kevin Workman

JSP'leri ve diğerlerini derlemek için sadece birkaç java programı JDK, IDE, tomcat gibi servlet kapsayıcılarına ihtiyaç duyar. Ne tür bir uygulama sorunu var?
Arne Burmeister

Yanıtlar:


159

Terminali açabilir ve basitçe yazabilirsiniz

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

bu size sistemde yüklü olan java sürümünü göstermelidir (java yolunu sistem ortamında ayarladığınızı varsayarak).

Ve yapmadıysanız, yoluyla ekleyin

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

ve sisteminizde java olup olmadığından emin değilseniz, sadece findterminalde kullanın

yani find / -name "java"


1
@MaciejCygan, JAVA_HOME'um neden JDK yerine JRE'yi gösteriyor?
Pacerier

@Pacerier Neden ?? emin değilim lol !. Belki de JDK kurulu değilsiniz? Windows veya Linux çalıştırıyor mu?
Maciej Cygan

@MaciejCygan, Windows kullanıyorum. Evet, benim de bir JDK kurdum.
Pacerier

@Pacerier Çevresel değişkenlerinizin içinde hiçbiri bulunamazsa bir giriş düzenleyebilir / veya giriş yapabilirsiniz.
Maciej Cygan

@MaciejCygan, Evet, ama neden JAVA_HOME'um JDK yerine JRE'yi gösteriyor?
Pacerier

18

Normalde bir jdk kurulumunda ortam yolu değişkenlerinde javac bulunur ... bu yüzden yolda javac'ı kontrol ederseniz, bu bir jdk'nin kurulu olduğuna dair oldukça iyi bir göstergedir.


3
OP'nin bir Mac hakkında soru sorduğunun farkındayım, bu yüzden orada farklı olabilir. Ancak Windows için bu test güvenilir görünmüyor. Az önce kontrol ettim ve javacyolumda YOK , ama yüklü bir jdk YOK . (Benim durumumda, JAVA_HOME'um işaret ediliyor C:\Program Files\Java\jdk1.8.0_45)
kmote

Evet, haklısın çünkü javac aslında% JAVA_HOME% \ bin
Hamed

6

@ maciej-cygan süreci iyi tanımladı, ancak java yolunuzu bulmak için:

$ which java

size dizindeki javabağlantılı bir dosya olan ikili dosyanın yolunu verir /usr/bin. Sonraki:

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

aşağıdaki gibi olan sivri konumu bulun (benim için):

görüntü açıklamasını buraya girin daha sonra cdJava için gerçek ana dizini bulmak için işaretli dizine gidin. Sonraki:

$ ls -la | grep java

bu durumda aşağıdaki gibidir:

görüntü açıklamasını buraya girin

ekran görüntüsünde açıkça görüldüğü gibi, Java ana dizinim /usr/lib/jvm/java-11-openjdk-amd64. Yani buna göre ben (benim bash profiline JAVA_HOME eklemem gerekiyor .bashrc, .bash_profileaşağıda gibi işletim sisteminize bağlı olarak, vb):

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

Hadi bakalım!



0

Genel, saf bir Java çözümü ..

Windows ve MacOS için, aşağıdakiler çıkarılabilir (çoğu zaman) ...

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

Ancak ... Linux'ta bu kadar güvenilir değil ... Örneğin ...

  • Linux üzerindeki birçok JRE, openjdkşu yolu içerir:
  • JRE'nin ayrıca bir JDK içermediğinin garantisi yoktur.

Bu nedenle, daha güvenli bir yaklaşım, javacyürütülebilir dosyanın varlığını kontrol etmektir .

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

Uyarı: Bu, JRE'yi sun.boot.library.pathJRE ve JDK arasında aynı şekilde rapor eden JRE + JDK kombinasyonları için yine de başarısız olacaktır . Örneğin, Fedora'nın JDK'si yukarıdaki kod çalıştırıldığında başarısız olur (veya ona nasıl baktığınıza bağlı olarak geçer). Daha fazla bilgi için aşağıdaki birim testlerine bakın ...

Birim testleri:

# 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

söz konusu bilgisayar bir Mac.

Yalnızca macOS için bir çözüm:

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

1.8+Java 1.8 veya üstü nerede .

Ne yazık ki, java_homeyardımcı doğru dönüş kodunu ayarlamaz, bu nedenle başarısızlık kontrolü 2>&1 |grep -v "Unable", yerel ayara göre değişen çıktının (örneğin ) ayrıştırılmasını gerektirir .

Not, Java da var olabilir /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, ancak bunu yazdığım sırada , orada bulunan bir JRE'den haberdar değilim javac.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.