4 votes

Comment exécuter du code utilisant JAXB sous Java 1.9 lorsqu'il est déployé via Java Web Start

Je déploie trois applications avec Java Web Start vers les clients. Ces trois applications utilisent toutes JAXB. Sous Java 1.9, pour charger le module jaxb, vous devez utiliser :

--add-modules java.xml.bind

Java Web Start vous permet de transmettre des arguments VM aux applications avec l'attribut java-vm-args de la balise java/j2se. Cependant, seuls les arguments répertoriés dans la documentation sont pris en charge et --add-modules ne figure pas dans cette liste.

La question est donc : comment transmettez-vous "--add-modules java.xml.bind" au VM 1.9 lors de l'exécution du code via Java Web Start qui utilise JAXB ?

Voici ce que j'ai essayé et mes tests montrent que --add-modules n'est effectivement pas pris en charge par l'attribut java-vm-arg :

3voto

Michael Points 843

Conformément à la section Modules partagés avec Java EE non résolus par défaut de la documentation sur la migration vers Java 9, --add-modules est une solution de contournement car JAXB sera supprimé du JDK dans le futur. Ainsi, pour résoudre ce problème, j'ai simplement inclus l'API JAXB et une implémentation dans mon classpath, en utilisant ANT+Ivy avec cette configuration :

Cela a entraîné quelques dépendances transitives (FastInfoset, istack-commons, stax-ex et txw2). Comme il s'agit d'applications de bureau en swing, j'essaie de garder le fichier jar aussi petit que possible, et après compression pack200, cela n'a ajouté qu'environ 600K à mon grosse jar.

L'implémentation de Glassfish entraîne un avertissement d'accès réflexif illégal à partir de Java 9. Je suppose qu'une mise à jour arrivera bientôt pour ne plus utiliser de réflexion illégale.

1voto

Alan Bateman Points 3303

Utilisez un égal plutôt qu'un espace. De plus, le nom du module est "java.xml.bind". Cela vous donne java-vm-args="--add-modules=java.xml.bind".

0voto

nullpointer Points 1135

En se référant à la même documentation, vous devriez passer à utiliser une version égale à 9 ou 9+ (builds ea) comme suit :

L'attribut de version fait référence, par défaut, à une version de plateforme (version de spécification) de la plateforme Java Standard Edition. Les versions de plateforme actuellement définies sont 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, and 9. (Une version de plateforme ne contient généralement pas de numéro de micro version ; par exemple 1.4.2.)


J'ai également rédigé cette et cette réponse précédemment pour expliquer une solution permanente au lieu de faire de telles corrections temporaires dans le code en se basant sur java.xml.bind qui est obsolète.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X