Làm cách nào để xác định JAVA_HOME trên Debian / Ubuntu?


95

Trên Ubuntu có thể có nhiều JVM cùng một lúc. Một mặc định được chọn với update-alternatives. Nhưng điều này không đặt JAVA_HOMEbiến môi trường, do chính sách debian .

Tôi đang viết một kịch bản launcher (bash), để khởi động một ứng dụng java. Ứng dụng java này cần JAVA_HOMEbiến môi trường. Vậy làm thế nào để có được đường dẫn của JVM hiện đang được chọn bởi update-alternatives?

Câu trả lời:


137

Đối với JRE, một cái gì đó như thế này nên thực hiện mẹo:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

17
Tôi cần ngôi nhà của JDK thay vì JRE, nhưng tôi đã nhận được điều này bằng cách sử dụng: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") Cảm ơn bạn!
Witek

Khi tôi thử lệnh echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), đầu ra là /usr/lib/jvm/java-7-oracle/jre/và không/usr/lib/jvm/java-7-oracle/
Sumit Ramteke

Mã được đưa ra trong rsaddey hoạt động chính xác
Sumit Ramteke

43

Giải pháp của danadam có thể dễ dàng được chấp nhận để lấy đường dẫn JDK (tức là không phải JRE) theo yêu cầu:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Tìm kiếm trình biên dịch javac Java (thay vì java) có trong JDK (nhưng không phải JRE).
  • Không có dấu / / bị loại bỏ bởi sed s: / bin ... thay vì s: bin ...)

12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

Trong .bashrclà tiện dụng cho tôi.


9

Vì vậy, bạn đang nói rằng lệnh này không làm gì cho bạn?

sudo update-alternatives --config java 

2
Có phải đó là giả sử để đặt JAVA_HOME của bạn? Tôi đã thấy rằng các lựa chọn thay thế cập nhật java là một cách tốt hơn để cập nhật Java vì các lựa chọn thay thế cập nhật không cập nhật tất cả các lựa chọn thay thế liên quan đến Java. Xem Askubfox.com/questions/141791
James McMahon

Đúng, nhưng tôi đã gặp các phiên bản Linux có các lựa chọn thay thế cập nhật nhưng chưa cài đặt các thay thế cập nhật java.
djangofan

3

Tôi đã cài đặt java với

sudo apt-get install openjdk-7-jre-headless

và sau đó để tìm vị trí

ls -al /etc/alternatives/java

2

Là một phần mở rộng của câu trả lời danadams:

Trước hết, cài đặt JRE Java thứ 2 làm tùy chọn java thứ 3, với mức độ ưu tiên là "3":

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Sau đó, bạn có thể liệt kê chúng:

update-alternatives --list java

Bạn có thể thiết lập thay thế bằng tay, sử dụng:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Sau đó, tập lệnh của bạn có thể thiết lập nó một cách nhanh chóng, như vậy:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Điều này minh họa rõ hơn những gì lệnh 'sed' đang làm. Mặc dù bạn vẫn cần phải thiết lập các liên kết cho javaw và javac, v.v., mỗi liên kết được thực hiện riêng biệt.


1

Cách đây một thời gian, tôi đã tạo một hướng dẫn trên diễn đàn Ubuntu về cách cài đặt JRE / JDK mới nhất từ ​​trang web Java. Nó cũng đề cập đến cách kích hoạt toàn hệ thống, bằng cách thêm vị trí JRE / JDK vào biến PATH. Nếu bạn thích, bạn cũng có thể thêm JAVA_HOME vào tập lệnh, được đề cập ở cuối chủ đề.

Hãy xem thử: http://ubuntuforums.org/showthread.php?t=1437100


1

Nếu java được cấu hình với update-alternativeshoặc được thêm vào biến PATH của bạn theo cách thủ công, thì không cần mã hóa cứng "/usr/bin/java". Tôi sử dụng giải pháp này trong .bashrc của mình:

export JAVA_HOME=$(readlink -m $(which java)/../..)

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.