2009-07-13 41 views

Trả lời

43

echo $JAVA_HOME sẽ in giá trị nếu được đặt. Tuy nhiên, nếu bạn không đặt nó theo cách thủ công trong các tập lệnh khởi động, có thể nó không được đặt.

Nếu bạn thử which java và không tìm thấy gì, Java có thể không được cài đặt trên máy của bạn hoặc ít nhất không nằm trong đường dẫn của bạn. Tùy thuộc vào phân phối Linux nào bạn có và cho dù bạn có quyền truy cập root hay không, bạn có thể truy cập http://www.java.com để tải xuống phiên bản bạn cần. Sau đó, bạn có thể đặt JAVA_HOME để trỏ đến thư mục này. Hãy nhớ rằng, đây chỉ là một quy ước và không nên được sử dụng để xác định xem java có được cài đặt hay không.

+3

JAVA_HOME không còn được định nghĩa trong các hệ thống Linux và bị phản đối. –

+1

@PeterQuiring bạn nên trích dẫn nguồn của bạn cho tuyên bố đó .. bạn khá sai. – harschware

+1

@harschware Khi tôi cài đặt Ubuntu, JAVA_HOME chưa được cài đặt, ngay cả khi đã cài đặt JDK. Cũng đọc/usr/share/doc/openjdk-8-jre-headless/JAVA_HOME và nó nói rằng JAVA_HOME không còn cần thiết nữa (kế thừa). –

2

Trên lệnh, gõ:

echo "$ JAVA_HOME"

Nếu bạn không nhận được bất cứ điều gì, sau đó biến môi trường JAVA_HOME của bạn chưa được thiết lập. Bạn có thể thử sử dụng "định vị java" để thử và khám phá nơi cài đặt Java của bạn.

2

Bạn có đặt JAVA_HOME bạn

  • Korn và bash shell: xuất khẩu JAVA_HOME = jdk-cài đặt-dir
  • Bourne shell: JAVA_HOME = jdk-cài đặt-dir; xuất khẩu JAVA_HOME
  • C shell: setenv JAVA_HOME jdk-cài đặt-dir
+0

Bạn có thiếu dấu chấm phẩy ở đó không? –

+0

cố định, nhờ Tom –

29

tôi biết đây là muộn, nhưng lệnh này tìm kiếm thư mục/usr/thư mục để tìm java cho bạn

sudo find /usr/ -name *jdk 

Kết quả đến

/usr/lib/jvm/java-6-openjdk 
/usr/lib/jvm/java-1.6.0-openjdk 

FYI, nếu bạn đang ở trên một máy Mac, hiện JAVA_HOME tọa lạc tại

/System/Library/Frameworks/JavaVM.framework/Home

+1

Đã phải sử dụng sudo find/-name * javac để tìm oracle VM Tôi đã cài đặt – bulltorious

+1

Bạn có thể muốn thử sudo find/usr/-name * jdk * 'như con đường của tôi là '/ usr/lib/jvm/java-7-openjdk-amd64 /'. – JVE999

51

Trên Linux bạn có thể chạy $(dirname $(dirname $(readlink -f $(which javac))))

Trên Mac bạn có thể chạy $(dirname $(readlink $(which javac)))/java_home

Tôi không chắc chắn về các cửa sổ nhưng tôi tưởng tượng where javac sẽ giúp bạn có khá gần

+6

Đây là một giải pháp tuyệt vời, nhưng hãy nhớ sử dụng cờ chuẩn cho readlink vì Java có thể được thiết lập với nhiều liên kết, vì vậy hãy sử dụng '$ (dirname $ (dirname $ (readlink -f $ (which javac))))' on Linux thay vì –

+0

Cảm ơn @ MatthewO'Riordan! Tôi đã thêm cờ '-f' cho lệnh linux. Lưu ý rằng 'readlink' trên mac không phải là phiên bản' GNU' vì vậy tôi đã loại trừ '-f' cho phiên bản mac của tập lệnh. Người dùng Mac có phiên bản 'GNU' của' readlink' được cài đặt thông qua brew có thể sử dụng '-f'. – jsdevel

