Negli ultimi giorni ho avuto qualche problema con la mia installazione di Java sul sistema. Ho voluto condividere come ho risolto

Installare Java su Ubuntu / Debian

28-04-2020

In questi giorni ho fatto un po' di esperimenti con Java e mi sono accorto di avere una versione troppo nuova di OpenJDK per un’utility che volevo usare. Stavo tentando di usare il comando wsimport, in un prossimo articolo ti spiegherò a cosa serve e perchè mi è servito.

Ho fatto delle ricerche ed ho scoperto che wsimport è stato rimosso a partire da Java 11. Non finisce qui, lanciando qualche altro comando da terminale mi sono anche accorto che la variabile d’ambiente JAVA_HOME nel mio sistema non era correttamente settata.

Ti spiegherò quindi:

  • come installare una specifica versione di OpenJDK, affiancandola (se presente) a quella già installata
  • switchare tra una versione e l’altra di OpenJDK
  • impostare correttamente le variabili di ambiente

Come installare Java

Se vuoi installare la versione di default per la distribuzione che stai utilizzando ti basta digitare nel terminale:

sudo apt install default-jre

per verificare l’installazione ti basta dare java --version:

antonio@xps14:~$ java --version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)

se ti serve anche la jdk:

sudo apt install default-jdk

anche qui per verificare l’avvenuta installazione ti basta dare javac --version:

antonio@xps14:~$ javac --version
javac 11.0.6

Se, come nel mio caso, vuoi installare una specifica versione di OpenJDK allora devi fare così (nel mio esempio installo la 8):

sudo apt install openjdk-8-jre

per la jdk:

sudo apt install openjdk-8-jdk

Qui puoi trovare la lista delle OpenJDK che puoi installare e le relative date di fine del supporto.

Come passare da una versione all’altra di Java

Terminale alla mano, il comando è sudo update-alternatives --config java:

antonio@xps14:~$ sudo update-alternatives --config java 
Sono disponibili 2 scelte per l'alternativa java (che fornisce /usr/bin/java).

  Selezione    Percorso                                        Priorità  Stato
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      modalità automatica
* 1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      modalità manuale
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      modalità manuale

Premere Invio per mantenere il valore predefinito[*] o digitare il numero della selezione:      

per impostare la versione di Java che ti interessa digita il numero corrispondente.

Stessa cosa vale per la JDK sudo update-alternatives --config javac:

antonio@xps14:~$ sudo update-alternatives --config javac
Sono disponibili 2 scelte per l'alternativa javac (che fornisce /usr/bin/javac).

  Selezione    Percorso                                      Priorità  Stato
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1101      modalità automatica
* 1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1101      modalità manuale
  2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      modalità manuale

Premere Invio per mantenere il valore predefinito[*] o digitare il numero della selezione: 

Puoi, in alternativa, digitare il comando:

sudo update-alternatives -l

ti farà vedere la lista delle versioni di Java installate sul tuo sistema:

antonio@xps14:~$ sudo update-java-alternatives -l
java-1.11.0-openjdk-amd64      1111       /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64

per cambiare versione quindi devi digitare sudo update-java-alternatives -s <nome della versione che ti interessa>, dopo il paramentro -s devi inserire uno dei nomi che ti sono apparsi dalla precedente lista, esempio:

sudo update-java-alternatives -s java-1.8.0-openjdk-amd64

Questa seconda alternativa che ti ho fornito ti permette di automatizzare e velocizzare il cambio di versione, magari puoi crearti un alias o inserirli in qualche script bash.

alias java8='sudo update-java-alternatives -s java-1.8.0-openjdk-amd64'
alias java11='sudo update-java-alternatives -s java-1.11.0-openjdk-amd64'

Variabili d’ambiente

A questo punto l’ultima cosa che devi fare è impostare le variabili d’ambiente. Molto semplice.

  • per OpenJDK 11 il path è: /usr/lib/jvm/java-11-openjdk-amd64/bin/java.
  • per OpenJDK 8 il path è: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java.

Sempre nel nostro bel terminale:

sudo nano /etc/environment

e alla fine del file, in una riga vuota, incollerai:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/bin/java"

infine salva e chiudi. Per verificare che tutto sia andato a buon fine echo $JAVA_HOME:

antonio@xps14:~$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64/bin/java

Ora, anche tu, dovresti essere riuscito a riparare o installare Java sul sistema.

Ti segnalo anche che, insieme a questo articolo ho anche pubblicato una piccola modifica al sito. Nelle pagine del blog, ho inserito gli articoli correlati in una card.

Ti piace il nuovo layout? Scrivimelo nei commenti 😃

Buona programmazione!

AP

 

 

 

EDIT: Ho provato anche SDKMAN (link al progetto), è semplicemente fantastico!

Unico requisito:

sudo apt install zip

Per installare SDKMAN:

