Mam jeden komputer, na którym celowo zainstalowałem JDK. Mam inny komputer z JRE, między innymi do testowania. Jednak kiedy dostałem aplikację java działającą na tym komputerze, a potem wypróbowałem ją na innym, narzekała, że JDK jest wymagany. Jak mogę sprawdzić, czy JDK został w jakiś sposób zainstalowany w moim systemie? Uwaga: omawiany komputer to Mac.
137
Odpowiedzi:
Możesz otworzyć terminal i po prostu wpisać
java -version // this will check your jre version javac -version // this will check your java compiler version if you installed
powinno to pokazać wersję java zainstalowaną w systemie (zakładając, że ustawiłeś ścieżkę do javy w środowisku systemowym).
A jeśli nie, dodaj go przez
a jeśli nie jesteś pewien, czy w ogóle masz w systemie Javę, po prostu użyj
find
w terminaluto znaczy
find / -name "java"
źródło
Zwykle instalacja jdk ma javac w zmiennych ścieżkach środowiskowych ... więc jeśli sprawdzisz javac w ścieżce, jest to całkiem dobry wskaźnik, że masz zainstalowany jdk.
źródło
javac
na swojej ścieżce, ale mam zainstalowany jdk. (W moim przypadku mój JAVA_HOME jest wskazanyC:\Program Files\Java\jdk1.8.0_45
)@ maciej-cygan dobrze opisał proces, jednak aby znaleźć ścieżkę java:
$ which java
podaje ścieżkę do
java
pliku binarnego, który jest połączonym plikiem w/usr/bin
katalogu. Kolejny:$ cd /usr/bin/ && ls -la | grep java
znajdź wskazaną lokalizację, która jest następująca (dla mnie):
następnie
cd
do wskazanego katalogu, aby znaleźć rzeczywisty katalog domowy dla Javy. Kolejny:$ ls -la | grep java
co w tym przypadku wygląda następująco:
więc jak widać na zrzucie ekranu, mój katalog domowy Java to
/usr/lib/jvm/java-11-openjdk-amd64
. Więc odpowiednio muszę dodać JAVA_HOME do mojego profilu (bash.bashrc
,.bash_profile
itp zależności od systemu operacyjnego) jak poniżej:JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
Proszę bardzo!
źródło
zgodnie z dokumentacją JAVA JDK należy zainstalować w tej ścieżce:
Zobacz część dotyczącą odinstalowywania JDK pod adresem https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html
Więc jeśli możesz znaleźć taki folder, JDK jest zainstalowany
źródło
Ogólne, czyste rozwiązanie w języku Java.
W przypadku systemów Windows i MacOS można wywnioskować (w większości przypadków) ...
public static boolean isJDK() { String path = System.getProperty("sun.boot.library.path"); if(path != null && path.contains("jdk")) { return true; } return false; }
Jednak ... w systemie Linux nie jest to tak niezawodne ... Na przykład ...
openjdk
ścieżkęWięc bardziej bezpiecznym podejściem jest sprawdzenie istnienia
javac
pliku wykonywalnego.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; }
Ostrzeżenie: to nadal się nie powiedzie w przypadku combo JRE + JDK, które zgłaszają
sun.boot.library.path
identyczne JRE między JRE i JDK. Na przykład JDK Fedory nie powiedzie się (lub przejdzie w zależności od tego, jak na to spojrzysz), gdy powyższy kod zostanie uruchomiony. Zobacz testy jednostkowe poniżej, aby uzyskać więcej informacji ...Testy jednostkowe:
# 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
źródło
Rozwiązanie tylko dla macOS:
/usr/libexec/java_home -v 1.8+ --exec javac -version
Gdzie
1.8+
jest Java 1.8 lub nowsza.Niestety,
java_home
pomocnik nie ustawia właściwego kodu powrotu, więc sprawdzenie, czy nie wystąpiły błędy, wymaga przeanalizowania danych wyjściowych (np.2>&1 |grep -v "Unable"
), Które różnią się w zależności od ustawień regionalnych.Uwaga, Java może również istnieć w
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin
, ale w chwili pisania tego nie wiem, że instaluje się tam środowisko JRE, które również zawierajavac
.źródło