it-swarm-vi.tech

Giá trị của Java_HOME cho CentOS là gì?

Tôi đã cài đặt Java qua yum trên CentOS, tuy nhiên một chương trình khác Java cần biết biến môi trường Java_HOME là gì. Tôi biết tất cả về cách đặt biến môi trường, nhưng Tôi phải cài đặt cái gì? Java được cài đặt trong /usr/bin/Java, nó không thể ở đó!

37
Rory

Thật ra tôi đã tìm thấy nó,

nó là /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/. Tôi phát hiện ra nó là gì khi làm update-alternatives --display Java và nó cho tôi xem thư mục /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/Java

54
Rory

Tôi không chắc lắm nhưng nếu bạn cài đặt RPMS bình thường, giá trị Java_HOME cũng có thể được đặt thành:

/usr/Java/default/

EDIT: Tôi vừa kiểm tra trên hệ thống nhà của tôi. Tôi đã tạo tập tin này:

/etc/profile.d/Java.sh

Nó chứa:

export Java_HOME=/usr/Java/default/

và tôi đang sử dụng phiên bản chính thức từ Sun: jdk-1.6.0_12-fcs

EDIT: Đây là cách tôi thiết lập Java trên máy của tôi :

Cài đặt Java

Tải xuống và cài đặt Java JDK từ Oracle

Làm cho nó chính

Đảm bảo điều này Java được sử dụng thay cho phiên bản OpenJDK bằng hai lệnh sau:

Đầu tiên

alternatives --install /usr/bin/Java java /usr/Java/default/bin/Java 999999 \
           --slave /usr/bin/keytool keytool /usr/Java/default/bin/keytool \
           --slave /usr/bin/rmiregistry rmiregistry /usr/Java/default/bin/rmiregistry

Thứ hai

alternatives --install /usr/bin/javac javac /usr/Java/default/bin/javac 999999 \
           --slave /usr/bin/jar jar /usr/Java/default/bin/jar \
           --slave /usr/bin/rmic rmic /usr/Java/default/bin/rmic

Đặt Java_HOME

Đảm bảo tất cả người dùng có biến môi trường Java_HOME được đặt thành giá trị chính xác:

echo "export Java_HOME=/usr/Java/default/" > /etc/profile.d/Java_home.sh
20
Niels Basjes

Dưới đây luôn luôn làm việc cho tôi hoàn hảo:

[[email protected] ~]$ locate bin/Java
/usr/bin/Java
/usr/bin/javac
/usr/bin/javadoc
/usr/bin/javaws
/usr/Java/jdk1.6.0_31/bin/Java
/usr/Java/jdk1.6.0_31/bin/javac
/usr/Java/jdk1.6.0_31/bin/javadoc
/usr/Java/jdk1.6.0_31/bin/javah
/usr/Java/jdk1.6.0_31/bin/javap
/usr/Java/jdk1.6.0_31/bin/javaws
/usr/Java/jdk1.6.0_31/jre/bin/Java
/usr/Java/jdk1.6.0_31/jre/bin/Java_vm
/usr/Java/jdk1.6.0_31/jre/bin/javaws

Điều đó có nghĩa là tôi có thể đặt Java_HOME là /usr/Java/jdk1.6.0_31

2
prashant

Bạn muốn đặt Java_HOME làm vị trí gốc của JDK hoặc JRE, ví dụ:

export Java_HOME=/usr/Java/jdk1.3

Nếu JDK (Bộ công cụ phát triển) được cài đặt, ypu có thể muốn nó trỏ đến đó, nếu không thì sử dụng đường dẫn JRE (Môi trường chạy thi hành Java). Sau đó, bạn có thể muốn đặt biến môi trường $ PATH của mình để bao gồm cả thư mục bin:

export PATH=$PATH:/usr/Java/jdk1.3/bin

Nếu bạn đang sử dụng Tomcat, bạn cũng có thể cần đặt CATALINA_HOME cho người dùng Tomcat.

