Chuyển đổi giữa nhiều phiên bản java


65

Trong khi cài đặt Android Studio trên Ubuntu 14.04, tôi nhận được thông báo rằng phiên bản Java ( javac 1.7.0_79) của tôi đang gây ra sự cố. Tôi đã tìm thấy một giải pháp về cách cài đặt phiên bản Java mới hơn của Java:

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Tuy nhiên tôi sợ rằng điều này có thể ghi đè lên open-jdkphiên bản Java hiện có của tôi . Vì tôi không biết chương trình nào của mình phụ thuộc vào Java, tôi sợ rằng điều này có thể làm sập các chương trình khác này.

Có cách nào để đảm bảo apt-getkhông ghi đè lên Java trước của tôi không? Về cơ bản tôi muốn cài đặt cả hai và có thể chuyển đổi giữa chúng theo cách thủ công, tùy thuộc vào phiên bản tôi cần.

Câu trả lời:


83

Apt-get sẽ không ghi đè lên các phiên bản java hiện có.

Để chuyển giữa các phiên bản java đã cài đặt, sử dụng update-java-alternativeslệnh.

Liệt kê tất cả các phiên bản java:

update-java-alternatives --list

Đặt phiên bản java làm mặc định (cần quyền root):

sudo update-java-alternatives --set /path/to/java/version

... Đâu /path/to/java/versionlà một trong những thứ được liệt kê bởi lệnh trước đó (ví dụ /usr/lib/jvm/java-7-openjdk-amd64).


Thông tin thêm:

update-java-alternativeslà một công cụ thuận tiện sử dụng Debian của hệ thống lựa chọn thay thế ( update-alternatives) để thiết lập một loạt các liên kết đến các phiên bản java quy định (ví dụ java, javac...).


1
Đối với tôi, điều này khiến java -version trở thành java8, nhưng JAVA_HOME vẫn được đặt thành 7 :(
Nenotlep

tq này giải quyết vấn đề của tôi quá. @Nenotlep những gì tôi đã làm là chỉnh sửa biến môi trường theo cách thủ công trong .bashrc hoặc / etc / môi trường
nuttynibble

update-java-alternativeskhông có sẵn cho tôi. Tôi chỉ thay thế lệnh đó bằng update-alternatives java.
sáng lập

@nofinator chỉ ảnh hưởng đến việc javathực thi. Bạn sử dụng phiên bản Ubuntu nào?
danzel

1
@Nenotlep để thay đổi, JAVA_HOMEbạn phải chạy lệnh sau: source /etc/environment
janb

48

Sử dụng

sudo update-alternatives --config java

trong đó liệt kê tất cả các phiên bản đã cài đặt với phiên bản hiện hoạt được đánh dấu và cung cấp hộp thoại để chuyển đổi:

There are 3 choices for the alternative java (providing /usr/bin/java).

Selection    Path...
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-oracle/bin/java...
* 1            /usr/lib/jvm/java-7-oracle/jre/bin/java...
  2            /usr/lib/jvm/java-8-oracle/jre/bin/java...
  3            /usr/lib/jvm/java-9-oracle/bin/java...

Press <enter> to keep...[*], or type selection number: 

Sử dụng

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

để đặt $JAVA_HOMEtừ phiên bản hoạt động hiện tại


Theo ghi nhận của @danzel tại câu trả lời được chấp nhận, điều này chỉ ảnh hưởng đến phần javathực thi chứ không ảnh hưởng đến các phần khác của cấu hình. Sử dụng update-java-alternativesnếu có sẵn.
Premek Brada

5

Dựa trên câu trả lời từ @muet, tôi thấy điều này hoạt động trơn tru:

Thêm cái này vào ~/.bashrc:

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

Thêm vào bí danh:

alias useJava8='yes | sudo apt-get install oracle-java8-set-default && source ~/.bashrc'
alias useJava7='yes | sudo apt-get install oracle-java7-set-default && source ~/.bashrc'

Sau đó, bạn có thể chuyển đổi trong cùng một vỏ bằng cách sử dụng: useJava7hoặcuseJava8


để tạo bí danh vĩnh viễn, người ta có thể đặt chúng vào ~ / .bashrc, thông tin thêm ở đây Askubfox.com/questions/17536/ chủ
Konstantin Zyubin

E: Không thể xác định vị trí gói oracle-java7-set-default
Prakash Pandey

Cách dễ nhất để cài đặt, sử dụng và chuyển đổi giữa các phiên bản java khác nhau là sử dụng SDKMAN! Xem tại đây: sdkman.io/usage.html
brianjohnsen

Gần đây bắt gặp một lệnh khác để đặt JAVA_HOME, chưa thử .bashrc:export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
ThiamTeck

3

Cấu hình Java

Bạn có thể định cấu hình phiên bản nào là mặc định để sử dụng trong dòng lệnh bằng cách sử dụng update-alternatives, quản lý các liên kết tượng trưng nào được sử dụng cho các lệnh khác nhau.

sudo update-alternatives --config java

Đầu ra sẽ trông giống như sau.

There are 5 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-6-oracle/jre/bin/java          1         manual mode
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          2         manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  4            /usr/lib/jvm/java-8-oracle/jre/bin/java          3         manual mode
  5            /usr/lib/jvm/java-9-oracle/bin/java              4         manual mode

Press <enter> to keep the current choice[*], or type selection number:

Bây giờ bạn có thể chọn số để sử dụng làm mặc định. Điều này cũng có thể được thực hiện cho các lệnh Java khác, chẳng hạn như trình biên dịch ( javac), trình tạo tài liệu ( javadoc), công cụ ký JAR ( jarsigner), v.v. Bạn có thể sử dụng lệnh sau, điền vào lệnh bạn muốn tùy chỉnh.

sudo update-alternatives --config command

Đặt JAVA_HOMEbiến môi trường

Nhiều chương trình, chẳng hạn như máy chủ Java, sử dụng biến môi trường JAVA_HOME để xác định vị trí cài đặt Java.

Sao chép đường dẫn từ cài đặt ưa thích của bạn và sau đó mở / etc / môi trường bằng Sublime Text hoặc trình soạn thảo văn bản yêu thích của bạn.

sudo subl /etc/environment

Ở cuối tệp này, thêm dòng sau, đảm bảo thay thế đường dẫn được tô sáng bằng đường dẫn được sao chép của riêng bạn.

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Lưu và thoát tệp và tải lại : source /etc/environment.
Bây giờ bạn có thể kiểm tra xem biến môi trường đã được đặt hay chưa bằng cách thực hiện lệnh sau : echo $JAVA_HOME. Điều này sẽ trả về đường dẫn bạn vừa đặt.

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.