Conflitto tra pacchetti Java

Come mi succede spesso nel fine settimana, oggi ho fatto gli aggiornamenti della mia installazione di Arch. Di solito, prima di farli, do un’occhiata alle novità sul suo sito, ma oggi non l’ho fatto. Do quindi il comando solito:

$ sudo pacman -Syu
[sudo] password di aldo: 
:: Sincronizzazione dei database in corso...
...
:: Aggiornamento del sistema in corso...
risoluzione delle dipendenze in corso...
ricerca dei pacchetti in conflitto in corso...
errore: sono stati rilevati dei conflitti irrisolvibili tra i pacchetti
errore: impossibile eseguire l'operazione richiesta (dipendenze in conflitto)
:: jdk-openjdk e jre-openjdk vanno in conflitto

Al che, ovviamente, vado a vedere se ci sono novità sul sito di Arch ed effettivamente ecco lì la notizia:

We are introducing a change in JDK/JRE packages of our distro.
[…]
To sum it up instead of having JDK and JRE packages coexist in the same system we will be making them conflict.
[…]
This will (potentially) require a manual user action during upgrade […].

Arch Developers, Incoming changes in JDK / JRE 21 packages may require manual intervention.

In poche parole, bisogna scegliere uno tra i tre pacchetti Java (JDK/JRE/JRE-headless).

Nel mio sistema avevo tutti e tre i pacchetti installati:

$ pacman -Ss openjdk | grep installato
extra/jdk-openjdk 21.u35-7 [installato: 21.u35-3]
extra/jre-openjdk 21.u35-7 [installato: 21.u35-3]
extra/jre-openjdk-headless 21.u35-7 [installato: 21.u35-3]

Visto che dovevo tenerne solo uno, dovevo capire quale fosse quello necessario. Vedo quindi con pacman quali sono i pacchetti che li hanno richiesti:

  • jdk-openjdk
$ pacman -Qi jdk-openjdk
Nome                      : jdk-openjdk
...
Richiesto da              : Nessuno
  • jre-openjdk
$ pacman -Qi jre-openjdk
Nome                      : jre-openjdk
...
Richiesto da              : jdk-openjdk
  • jre-openjdk-headless
$ pacman -Qi jre-openjdk-headless
Nome                      : jre-openjdk-headless
...
Richiesto da              : bcprov  java-commons-lang  jre-openjdk  pdftk

Quindi jdk-openjdk e jre-openjdk possono essere eliminati. Per jre-openjdk-headless invece c’è pdftk che lo richiede.

La mia intenzione è di eliminare tutti i pacchetti Java e pdftk e installare nuovamente quest’ultimo, facendogli installare automaticamente la dipendenza richiesta jre-openjdk-headless, visto che non ho bisogno di compilare pacchetti Java e dovrebbe essere sufficiente per le mie esigenze.

Rimuovo quindi tutto, compreso pdftk che richiede Java:

sudo pacman -Rsn jdk-openjdk jre-openjdk jre-openjdk-headless pdftk

Ho quindi installato solo pdftk:

sudo pacman -Syu pdftk

Durante l’installazione Pacman mi ha chiesto quale Java installare:

:: Ci sono 6 fornitori disponibili per java-runtime-headless
:: Repository extra
   1) jdk-openjdk  2) jre-openjdk  3) jre-openjdk-headless  4) jre11-openjdk-headless  5) jre17-openjdk-headless
   2) jre8-openjdk-headless

Digita un numero (default=1):

Ho scelto ovviamente il numero 3 e l’installazione è andata avanti senza problemi.