Cách sử dụng lệnh update-Alternatives --config java


80

Tôi đang cài đặt Apache Solr trên Linux Debian (Squeeze). Tôi đã được hướng dẫn cài đặt sun-java jdk 1st. Sau đó, được thông báo rằng tôi nên sử dụng lệnh sudo update-alternatives --config javađể đảm bảo rằng một java cụ thể (sun-java) là thời gian chạy mặc định. Tuy nhiên, khi tôi chạy lệnh này, tôi nhận được:

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

  Selection    Path                                      Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      auto mode
  1            /usr/bin/gij-4.4                           1044      manual mode
  2            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      manual mode
  3            /usr/lib/jvm/java-6-sun/jre/bin/java       63        manual mode

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

Vậy tôi nên chọn số nào để có sun-java làm thời gian chạy mặc định? Ngoài ra, chính xác thì chế độ tự động và thủ công có nghĩa là gì? Nếu tôi chọn 3 ở trên và chạy lệnh cập nhật-thay thế, tôi nhận được kết quả tương tự như trên, một lần nữa dường như không có gì thay đổi ngoại trừ dấu * hiện ở phía trước 3, mặc dù nó vẫn đọc ở chế độ thủ công.

Có cách nào để xác nhận rằng những gì tôi đã làm là đúng không?

Câu trả lời:


49

Bạn sẽ nhận thấy một sự thay đổi lớn khi chọn các tùy chọn nếu bạn nhập "java -version" sau khi làm như vậy. Vì vậy, nếu bạn chạy update-alternatives --config javavà chọn tùy chọn 3, bạn sẽ sử dụng triển khai Mặt trời .
Ngoài ra, liên quan đến autovs manual mode, làm cho một sự lựa chọn nên mang nó ra khỏi auto modemỗi trang này nêu rõ:

Khi sử dụng --configtùy chọn, các lựa chọn thay thế sẽ liệt kê tất cả các lựa chọn cho nhóm liên kết mà tên đã cho là liên kết chính. Sau đó, bạn sẽ được nhắc lựa chọn nào để sử dụng cho nhóm liên kết. Sau khi bạn thực hiện thay đổi, nhóm liên kết sẽ không còn ở trong đó auto modenữa. Bạn sẽ cần sử dụng --autotùy chọn này để trở về trạng thái tự động.

Và tôi tin rằng auto modenó được thiết lập khi bạn cài đặt JRE / JDK đầu tiên / duy nhất.


31

update-alternatives là vấn đề trong trường hợp này vì nó buộc bạn phải cập nhật tất cả các phần tử tùy thuộc vào JDK.

Đối với mục đích cụ thể này, gói java-commonchứa một công cụ được gọi là update-java-alternatives.

Thật đơn giản khi sử dụng nó. Đầu tiên hãy liệt kê các bản cài đặt JDK có sẵn trên máy của bạn:

root@mylaptop:~# update-java-alternatives -l
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1069 /usr/lib/jvm/java-1.8.0-openjdk-amd64

Và sau đó chọn một cái:

root@mylaptop:~# update-java-alternatives -s java-1.7.0-openjdk-amd64

27

Giả sử một người đã cài đặt JDK /opt/java/jdk1.8.0_144thì:

  1. Cài đặt thay thế cho javac

    $ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_144/bin/javac 1
    
  2. Kiểm tra / cập nhật cấu hình các lựa chọn thay thế:

    $ sudo update-alternatives --config javac
    

Nếu chỉ có một giải pháp thay thế duy nhất cho javacbạn, bạn sẽ nhận được thông báo nói như vậy, nếu không hãy chọn tùy chọn cho JDK mới.

Để kiểm tra mọi thứ đã được thiết lập chính xác, hãy:

$ which javac
/usr/bin/javac

$ ls -l /usr/bin/javac
lrwxrwxrwx 1 root root 23 Sep  4 17:10 /usr/bin/javac -> /etc/alternatives/javac

