Comment exprimer la dépendance maven sur java ee pour le passage à Java 9?
Nous utilisons maven
et avoir des objets qui dépendent à leur tour d'autres artefacts. Je suis dans le processus de migration vers java-9, et l'intention de migrer tout à Java 9, d'abord sans la modularisation du code (c'est à dire dans le sans nom du module).
Le problème que j'ai rencontré est que nous dépendons de l' java.xml.bind
, qui n'est actuellement pas inclus dans les modules par défaut. Est-il une "bonne" façon d'exprimer cette dépendance de java.xml.bind
avec Maven?
Vous devez vous connecter pour publier un commentaire.
La Système De Module parle de la façon dont le sans nom des modules, comme dans votre cas de chargement de l'application de classpath construit le module graphique. De plus, à partir de la documentation elle-même: -
Problème similaire a été confronté dans la jetée.projet où un fil de jdk liste de diffusion discuté au cours de la même et la solution était d'utiliser:
qui leur a fourni l'accès à tous les modules Java SE et dans votre cas, est tout simplement:
L'utiliser dans maven, vous pouvez incorporer le même à la
maven-compiler-plugin
à l'aide de
comme suggéré par ZhekaKozlov ici.
Un point important à noter est que le marquage de la dépréciation d'une API signifie également que vous pourriez probablement vouloir s'éloigner de l'utiliser. Pour s'adapter à cette façon, vous pouvez probablement commencer à consommer de la dépendance sur
jaxb-api:2.3.0
qui peut maintenant être chargé en tant que module et peut être exécuté à partir du classpath. Le changement que vous devez faire est d'ajouter les éléments suivants à votre liste de dépendances:Mise à jour:- Finalement, avec Java-10 ores et déjà et JDK/11 jusqu'à la prochaine, on devrait idéalement suivez le lien pour JEP 320: Supprimer la Java EE et CORBA Modules et plus de remplacer ces dépendances avec leurs bibliothèques autonomes à la place.
java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
--add-modules
). L'exception que vous avez dû semble être sur lacom.sun.*
paquet a été supprimé dans JDK9. Sur une autre note, peut-être expliquer le problème auxquels vous êtes confrontés dans un autre thread de faire est un peu plus clair et facile à déboguer.main
méthode:JAXBContext jaxbContext = JAXBContext.newInstance( Foo.class );
. J'ai ajouté de la dépendance sur jaxb-api et a ajoutéadd-module
argument.jaxb-api
de dépendance (il compile bien avec elle, mais va jeter ClassNotFoundException dans le moteur d'exécution). Et oui, toutes les bibliothèques que j'ai fournis semblent être obligatoire pour les uniformes de travail.Oui, vous devez passer
--add-modules
à compilateur Java:Ensuite, votre projet doit compiler amende.
3.6.2
bien, cwiki.apache.org/confluence/display/MAVEN/Java+9+-+JigsawJAXB, avec les autres Api partagé avec Java EE (JAX-WS, FAC, JTA, et la soi-disant "Commun " Annotations") sont déconseillés dans Java SE 9 et sont proposés pour être supprimée dans une future version de Java SE et le JDK. Chacun de ces Api est une version autonome/télécharger. Chaque API dispose de son propre JSR qui maintient elle aussi. La transition à partir de l'Api inclus dans le JDK pour le des versions autonomes sera évidemment un peu perturbateur.
Une première étape vers l'abandon de ces Api de Java SE et le JDK est de ne pas résoudre les modules contenant ces Api par défaut. Lors de la compilation ou de l'exécution de code sur le chemin de classe avec le JDK 9 alors il sera d'abord apparaître que l'Api n'existe pas. Une solution de rechange rapide, comme indiqué dans une autre réponse, est à la compilation ou de l'exécution avec
--add-modules java.xml.bind
. Que la CLI option ajoute le "java.xml.bind" module à l'ensemble de la racine des modules pour résoudre au démarrage et il fonctionne avec JDK 9 car ce module est inclus dans le JDK image d'exécution.Au-delà de la solution de rechange rapide, des applications ou des bibliothèques à l'aide de JAXB devrez vous déplacer à l'aide de la version autonome de l'API/mise en œuvre. JAXB 2.3.0 est due à être publié sur Maven Central bientôt et il inclut les modifications apportées à travailler avec JDK 9 et au-delà. La version autonome peut être déployé sur le chemin de classe comme les autres fichiers JAR. Il sera éventuellement possible de déployer la version autonome sur l' (mise à niveau) chemin d'accès du module et de l'utiliser comme un module de trop. Le JDK 9 Guide de Migration de plus amples renseignements sur les options de migration de code qui utilise JAXB ou l'autre des Api partagé avec Java EE.
Bon j'espère que cela aide quelqu'un. Si vous, par hasard, avez installé Java 9 ou 10 et de trouver que vous ne pouvez pas obtenir au-delà de cette javax.xml.lier erreur, vous êtes peut-être à l'aide de Java 8 par jenv par dossier (vraiment je suis désolé d'être aussi vague, mais, c'est tout ce que j'ai le temps pour le moment)?
Mais en ajoutant un paramètre approprié pour JAVA_HOME fixe mon problème:
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
sur MacOS.