Làm cách nào để tìm JAVA_HOME hiện tại của tôi trong Ubuntu?


55

Làm cách nào để tìm JAVA_HOME hiện tại của tôi trong Ubuntu? Tôi phải đặt đường dẫn java_home khi cài đặt maven.

Câu trả lời:


84

Nhập vào thiết bị đầu cuối,

echo $JAVA_HOME

Hiển thị đường dẫn biến JAVA_HOME.

NẾU KHÔNG CÓ NĂM NÀO THÌ THIẾT LẬP NÓ

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

Điều này sẽ khác nhau tùy theo loại & phiên bản JDK của bạn

Để hiển thị theo lệnh đầu tiên.

Theo dõi bài đăng này để sử dụng các JDK khác nhau hoặc chuyển đổi giữa các JDK


Nó cho "/ usr / lib / jvm / java-6-sun". Nhưng tôi đã cài đặt java 7. Khi tôi kiểm tra nó bằng cách sử dụng "java -version", nó cung cấp cho phiên bản java "1.7.0_45" Java (TM) SE Runtime Môi trường (bản dựng 1.7.0_45-b18) Máy chủ Java HotSpot (TM) 24,45-b08, chế độ hỗn hợp)
Samitha Chathuranga

2
sau đó thực thi lệnh thứ hai để thiết lập biến JAVA_HOME. LƯU Ý:JAVA_HOME doesn't make jdk default, it just makes JAVA_HOME variable set to a path & if you want to use different jdk installed on same machine then check my answer, I have edited it.
Làm sâu sắc thêm

bạn nên đặt nó trong / etc / môi trường
keiki

@ Jax-L Nhưng bây giờ khi tôi đưa ra tiếng vang JAVA_HOME, nó chỉ hiển thị là "JAVA_HOME". Con đường tôi đưa ra không hiển thị ... ???
Samitha Chathuranga

2
chỉ xuất cho đến khi bạn khởi động lại. Hoặc bạn thêm xuất vào tập lệnh đăng nhập .bashrc. Nhưng cách chính xác để đặt các biến môi trường như vậy là trong / etc / môi trường
keiki

34

Nếu bạn đã cài đặt JDK 1.6 (tương ứng với Java 6) hoặc phiên bản mới hơn, bạn nên có một chương trình có tên jrunscripttrong đó PATH. Bạn có thể sử dụng để tìm tương ứng JAVA_HOME. Thí dụ:

$ jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
/opt/local/jdk1.7.0_76/jre

Bạn có thể đặt biến môi trường như thế này:

$ export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

Lưu ý rằng JRE không bao gồm jrunscript, vì vậy điều này sẽ chỉ hoạt động nếu bạn cài đặt JDK, không chỉ JRE.


Đó là rất nhiều để đi qua để tìm ra tôi cần phải đi sâu hơn một thư mục, nhưng cảm ơn.
cnizzardini

15

Một tùy chọn di động khác là trích xuất đường dẫn tuyệt đối của JDK từ javac:

export JAVA_HOME=`type -p javac|xargs readlink -f|xargs dirname|xargs dirname`

Đường javacdẫn tuyệt đối được truyền đến dirnamehai lần để loại bỏ /bin/javactừ cuối. Hoàn thành trích xuất thư mục như sau:

$ type -p javac
/usr/bin/javac

$ readlink -f /usr/bin/javac
/usr/lib/jvm/java-8-oracle/bin/javac

$ dirname /usr/lib/jvm/java-8-oracle/bin/javac
/usr/lib/jvm/java-8-oracle/bin/

$ dirname /usr/lib/jvm/java-8-oracle/bin/
/usr/lib/jvm/java-8-oracle/

1
người ta có thể sử dụng type -p javac|xargs readlink -f|xargs dirname|xargs dirname(không có phần xuất) để biết thư mục mà không cần đặt nó.
Mina Michael

Chính xác những gì tôi đang tìm kiếm! Câu trả lời rực rỡ!
Silviu Burcea

7

Để tính đến cơ chế cập nhật thay thế:

$ update-alternatives --query java | grep 'Value: ' | grep -o '/.*/jre'

Bạn có thể đặt biến môi trường như thế này:

$ export JAVA_HOME="$(update-alternatives --query java | grep 'Value: ' | grep -o '/.*/jre')"

Điều này không hoàn toàn mang lại cho JAVA_HOME vì nó vẫn sẽ có dấu vết /jre. Bạn có thể thửexport JAVA_HOME="$(update-alternatives --query java | grep 'Value: ' | sed -e 's/Value: //;s?/jre/bin/java??;')"
James Brusey

7

Chỉ cần chạy một lệnh

 sudo update-alternatives --config java

Nó sẽ cho một cái gì đó như

Es gibt nur eine Alternative in Link-Gruppe java (die /usr/bin/java bereitstellt): /usr/lib/jvm/java-8-oracle/jre/bin/java

Từ đây, bạn có / usr / lib / jvm / java-8-oracle / như java nhà. Bây giờ bạn có thể xuất nó sang biến JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/

Bây giờ lặp lại $ JAVA_HOME hiển thị nó


1

Tôi sử dụng điều này trong Ubuntu LTS (14.04 / 16.04):

[ -L /etc/alternatives/java ] && 
  export JAVA_HOME="$(readlink -f /etc/alternatives/java | sed -e 's/\/jre\/bin\/java$//')"


0

Đối với Java 9 trở lên:

Câu trả lời này https://askubfox.com/a/657468/963 sử dụng công cụ JavaScript Nashorn kèm theo Nashorn để in ra thuộc tính java.homehệ thống. Nashorn đang bị phản đối vì vậy một giải pháp thay thế là sử dụng được jshellgiới thiệu trong Java 9.

echo 'System.out.println(java.lang.System.getProperty("java.home"));' | jshell  -

mà trên hệ thống Ubuntu 18.10 của tôi in ra:

/usr/lib/jvm/java-11-openjdk-amd64
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.