$ ls -l /etc/alternatives/javac
lrwxrwxrwx 1 root root 32 Sep  4 17:10 /etc/alternatives/javac -> /opt/java/jdk1.8.0_144/bin/javac

Và cuối cùng

$ javac -version
javac 1.8.0_144

Lặp lại cho java, keytool, jar, v.v. nếu cần.


Làm cách nào để cập nhật thông tin này tự động? Tôi chỉ cảm thấy mệt mỏi vì phải tự cấu hình nó mỗi khi gọisudo update-alternatives --config javac
Đá

15

Đây là cách tôi cài đặt jdk

#!/bin/bash
cd /opt/
sudo mkdir java
sudo tar -zxvf ~/Downloads/jdk-8u192-linux-x64.tar.gz
sudo ln -s  jdk1.8.0_192 current
for file in /opt/java/current/bin/*
do
   if [ -x $file ]
   then
      filename=`basename $file`
      sudo update-alternatives --install /usr/bin/$filename $filename $file 20000
      sudo update-alternatives --set $filename $file
      #echo $file $filename
   fi
done

7

Có nhiều mã nhị phân khác cần được liên kết vì vậy tôi nghĩ tốt hơn nhiều là hãy thử một cái gì đó như sudo update-alternatives --allvà chọn các giải pháp thay thế phù hợp cho mọi thứ khác ngoài javajavac.


6

Tôi đang sử dụng Ubuntu 18.04 LTS. Đa phần, khi thay đổi javabản thân, tôi cũng muốn sử dụng cùng một javacphiên bản.
Tôi sử dụng update-alternativestheo cách này, sử dụng một giải java_homepháp thay thế:

Cài đặt

Cài đặt mọi phiên bản java /opt/java/<version>, chẳng hạn

~$ ll /opt/java/
total 24
drwxr-xr-x 6 root root 4096 jan. 22 21:14 ./
drwxr-xr-x 9 root root 4096 feb.  7 13:40 ../
drwxr-xr-x  8 stephanecodes stephanecodes 4096 jan.   8  2019 jdk-11.0.2/
drwxr-xr-x  7 stephanecodes stephanecodes 4096 dec.  15  2018 jdk1.8.0_201/

Định cấu hình các lựa chọn thay thế

~$ sudo update-alternatives --install /opt/java/current java_home /opt/java/jdk-11.0.2/ 100
~$ sudo update-alternatives --install /opt/java/current java_home /opt/java/jdk1.8.0_201 200

Khai báo JAVA_HOME(Trong trường hợp này, tôi sử dụng tập lệnh khởi tạo chung cho việc này)

~$ sudo sh -c 'echo export JAVA_HOME=\"/opt/java/current\" >> environment.sh'

Đăng xuất hoặc khởi động lại Ubuntu (điều này sẽ tải lại /etc/profile.d/environment.sh)

Sử dụng

Thay đổi phiên bản java

Chọn phiên bản bạn muốn sử dụng

~$ sudo update-alternatives --config java_home

There are 2 choices for the alternative java_home (providing /opt/java/current).

  Selection    Path                    Priority   Status
------------------------------------------------------------
  0            /opt/java/jdk-11.0.2     200       auto mode
  1            /opt/java/jdk-11.0.2     200       manual mode
* 2            /opt/java/jdk1.8.0_201   100       manual mode

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

Kiểm tra phiên bản

~$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

~$ javac -version
javac 11.0.2

tiền boa

Thêm dòng sau vào ~/.bash_aliasestệp:

alias change-java-version="sudo update-alternatives --config java_home && java -version && javac -version"

Bây giờ sử dụng change-java-versionlệnh để thay đổi phiên bản java



0

Nếu bạn muốn chuyển jdk thường xuyên (hoặc cập nhật lên jdk mới sau khi nó được phát hành), bạn có thể sử dụng sdkman rất tiện lợi .

Bạn cũng có thể bổ sung các công cụ như maven với sdkman.

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.