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


37

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

Câu trả lời:


54

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

/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/. Tôi đã tìm ra nó là gì bằng cách làm update-alternatives --display javavà nó cho tôi xem thư mục/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java


20

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ó bao gồm:

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 mình :

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 Java này được sử dụng thay vì 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

Oh! thật thú vị. :)
Rory

1
Không có /usr/java/defaulttrong CentOS của tôi 6 hộp với OpenJDK 1.6 và 1.7 được cài đặt.
Daniel Serodio

@DanielSerodio Đúng. Tôi đã mô tả rõ ràng "Tải xuống và cài đặt Java JDK từ Oracle", và sau đó nó tồn tại.
Niels Basjes

2

Bạn muốn đặt JAVA_HOME là 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.


Tôi tự hỏi liệu có lý do chính đáng nào cho việc cài đặt không làm điều này cho bạn nếu chạy với tư cách là siêu người dùng, tôi luôn thấy khó chịu ...
Kyle Brandt

2

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

[user@base ~]$ 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


1

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 nào JAVA_HOMEcũng 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/bashrctôi đã sửa đổi cài đặt thành JAVA_HOME:

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 alternativescung 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).

Các alternativesdường như chỉ được khoảng JRE theo mặc định. Tôi trì hoãn trả lời @Niels hoặc chỉ cài đặt Java yumvà đặ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.0là một liên kết tượng trưng /etc/alternatives/java_sdk_1.8.0và do đó, đặt $ JAVA_HOME của tôi thành /usr/lib/jvm/java_1.8.0. Trong /etc/bashrc.


0

Đ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:

[root@host ~]# 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.


2
Các biến đã không được thiết lập.
Rory

0

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

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 vị trí đó (bạn sẽ cần cài đặt rõ ràng điều này nếu sử dụng một thùng chứa) sau đây là ít dễ vỡ 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
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.