Cách đặt JAVA_HOME trong Linux cho tất cả người dùng


185

Tôi chưa quen với hệ thống Linux và dường như có quá nhiều thư mục Java.

java -version cho tôi:

  • phiên bản java "1.7.0_55"
  • Môi trường thời gian chạy OpenJDK (rrc-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64-Bit Server VM (bản dựng 24.51-b03, chế độ hỗn hợp)

Khi tôi đang cố gắng xây dựng một dự án Maven, tôi gặp lỗi:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Bạn có thể vui lòng cho tôi biết những tập tin nào tôi cần sửa đổi cho người dùng root cũng như người dùng không root và java chính xác nằm ở đâu không?

Câu trả lời:


352
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Chuẩn bị sudo nếu đăng nhập như người dùng không có đặc quyền, nghĩa là. sudo vim

  3. Nhấn 'i' để vào chế độ chèn
  4. thêm vào:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. đăng xuất và đăng nhập lại, khởi động lại hoặc sử dụng source /etc/profileđể áp dụng các thay đổi ngay lập tức trong trình bao hiện tại của bạn

29
đừng quên xóa dấu ngoặc kép và tạo lại chúng từ bàn phím của bạn, bởi vì chỉ sao chép và dán có thể tạo ra rắc rối.
Sunil Kumar

12
@rbaleksandar một số ứng dụng phụ thuộc vào JAVA_HOME, không ảnh hưởng đến việc thiết lập nó.
raffian

2
IntelliJ là một ứng dụng như vậy - và không phải là một ứng dụng nhỏ.
Pete

12
Bạn cần phải chạy source /etc/profileđể thay đổi có hiệu lực ngay lập tức!
Mohamed Taher Alrefaie

1
Điều này chỉ cho tôi đi đúng hướng. Thực sự có một thứ cũ /etc/profile.d/jdk.shtrôi nổi trong hệ thống của tôi.
Hermann

109

Đối với tất cả người dùng, tôi khuyên bạn nên đặt dòng sau vào /etc/profile

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

Điều này sẽ cập nhật linh hoạt và hoạt động tốt với hệ thống thay thế . Hãy lưu ý rằng bản cập nhật sẽ chỉ diễn ra trong một vỏ đăng nhập mới.


10
để tuân thủ chỉ sử dụng JRE (thậm chí không đầu) đơn giản export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")- lưu ý rằng tôi chỉ sử dụng javachứ không phảijavac
Roman Kruglov

@occulta Ít nhất Maven mong đợi JAVA_HOME trỏ đến JDK và sử dụng nó để định vị trình biên dịch java.
Eero Aaltonen

1
Upvote cho readlinkvà cập nhật / nâng cấp giải pháp tương thích, thậm chí đây là một chủ đề 5 năm tuổi. Tôi chỉ khuyên không nên chỉnh sửa / etc / profile, nhưng đặt xuất của bạn bên trong tệp tùy chỉnh, ví dụ /etc/profile.d/java_environment.sh, có thể bạn phải chmod +x java_environment.shvà khởi động lại.
ChristophS

Hoàn hảo. Tốt hơn so với dirnamegiải pháp clunky -ing của tôi . Nếu bạn giống tôi và muốn hiểu những gì đang diễn ra ở đây, thì đây là một sự thay thế đơn giản của văn bản phù hợp từ đầu vào bằng một chuỗi trống. Ký tự "mặc định" để thay thế là /, nhưng miễn là bạn nhất quán, bạn có thể thay thế /bằng bất cứ thứ gì. Trong trường hợp này, đó là dấu hai chấm khi chúng ta sử dụng /cho dấu phân cách đường dẫn.
Ungeheuer

35

Bạn có thể sử dụng / etc / profile hoặc tốt hơn là một tệp như /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Bạn phải nhớ rằng tệp này chỉ được tải với các vỏ đăng nhập mới .. Vì vậy, sau bash -l hoặc một phiên gnome mới và nó không thay đổi với các phiên bản Java mới.


1
ít nhất là trong linux của tôi (raspbian), / etc / profile sẽ lấy nguồn /etc/profile.d/*.shđể tập tin của bạn cần được gọi jdk_home.shđể nó có nguồn gốc
Hilikus

Cảm ơn @Hilikus :-) Tôi đã thay đổi nó cho phù hợp.
nổi

2
Cảm ơn bạn. tôi đã kết hợp câu trả lời của bạn và @ Eero cho những điều tốt nhất của cả hai thế giới;)
Hilikus

1
Đây là câu trả lời hay nhất
Jacob

/etc/profile.d/jdk_home.shlà câu trả lời rõ ràng hơn, ít nhất là đối với Ubuntu , đã /etc/profilebị vón cục với rất nhiều logic. Có vẻ không khôn ngoan khi thêm nhiều hơn vào nó ...
Ng Sek Long

30

Không có câu trả lời nào khác "gắn bó" với tôi trong RHEL 7, thậm chí là cài đặt JAVA_HOMEPATHtrực tiếp /etc/profilehoặc ~/.bash_profilekhông hoạt động. Mỗi lần tôi cố kiểm tra xem JAVA_HOMEđã được đặt chưa, nó sẽ xuất hiện trống:

$ echo $JAVA_HOME
    (<-- no output)

Những gì tôi phải làm là thiết lập một kịch bản trong /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Ban đầu tôi đã bỏ qua dòng đầu tiên (và #!/bin/sh), và nó sẽ không hoạt động nếu không có nó.

Bây giờ nó đang hoạt động:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

Tôi đã có cùng trải nghiệm trên RHEL 7. Tôi đã xóa xuất khẩu khỏi ~ / .bash_profile và sử dụng phương pháp này.
xpagesbeast

#! / bin / sh không bắt buộc trong jdk_home.sh của bạn. Một khi bạn thực hiện cấu hình, hãy đảm bảo đăng xuất và đăng nhập lại
kuhajeyan

12

Rất dễ dàng để thiết lập một đường dẫn trong Linux. Làm như sau:

Bước 1 Mở thiết bị đầu cuối và gõ sudo gedit .bashrc

Bước 2 Nó sẽ hỏi bạn mật khẩu của bạn. Sau khi gõ mật khẩu, nó sẽ mở tệp bash. Sau đó đi đến kết thúc và gõ dưới đây

bước 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

Bước 4 Sau đó lưu tệp và thoát khỏi tệp

Trên đây là cho một người dùng duy nhất. Đối với tất cả người dùng, bạn phải làm theo các bước dưới đây

Bước 1 gedit /etc/profile

Bước 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Bước 3 export PATH=$PATH:$JAVA_HOME/bin

Hi vọng điêu nay co ich. Cảm ơn!


2
Câu trả lời này đặt nó chỉ dành cho người dùng hiện tại.
Manuel Manhart

Cảm ơn bạn @ickyrr
PyDevSRS

7

Làm những gì Oracle làm (với tư cách là cựu nhân viên của Sun, tôi không thể quen với điều đó)

ln -s mới nhấtJavaRelease / usr / java / default
Trong đó mới nhấtJavaRelease là phiên bản mà bạn muốn sử dụng

sau đó xuất JAVA_HOME = / usr / java / default


6

Câu trả lời được đưa ra bài viết trước là hợp lệ. Nhưng không có một câu trả lời nào hoàn chỉnh đối với:

  1. Thay đổi / etc / profile không được khuyến nghị đơn giản vì lý do (như đã nêu trong / etc / profile):
  • KHÔNG nên thay đổi tệp này trừ khi bạn biết bạn đang làm gì. Sẽ tốt hơn nhiều khi tạo tập lệnh shell custom.sh trong /etc/profile.d/ để thực hiện các thay đổi tùy chỉnh cho môi trường của bạn, vì điều này sẽ ngăn nhu cầu hợp nhất trong các bản cập nhật trong tương lai. *
  1. Vì vậy, như đã nêu ở trên, hãy tạo tập tin /etc/profile.d/custom.sh để thay đổi tùy chỉnh.

  2. Bây giờ, để luôn được cập nhật với các phiên bản Java mới hơn đang được cài đặt, không bao giờ đặt đường dẫn tuyệt đối, thay vào đó hãy sử dụng:

#if làm jdk như java nhà

xuất JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

HOẶC LÀ

#if làm jre như java nhà

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

  1. Và nhớ có #! / bin / bash trên tệp custom.sh

4

Sao chép đường dẫn tệp bin bạn đã cài đặt

YOUR PATH

mở terminal và chỉnh sửa tập tin môi trường bằng cách gõ lệnh sau,

sudo nano /etc/environment

Trong tệp này, thêm dòng sau (thay thế YOUR_PATHbằng đường dẫn vừa sao chép):

JAVA_HOME="YOUR_PATH"

Điều đó là đủ để đặt biến môi trường. Bây giờ tải lại tập tin này:

source /etc/environment

Bây giờ kiểm tra nó bằng cách thực hiện:

echo $JAVA_HOME

3
olny có hiệu lực phiên thiết bị đầu cuối hiện tại
Fatih Türker

@ FatihTürker Khởi động lại PC của bạn
Jack Giffin

Đối với tôi khi sử dụng jdk11, YOU_PATH là/usr/lib/jvm/default-java/
Jack Giffin

2

Trên Linux, tôi thêm dòng này vào ~ / .profile:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
Có vẻ như một câu trả lời có khả năng đúng nhưng bạn có thể giải thích lý do tại sao nó hoạt động, nghĩa là nó làm gì và vấn đề của OP là gì? Ngoài ra, bạn nói "trên Linux", nhưng có nhiều bản phân phối Linux khác nhau và nó có thể không hoạt động cho tất cả chúng, vui lòng thêm vào để bản phân phối này hoạt động.
Buurman

2

Bước 1 - kiểm tra phiên bản java hiện tại bằng cách "echo $ JAVA_HOME"

Bước 2 - vim / etc / profile

Bước 3 - Ở cuối tệp bạn sẽ tìm thấy xuất JAVA_HOME, chúng tôi cần cung cấp đường dẫn mới ở đây, đảm bảo rằng nó không tương đối.

Bước 4 - Lưu và thoát: wq

Bước 5 - "nguồn / etc / profile /", điều này sẽ thực hiện thay đổi

Bước 6 - Một lần nữa thực hiện tiếng vang $ JAVA_HOME - thay đổi sẽ được phản ánh.


2

1 ... Sử dụng phím tắt Ctlr+ Alt+ Tđể mở thiết bị đầu cuối

2 ... Thực hiện lệnh dưới đây:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (Khuyến nghị) Khởi động lại VM / máy tính của bạn. Bạn có thể sử dụng source /etc/sourcenếu không muốn khởi động lại máy tính

4 ... Sử dụng phím tắt Ctlr+ Alt+ Tđể mở thiết bị đầu cuối

5 ... Đã xác minh trả góp JAVA_HOME với

echo $JAVA_HOME

Bản sao một lớp từ flob , tín dụng cho họ


2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME

1

Có lẽ là một ý tưởng tốt để lấy bất kỳ hồ sơ nào bạn chỉnh sửa để tiết kiệm phải sử dụng thông tin đăng nhập mới.

hoặc: nguồn / etc / hoặc. /Vân vân/

Trường hợp bất cứ hồ sơ bạn chỉnh sửa.


1

Mặc dù chúng tôi sắp đặt JAVA_HOME, hãy để tôi chia sẻ một số lợi ích của việc đặt JAVA_HOME hoặc bất kỳ biến môi trường nào khác:

1) Thật dễ dàng để nâng cấp JDK mà không ảnh hưởng đến tệp cấu hình và khởi động ứng dụng của bạn, trỏ đến JAVA_HOME. bạn chỉ cần tải xuống phiên bản mới và đảm bảo JAVA_HOME của bạn trỏ đến phiên bản Java mới. Đây là lợi ích tốt nhất của việc sử dụng biến môi trường hoặc liên kết.

2) Biến JAVA_HOME ngắn và súc tích thay vì đường dẫn đầy đủ đến thư mục cài đặt JDK.

3) Biến JAVA_HOME là độc lập nền tảng, tức là nếu tập lệnh khởi động của bạn sử dụng JAVA_HOME thì nó có thể chạy trên Windows và UNIX mà không cần sửa đổi gì, bạn chỉ cần đặt JAVA_HOME trên hệ điều hành tương ứng.

Đọc thêm: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-en môi-in.html # ixzz4BWmaYIjH


1

Đây là một kịch bản rất đơn giản để giải quyết vấn đề

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

Và để thử nghiệm:

echo $JAVA_HOME

1

Đăng như là câu trả lời, vì tôi không có đặc quyền để bình luận.

Điểm cần lưu ý : làm theo câu trả lời được chấp nhận được đăng bởi "That Dave Guy".

Sau khi đặt các biến, hãy đảm bảo bạn đặt các quyền thích hợp cho thư mục java nơi nó được cài đặt.

chmod -R 755 /usr/java

1

Tất cả các bước hoạt động (tìm java, thư mục mẹ, chỉnh sửa tệp, ...) một giải pháp

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Kết quả:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Giải trình:

1) Hãy chia lệnh đầy đủ thành từng mảnh

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Tìm đường dẫn java từ lệnh java

# $(which java)
"/usr/bin/java"

3) Nhận đường dẫn tương đối từ đường dẫn biểu tượng

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Nhận đường dẫn cha mẹ của /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Nhận đường dẫn cha mẹ của /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"


0

mở kafka-run- class.sh với sudo để viết

bạn có thể tìm thấy kafka-run- class.sh trong thư mục kafka của mình: kafka / bin / kafka-run- class.sh

kiểm tra những dòng này

nhập mô tả hình ảnh ở đây

Sửa đổi biến JAVA trong phần khác để trỏ đến tệp thực thi java trong java / bin của bạn. như JAVA = "$ JAVA_HOME / java"


0

Trong / etc / profile, nếu bạn mở, bạn sẽ biết rằng IT không được khuyến nghị viết trên tệp đó. Thay vì điều đó, hãy tạo một tập lệnh của các lệnh của bạn (giả sử test.sh) đi đến thư mục /etc/profile.d và đặt test.sh ở đó. Mỗi khi bạn khởi động lại, nó sẽ tự động được gọi bởi / etc / profile.


-1

Tôi sử dụng dòng:

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

to my ~ / .profile để nó sử dụng cơ sở của thư mục java mặc định tại thời điểm đăng nhập. Đây là cho bash.

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.