Java 9 a déprécié six modules contenant des API Java EE et ils seront bientôt supprimés :
- java.activation avec
javax.activation
package - java.corba avec
javax.activity
,javax.rmi
,javax.rmi.CORBA
etorg.omg.*
paquets - java.transaction avec
javax.transaction
package - java.xml.bind avec tous les
javax.xml.bind.*
packages - java.xml.ws avec
javax.jws
,javax.jws.soap
,javax.xml.soap
et tous lesjavax.xml.ws.*
paquets - java.xml.ws.annotation avec
javax.annotation
package
Quels artefacts tiers maintenus fournissent ces API? Peu importe la qualité de ces API ou les autres fonctionnalités qu'elles ont à offrir - tout ce qui compte, c'est qu'ils remplacent ces modules / packages?
Pour faciliter la collecte des connaissances, j'ai répondu avec ce que je sais jusqu'à présent et j'ai fait de la réponse un wiki communautaire. J'espère que les gens le prolongeront au lieu d'écrire leurs propres réponses.
Avant de voter pour fermer:
- Oui, il y a déjà des questions sur les modules individuels et une réponse à cette question dupliquerait bien sûr cette information. Mais AFAIK, il n'y a pas de point unique pour en savoir plus sur tout cela, ce qui, à mon avis, a beaucoup de valeur.
- Les questions demandant des recommandations de la bibliothèque sont généralement considérées comme hors sujet, car «elles ont tendance à attirer des réponses d'opinion et du spam», mais je ne pense pas que cela s'applique ici. L'ensemble des bibliothèques valides est clairement délimité: elles doivent implémenter une norme spécifique. Au-delà de cela, rien d'autre n'a d'importance, donc je ne vois pas beaucoup de risque d'opinion et de spam.
java
jakarta-ee
java-9
java-module
Nicolai
la source
la source
Réponses:
Au lieu d'utiliser les modules Java EE obsolètes, utilisez les artefacts suivants.
JAF ( java.activation )
JavaBeans Activation Framework (maintenant Jakarta Activation ) est une technologie autonome (disponible sur Maven Central):
( Source )
CORBA ( java.corba )
À partir de JEP 320 :
JTA ( java.transaction )
Version autonome:
( Source )
JAXB ( java.xml.bind )
Depuis que Java EE a été renommé Jakarta EE , JAXB est désormais fourni par de nouveaux artefacts:
Page d'implémentation de référence JAXB .
schemagen
etxjc
peut être téléchargé là aussi dans le cadre d'une distribution JAXB autonome.Voir également la réponse liée .
JAX-WS ( java.xml.ws )
Implémentation de référence:
Téléchargement de la distribution autonome (contient
wsgen
etwsimport
).Annotations courantes ( java.xml.ws.annotation )
Annotations Java Commons (disponibles sur Maven Central):
( Source )
la source
jax-ws
à la fois jdk etcom.sun.xml.ws
dépendances?com.sun.xml.ws:jaxws-ri
place dejava.xml.ws
dans mon module car ce dernier est obsolète et sera supprimé. Et j'ai ajouté la dépendance à mon fichier pom et l'erreur "module xyz lit le package 'javax.xml.ws' à la fois dans 'java.xml.ws' et 'java.xml.ws'" est apparue.--add-modules
ou parce que d'autres modules le nécessitent. Pouvez-vous ouvrir une nouvelle question pour que nous puissions l'examiner?--patch-module
peut réparer le fractionnement.JAXB (java.xml.bind) pour JDK9
Fonctionne parfaitement dans mes applications de bureau sur jdk9 / 10 EA
la source
2.3.0
pour les deuxjaxb-api
etjaxb-runtime
n'est pas une bonne idée. Le runtime Glassfish est actuellement à2.3.0.1
tandis que l'API reste à2.3.0
. Je suggère de supprimerproperties
entièrement l' élément dans la réponse et de coder en dur chaque numéro de versiondependency
séparément.<dependencyManagement>
, importez laorg.glassfish.jaxb:jaxb-bom
nomenclature dans une version (la dernière version est maintenant 2.3.0.1), puis dans la<dependencies>
section réelle , ne spécifiez pas de version pourjaxb-api
oujaxb-runtime
. Le numéro de version sera extrait de la nomenclature, ce qui garantira qu'ils sont toujours synchronisés et mis à niveau ensemble.J'avais besoin de remplacer JAX-WS (java.xml.ws) et JAXB (java.xml.bind) pour mon application basée sur Spring Boot 2 et j'ai fini avec ces JAR (version Gradle):
(Vous pourriez avoir besoin d'
compile
une autre portée,runtimeOnly
c'était suffisant pour nous.)J'ai remarqué que https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core est décrit comme "Old" et que l'utilisation de cette réponse est allée pour des
org.glassfish
éléments basés qui ont également apportéorg.eclipse.yasson
.Maintenant, c'est une situation vraiment compliquée, cela fonctionne, mais comment devrait-on être sûr que c'est le meilleur remplacement, non?
la source
Il semble que jaxws-ri dépend de manière transitoire de commonj.sdo: commonj.sdo: jar: 2.1.1.v201112051852 qui peut apparemment être trouvé à partir du référentiel http://download.eclipse.org/rt/eclipselink/maven.repo
la source
mvn -U clean install
répèteCould not find artifact commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852
.<dependency> <groupId>javax.jws</groupId> <artifactId>jsr181-api</artifactId> <version>1.0-MR1</version> </dependency>
sdo-eclipselink-plugin
Juste une variation mineure (amélioration) sur les réponses ci-dessus --- illustrée ici pour JAXB uniquement. On peut ajouter les dépendances avec la
runtime
portée et seulement si cela est effectivement nécessaire (c'est-à-dire lors de la construction pour s'exécuter dans un JRE avec version> = 9 --- ici la v11 est illustrée):la source
J'ai expérimenté la plupart des suggestions décrites ci-dessus en utilisant JDK 11.0.3 et je n'ai pas réussi. La seule solution que j'ai finalement trouvée pour fonctionner est la suivante. Il existe peut-être d'autres options qui fonctionnent également, mais il semble que le choix de la version soit critique. Par exemple, changer com.sun.xml.ws:rt en 2.3.2 fait que le module javax.jws n'est plus disponible.
la source
J'ai trouvé que le moyen le plus simple de contourner les parties JAXB de ces problèmes était d'utiliser la gestion des dépendances dans mon pom racine ou dans mon nom de famille:
Et dans les modules qui échouent à la compilation sur jdk11:
En outre, la mise à jour la version
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
à 0.14.0 a résolu tous les problèmes de génération de JAXB pour moi.la source
J'utilise jdk 11 + fourmi + lierre dans mon projet printemps mvc. J'obtenais l' erreur " package javax.jws n'existe pas " alors j'ai ajouté javax.jws-api-1.1.jar au classpath et cela a fonctionné! Téléchargez simplement le fichier jar depuis https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar Et ajoutez-le à votre classpath dans votre build.xml
la source