Le versioni di Java presenti nei repository APT di Raspbian possono essere obsolete o comunque inadeguate alle proprie esigenze, pertanto può essere desiderabile installarne altre. In questi casi, per consentire di volta in volta una selezione agevole della versione attiva, occorre tenere opportunamente aggiornate le alternative dei vari eseguibili di ciascun Java Development Kit (JDK) in modo da poter poi utilizzare l’utility update-java-alternatives, inclusa in Raspbian.
Oracle JDK
Le istruzioni che seguono si riferiscono alla versione 7u75 che è l’ultima versione di Java 7 rilasciata pubblicamente da Oracle per ARM, ma possono essere adattate ad altre versioni sostituendo 7 e 1.7.0_75 con la versione di interesse.
- Scaricare dal sito oracle.com una versione del JDK per Linux ARM in formato tar.gz. La versione JDK 7 più recente è la 7u75 Linux ARM v6/v7 Hard Float ABI. Per effettuare il download può essere richiesto un account Oracle gratuito.
- Decomprimere l’archivio nel percorso
/usr/lib/jvm/in modo che ne risulti un’alberatura del tipo/usr/lib/jvm/jdk1.7.0_75/:- Recarsi nella directory contenente l’archivio tar.gz scaricato.
sudo tar xzvf jdk-7u75-linux-arm-vfp-hflt.tar.gz -C /usr/lib/jvm
- Creare un link simbolico (alias) per questa versione di Java:
cd /usr/lib/jvmsudo ln -nsf jdk1.7.0_75 java-7-oracle
- Creare il file jinfo (richiesto da
update-java-alternatives) e le alternative per gli eseguibili; notare che il valore1071rappresenta la priorità e può essere modificato a piacimento (valori tipici sono:1071per JDK 7,1081per JDK 8):cd java-7-oraclesudo mkdir .alternatives && cd .alternativessudo wget https://git.io/fAv4G -O alternatives.javasudo ../bin/javac alternatives.javasudo ../bin/java alternatives .. /usr/lib/jvm/java-7-oracle 1071sudo cp -i .java-*-oracle.jinfo /usr/lib/jvm/sudo ./install-alternatives.sh
- In caso di disinstallazione ovvero prima di installare una versione aggiornata, al fine di rimuovere le alternative che altrimenti resterebbero appese (consigliato), si può eseguire il seguente comando che elimina le stesse alternative precedentemente create da
install-alternatives.sh:sudo /usr/lib/jvm/java-7-oracle/.alternatives/remove-alternatives.sh
BellSoft Liberica JDK
Liberica è un’implementazione di Java per Raspberry Pi totalmente open source. È compilata a partire da OpenJDK, cui BellSoft contribuisce. Le istruzioni che seguono si riferiscono alla versione 9.0.4 ma possono essere adattate ad altre versioni sostituendo 9 e 9.0.4 con la versione di interesse.
- Scaricare dal sito bell-sw.com > Get Liberica JDK una versione del JDK per Linux ARMv7&8 32 Bit HardFloat in formato deb:
cd ~/Downloadswget https://github.com/bell-sw/Liberica/releases/download/9.0.4/bellsoft-jdk9.0.4-linux-arm32-vfp-hflt.deb
sudo apt install ./bellsoft-jdk9.0.4-linux-arm32-vfp-hflt.deb- Creare un link simbolico (alias) per questa versione di Java:
cd /usr/lib/jvmsudo ln -nsf jdk-9.0.4-bellsoft-arm32-vfp-hflt java-9-bellsoft
- Determinare la priorità delle alternative create durante l’installazione:
update-alternatives --display java- Identificare la riga corrispondente al JDK appena installato e la relativa priorità, in questo caso:
/usr/lib/jvm/jdk-9.0.4-bellsoft-arm32-vfp-hflt/bin/java - priority 1901
- Creare il file jinfo (richiesto da
update-java-alternatives) utilizzando la priorità predeterminata:cd java-9-bellsoftsudo mkdir .alternatives && cd .alternativessudo wget https://git.io/fAv4G -O alternatives.javasudo ../bin/javac alternatives.javasudo ../bin/java alternatives .. /usr/lib/jvm/java-9-bellsoft 1901sudo cp -i .java-*-bellsoft.jinfo /usr/lib/jvm/
- Cancellare l’archivio originale per recuperare spazio (facoltativo):
rm ~/Downloads/bellsoft-jdk9.0.4-linux-arm32-vfp-hflt.deb
Per impostare la versione di Java attiva, utilizzare update-java-alternatives:
- Elenco versioni installate:
update-java-alternatives -ljava-10-bellsoft 1904 /usr/lib/jvm/java-10-bellsoft java-1.6.0-openjdk-armhf 1057 /usr/lib/jvm/java-1.6.0-openjdk-armhf java-7-oracle 1071 /usr/lib/jvm/java-7-oracle java-8-oracle 1081 /usr/lib/jvm/java-8-oracle java-9-bellsoft 1901 /usr/lib/jvm/java-9-bellsoft jdk-7-oracle-arm-vfp-hflt 317 /usr/lib/jvm/jdk-7-oracle-arm-vfp-hflt jdk-8-oracle-arm32-vfp-hflt 318 /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt
- Selezione della versione desiderata:
sudo update-java-alternatives -s java-7-oracle - Eventuali errori non pregiudicano il buon esito dell’operazione:
update-alternatives: error: no alternatives for jmc update-alternatives: error: no alternatives for jvisualvm update-alternatives: error: no alternatives for mozilla-javaplugin.so
- Per verificare quale versione è stata effettivamente impostata:
java -versionjava version "1.7.0_75" Java(TM) SE Runtime Environment (build 1.7.0_75-b13) Java HotSpot(TM) Client VM (build 24.75-b04, mixed mode)
È consigliabile creare un link simbolico al JDK preferito e impostare la variabile d’ambiente JAVA_HOME, ad esempio:
cd /usr/lib/jvmsudo ln -nsf java-7-oracle default-javaecho 'JAVA_HOME="/usr/lib/jvm/default-java"' | sudo tee -a /etc/environment