progressifydev@root:~/$ curl -s "https://get.sdkman.io" | bash

                                -+syyyyyyys:
                            `/yho:`       -yd.
                         `/yh/`             +m.
                       .oho.                 hy                          .`
                     .sh/`                   :N`                `-/o`  `+dyyo:.
                   .yh:`                     `M-          `-/osysoym  :hs` `-+sys:      hhyssssssssy+
                 .sh:`                       `N:          ms/-``  yy.yh-      -hy.    `.N-````````+N.
               `od/`                         `N-       -/oM-      ddd+`     `sd:     hNNm        -N:
              :do`                           .M.       dMMM-     `ms.      /d+`     `NMMs       `do
            .yy-                             :N`    ```mMMM.      -      -hy.       /MMM:       yh
          `+d+`           `:/oo/`       `-/osyh/ossssssdNMM`           .sh:         yMMN`      /m.
         -dh-           :ymNMMMMy  `-/shmNm-`:N/-.``   `.sN            /N-         `NMMy      .m/
       `oNs`          -hysosmMMMMydmNmds+-.:ohm           :             sd`        :MMM/      yy
      .hN+           /d:    -MMMmhs/-.`   .MMMh   .ss+-                 `yy`       sMMN`     :N.
     :mN/           `N/     `o/-`         :MMMo   +MMMN-         .`      `ds       mMMh      do
    /NN/            `N+....--:/+oooosooo+:sMMM:   hMMMM:        `my       .m+     -MMM+     :N.
   /NMo              -+ooooo+/:-....`...:+hNMN.  `NMMMd`        .MM/       -m:    oMMN.     hs
  -NMd`                                    :mm   -MMMm- .s/     -MMm.       /m-   mMMd     -N.
 `mMM/                                      .-   /MMh. -dMo     -MMMy        od. .MMMs..---yh
 +MMM.                                           sNo`.sNMM+     :MMMM/        sh`+MMMNmNm+++-
 mMMM-                                           /--ohmMMM+     :MMMMm.       `hyymmmdddo
 MMMMh.                  ````                  `-+yy/`yMMM/     :MMMMMy       -sm:.``..-:-.`
 dMMMMmo-.``````..-:/osyhddddho.           `+shdh+.   hMMM:     :MmMMMM/   ./yy/` `:sys+/+sh/
 .dMMMMMMmdddddmmNMMMNNNNNMMMMMs           sNdo-      dMMM-  `-/yd/MMMMm-:sy+.   :hs-      /N`
  `/ymNNNNNNNmmdys+/::----/dMMm:          +m-         mMMM+ohmo/.` sMMMMdo-    .om:       `sh
     `.-----+/.`       `.-+hh/`         `od.          NMMNmds/     `mmy:`     +mMy      `:yy.
           /moyso+//+ossso:.           .yy`          `dy+:`         ..       :MMMN+---/oys:
         /+m:  `.-:::-`               /d+                                    +MMMMMMMNh:`
        +MN/                        -yh.                                     `+hddhy+.
       /MM+                       .sh:
      :NMo                      -sh/
     -NMs                    `/yy:
    .NMy                  `:sh+.
   `mMm`               ./yds-
  `dMMMmyo:-.````.-:oymNy:`
  +NMMMMMMMMMMMMMMMMms:`
    -+shmNMMMNmdy+:`


                                                                 Now attempting installation...


Looking for a previous installation of SDKMAN...
Looking for unzip...
Looking for zip...
Looking for curl...
Looking for sed...
Installing SDKMAN scripts...
Create distribution directories...
Getting available candidates...
Prime the config file...
Download script archive...
######################################################################## 100.0%
Extract script archive...
Install scripts...
Set version to 5.9.1+575 ...
Attempt update of interactive bash profile on regular UNIX...
Added sdkman init snippet to /home/progressifydev/.bashrc
Attempt update of zsh profile...
Updated existing /home/progressifydev/.zshrc



All done!


Please open a new terminal, or run the following in the existing one:

    source "/home/progressifydev/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!
progressifydev@root:~/$ 

Ultima operazione per essere operativo:

source "/home/progressifydev/.sdkman/bin/sdkman-init.sh"

Passiamo adesso all’installazione della JDK, per visualizzare tutte le versioni installabili con SDKMAN:

progressifydev@root:~/$ sdk ls java
================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Java.net      |     | 16.ea.24     | open    |            | 16.ea.24-open       
               |     | 16.ea.7.lm   | open    |            | 16.ea.7.lm-open     
               |     | 16.ea.2.pma  | open    |            | 16.ea.2.pma-open    
               |     | 15.0.1       | open    |            | 15.0.1-open         
               |     | 14.0.2       | open    |            | 14.0.2-open         
               |     | 13.0.2       | open    |            | 13.0.2-open         
               |     | 12.0.2       | open    |            | 12.0.2-open         
               |     | 11.0.2       | open    |            | 11.0.2-open         
               |     | 10.0.2       | open    |            | 10.0.2-open         
               |     | 9.0.4        | open    |            | 9.0.4-open          
               |     | 8.0.265      | open    |            | 8.0.265-open  
..
.. Altre versioni (ho tagliato per praticità) ..
..

Ho selezionato la versione che mi interessava dalla colonna Identifier

progressifydev@root:~/$ sdk install java 16.ea.24-open

Downloading: java 16.ea.24-open

In progress...

######################################################################## 100.0%

Repackaging Java 16.ea.24-open...

Done repackaging...

Installing: java 16.ea.24-open
Done installing!


Setting java 16.ea.24-open as default.
progressifydev@root:~/$ 

FFFatto! Semplice no?

Ringrazio Owanesh per avermi segnalato SDKMAN.

AP

 

Antonio Porcelli @progressify

Antonio Porcelli

@progressify

Commenta l'articolo

Se non visualizzi il blocco dei commenti è perchè non hai accettato i cookies.
Cancella le preferenze del tuo browser per questo sito, aggiorna la pagina ed accetta i cookies.