+0

Điều này đặc biệt tốt cho những người sử dụng/etc/alternative để quản lý các phiên bản java khác nhau. – gilbertpilz

8

Để hiển thị giá trị của một biến môi trường bạn sử dụng:

echo $ BIẾN

như vậy trong bạn trường hợp sẽ là:

echo $ JAVA_HOME

Trong trường hợp bạn không có nó setted, bạn có thể thêm vào .bashrc tập tin của bạn:

xuất khẩu JAVA_HOME = $ (readlink -f/usr/bin/java | sed "s: bin/java ::")

và nó sẽ tự động thay đổi khi bạn cập nhật gói của mình.

+0

hoạt động tốt trên Fedora và Ubuntu –

+0

Lệnh sed không an toàn: nếu/usr/bin/java là liên kết tượng trưng với '/ usr/bin/java-8/bin/java' thì sao? Bạn sẽ nhận được đầu ra '/ usr/-8/bin/java'. – GKFX

+0

Giải pháp tuyệt vời! nếu bạn muốn sử dụng jdk như nhà thay vì jre chỉ cần chỉnh sửa readlink -f/usr/bin/java | sed "s: jre/bin/java ::" – cyberoblivion

7

Nếu $JAVA_HOME được định nghĩa trong môi trường của bạn ...

$ echo $JAVA_HOME 
$ # I am not lucky... 

Bạn có thể đoán nó từ các lớp được nạp.

$ java -showversion -verbose 2>&1 | head -1 
[Opened /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64/jre/lib/rt.jar] 

Phương pháp này đảm bảo bạn tìm ra đúng jdk/jre sử dụng trong trường hợp có nhiều bản cài đặt.

Hoặc sử dụng strace:

$ strace -e open java -showversion 2>&1 | grep -m1 /jre/ 
open("/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64/jre/bin/../lib/amd64/jli/tls/x86_64/libpthread.so.0", O_RDONLY) = -1 ENOENT (No such file or directory) 
11

Chỉ cần một giải pháp, nền tảng của cái này (sử dụng java), và chỉ bạn đến vị trí của jre.

java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home' 

đầu ra tất cả các thiết lập hiện java 's, và tìm thấy một gọi java.home.

+1

Tôi đã nghiên cứu rất nhiều cách để tìm JAVA_HOME và tôi nghĩ đây là một trong những cách tốt nhất! Cảm ơn bạn đã đề cập đến nó! – ricovox

+0

Rất vui được! –

+1

Nó có thể đáng nói đến là điều này bắt đầu làm việc với JDK1.7 (IIRC). Trước đó bạn sẽ cần phải gọi: 'jrunscript -e 'java.lang.System.out.println (java.lang.System.getProperty (" java.home "));''. Trong cả hai trường hợp, đối với các khía cạnh 'nền tảng chéo', bạn nên thêm một '/ usr/bin/env'. – Moreaki

1

Dưới đây là một sự cải tiến, grabbing chỉ thư mục để stdout:

java -XshowSettings:properties -version 2>&1 \ 
    | sed '/^[[:space:]]*java\.home/!d;s/^[[:space:]]*java\.home[[:space:]]*=[[:space:]]*//' 
+0

Một chút ngắn hơn, mặc dù với ba nhánh thay vì hai, như sau: ': $ {JAVA_HOME: = $ (/ usr/bin/env java -XshowSettings: thuộc tính -version 2> & 1 | grep" java.home "| cut -d "=" -f2)} ' – Moreaki

+0

Nếu cần xuất trực tiếp đường dẫn:' xuất $ (/ usr/bin/env java -XshowSettings: thuộc tính -version 2> & 1 | grep "java.home" | sed -e 's/java.home/JAVA_HOME /; s/// g;') ' – Moreaki

Các vấn đề liên quan