Làm thế nào để biết nếu JRE hoặc JDK được cài đặt


134

Tôi có một máy tính mà tôi cố tình cài đặt JDK. Tôi có một máy tính khác với JRE, trong số những thứ khác, đang thử nghiệm. Tuy nhiên, khi tôi có một ứng dụng java hoạt động trên máy tính này, và sau đó thử nó trên một ứng dụng khác, nó đã phàn nàn rằng JDK là bắt buộc. Làm cách nào để kiểm tra xem JDK đã được cài đặt bằng cách nào đó trên hệ thống của tôi chưa? Lưu ý: máy tính trong câu hỏi là máy Mac.


1
Bạn có thể đăng toàn văn lỗi, bao gồm cả cách bạn đang cố chạy nó không? Bạn không cần JDK để chạy chương trình Java, chỉ cần JRE.
Kevin Workman

Đó là một máy tính bạn bè - một cái gì đó về việc cài đặt các công cụ dòng lệnh. Tôi sẽ bình luận lại khi tôi có cơ hội kiểm tra lại.
PopKernel

Có vẻ như bạn có thể đang nói về việc đảm bảo rằng Java đang đi trên con đường của bạn, nhưng đó chỉ là dự đoán. Dù bằng cách nào, bạn chỉ cần JRE để chạy các chương trình Java. Bạn cần JDK để biên dịch chúng.
Kevin Workman

Chỉ có một vài chương trình java cần một JDK, IDE, các thùng chứa servlet như tomcat để biên dịch các tệp JSP và một số chương trình khác. Những loại ứng dụng có vấn đề?
Arne Burmeister

Câu trả lời:


159

Bạn có thể mở terminal và chỉ cần gõ

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

điều này sẽ cho bạn thấy phiên bản java được cài đặt trên hệ thống (giả sử rằng bạn đã đặt đường dẫn của java trong môi trường hệ thống).

Và nếu bạn không có, hãy thêm nó qua

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

và nếu bạn không chắc chắn nếu bạn có java trên hệ thống của bạn, chỉ cần sử dụng findtrong thiết bị đầu cuối

I E find / -name "java"


1
@MaciejCygan, Tại sao JAVA_HOME của tôi lại trỏ đến JRE thay vì JDK?
Pacerier

@Pacerier Tại sao ?? tôi không biết điều đó chắc chắn lol!. Có lẽ bạn chưa cài đặt JDK? Chạy windows hay linux ??
Maciej Cygan

@MaciejCygan, tôi đang sử dụng windows. Phải, tôi cũng đã cài đặt JDK.
Pacerier

@Pacerier Bạn có thể chỉnh sửa / hoặc tạo một mục nếu không tìm thấy - bên trong các biến môi trường của bạn.
Maciej Cygan

@MaciejCygan, Yea, nhưng tại sao JAVA_HOME của tôi lại chỉ vào JRE thay vì JDK?
Pacerier

18

Thông thường, bản cài đặt jdk có javac trong các biến đường dẫn môi trường ... vì vậy nếu bạn kiểm tra javac trong đường dẫn, thì đó là một chỉ báo tốt cho thấy bạn đã cài đặt jdk.


3
Tôi nhận ra rằng OP đã hỏi về máy Mac, vì vậy nó có thể khác ở đó. Nhưng đối với Windows, thử nghiệm này có vẻ không đáng tin cậy. Tôi chỉ kiểm tra, và tôi KHÔNG cójavac trong đường dẫn của mình, nhưng tôi đã cài đặt jdk. (Trong trường hợp của tôi, JAVA_HOME của tôi được trỏ đến C:\Program Files\Java\jdk1.8.0_45)
kmote

Vâng, bạn đã đúng vì javac thực sự nằm trong% JAVA_HOME% \ bin
Hamed

6

@ maciej-cygan đã mô tả quá trình tốt, tuy nhiên để tìm đường dẫn java của bạn:

$ which java

nó mang lại cho bạn con đường của javatập tin nhị phân mà là một tập tin được liên kết trong /usr/binthư mục. kế tiếp:

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

tìm vị trí nhọn đó là một cái gì đó như sau (đối với tôi):

nhập mô tả hình ảnh ở đây sau đó cdđến thư mục nhọn để tìm thư mục chính thực sự cho Java. kế tiếp:

$ ls -la | grep java

như sau trong trường hợp này:

nhập mô tả hình ảnh ở đây

Vì vậy, rõ ràng trong ảnh chụp màn hình, thư mục nhà Java của tôi là /usr/lib/jvm/java-11-openjdk-amd64. Vì vậy, theo tôi cần phải thêm vào hồ sơ JAVA_HOME bash của tôi ( .bashrc, .bash_profilevv tùy thuộc vào hệ điều hành của bạn) như dưới đây:

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

Bạn đi đây!



0

Một giải pháp Java thuần túy, chung chung ..

Đối với Windows và MacOS, phần sau có thể được suy ra (hầu hết thời gian) ...

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

Tuy nhiên ... trên Linux, điều này không đáng tin cậy ... Ví dụ ...

  • Nhiều JRE trên Linux chứa openjdk đường dẫn
  • Không có gì đảm bảo rằng JRE cũng không chứa JDK.

Vì vậy, một cách tiếp cận không an toàn hơn là kiểm tra sự tồn tại của javacthực thi.

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

Cảnh báo: Điều này vẫn sẽ thất bại đối với các combo JRE + JDK báo cáo JRE sun.boot.library.pathgiống hệt nhau giữa JRE và JDK. Ví dụ, JDK của Fedora sẽ thất bại (hoặc vượt qua tùy thuộc vào cách bạn nhìn vào nó) khi đoạn mã trên được chạy. Xem các bài kiểm tra đơn vị dưới đây để biết thêm ...

Bài kiểm tra đơn vị:

# 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

máy tính trong câu hỏi là máy Mac.

Một giải pháp chỉ dành cho macOS:

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

Ở đâu 1.8+ là Java 1.8 hoặc cao hơn.

Thật không may, trình java_hometrợ giúp không đặt mã trả về thích hợp, vì vậy kiểm tra lỗi không yêu cầu phân tích cú pháp đầu ra (ví dụ:2>&1 |grep -v "Unable" ) thay đổi dựa trên miền địa phương.

Lưu ý, Java cũng có thể tồn tại /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin, nhưng tại thời điểm viết bài này, tôi không biết về một JRE cài đặt ở đó có chứa javaccả.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.