Package javax.xml.bind does not exist : comment résoudre cette erreur Java ?

La spécification JAXB permet de manipuler les fichiers XML. On peut transformer un élément XML en objet Java et inversement. Cette spécification apporte donc une plus grande facilité dans la gestion des documents XML, et leur intégration dans un logiciel développé en Java. Mais si vous essayez d'utiliser JAXB avec Java 11, vous obtiendrez le message "Package javax.xml.bind does not exist". La raison est simple : JAXB a été supprimée depuis cette version de Java.

À partir de Java 9, JAXB a été marquée comme dépréciée, ce qui signifie qu'elle allait bientôt être obsolète et retirée du module Java EE. Cela a été le cas 2 versions plus tard, avec Java 11. Vous ne pouvez donc plus utiliser la spécification JAXB à partir de cette version. Jakarta EE, qui remplace Java EE, apporte à partir de sa version 8 une nouvelle librairie pour remplacer JAXB, l'API Jakarta XML Bind. Pour l'utiliser, inscrivez les dépendances suivantes avec Maven :

<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>2.3.3</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.3</version>
  <scope>runtime</scope>
</dependency>

À partir de la version 9 de Jakarta, cette librairie évolue encore et passe en version 3. Vous devez alors juste changer le numéro de version appelée et utiliser la version 3.0.0 des 2 modules. La directive d'import évolue également. Avec la version 2.3.0, elle ne changeait pas par rapport à JAXB, on continuait d'importer la librairie "javax.xml.bind". Le nom change à partir de la version 3 pour devenir "jakarta.xml.bind".

<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>3.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>3.0.0</version>
  <scope>runtime</scope>
</dependency>

Si vous n'avez pas la version 8 de Jakarta mais que vous utilisez Java 11, vous pouvez encore faire appel à JAXB. Pour cela, vous devez spécifier les classes de la spécification à Maven pour qu'il les importe dans votre code.

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-core</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.0</version>
</dependency>

Java