export CATALINA_HOME=/path/to/Tomcat

Để đặt tùy chọn này cho hệ thống bạn muốn chỉnh sửa/etc/profile hoặc thêm tệp .sh trong thư mục /etc/profile.d. Đối với một người dùng cụ thể, bạn có thể đặt nó vào các tệp người dùng ~/.profile hoặc ~/.bash_profile.

2
Kyle Brandt

Tôi đã xem xét vấn đề nếu một người thay đổi phiên bản Java đang được sử dụng với:

alternatives --config Java

Sau đó, bất kỳ mã hóa cứng Java_HOME sẽ thay đổi (ít nhất là trên Centos 6.6 tôi đang nhìn chằm chằm vào). Đó là, không có /usr/Java.

Đây dường như không phải là cách tốt nhất (mở cho thất bại) nhưng trong 10 phút tôi đã dành cho việc này có vẻ như là cách tốt nhất.

Trong /etc/bashrc Tôi đã sửa đổi cài đặt thành Java_HOME được:

export Java_HOME=$(alternatives --display Java | grep current | sed 's/link currently points to //' | sed 's|/bin/Java||')

Bạn phải làm một cái gì đó tương tự trên MacOSX nhưng không có tất cả grepsed để phân tích kết quả. Chắc chắn alternatives cung cấp một giải pháp tương tự dễ dàng hơn.

Dù sao tôi hy vọng tôi đã giúp.


Cập nhật

Không, đó sẽ là JRE_HOME. JDK/SDK không chứng minh là hiển nhiên (Tôi sẽ tiếp tục tìm kiếm).

alternatives dường như chỉ nói về JRE theo mặc định. Tôi trì hoãn câu trả lời @Niels hoặc chỉ cài đặt Java với yum và đặt Java_HOME cho điều đó (mẹo là nơi tôi tìm thấy nơi được cài đặt!).

yum install Java-1.8.0-openjdk-devel.x86_64
cd /usr/lib/jvm 

Tôi nhận thấy Java_1.8.0 là một liên kết tượng trưng đến /etc/alternatives/Java_sdk_1.8.0 và do đó, đặt $ Java_HOME của tôi thành /usr/lib/jvm/Java_1.8.0. Bên trong /etc/bashrc.

1
HankCa

re: Centos7, tham khảo tệp /etc/Java/java.conf.

trong đó Java_HOME được chỉ định là nằm trong thư mục sau:/usr/lib/jvm/Java

tôi đã kiểm tra, đây là phiên bản chính xác của jdk tôi đã tải qua yum, và vì vậy ...

env của tôi không có Java_HOME được đặt theo mặc định, do đó tôi đặt nó trong .bash_profile

0
theRiley

Tôi thấy trình quản lý gói có thể đặt ở nhiều vị trí khác nhau, vì vậy sử dụng which (bạn sẽ cần cài đặt rõ ràng điều này nếu sử dụng một container), sau đây sẽ ít giòn hơn

javaCompiler=$(which javac)
javaBin=$(dirname $(readlink -f $javaCompiler))
javaHome=${javaBin%/*}
export Java_HOME=$javaHome

hoặc cho JRE

javaExec=$(which Java)
javaBin=$(dirname $(readlink -f $javaExec))
javaHome=${javaBin%/*}
export JRE_HOME=$javaHome
0
Jules Clements

Điều đó thật kỳ lạ, toàn bộ điểm có biến môi trường JAVE_HOME là vì vậy bạn không phải chỉ định đường dẫn cho mỗi chương trình, nó có thể có đường dẫn này bằng cách tìm biến này.

Dù bằng cách nào, cách chính xác để tìm biến môi trường cho Java_HOME là sử dụng echo:

[[email protected] ~]# echo $Java_HOME
/usr/Java/j2sdk1.4.2_09

Chạy lệnh này sẽ hiển thị đường dẫn cho dù bạn đang chạy phiên bản nào, từ dòng lệnh.

0
Dave Drager