Java 9 hat sechs Module, die Java EE-APIs enthalten, veraltet und werden bald entfernt :
- java.activation mit
javax.activation
Paket - java.corba mit
javax.activity
,javax.rmi
,javax.rmi.CORBA
, undorg.omg.*
Pakete - java.transaction mit
javax.transaction
Paket - java.xml.bind mit allen
javax.xml.bind.*
Paketen - java.xml.ws mit
javax.jws
,javax.jws.soap
,javax.xml.soap
, und allejavax.xml.ws.*
Pakete - java.xml.ws.annotation mit
javax.annotation
Paket
Welche gepflegten Artefakte von Drittanbietern stellen diese APIs bereit? Es spielt keine Rolle, wie gut sie diese APIs bereitstellen oder welche anderen Funktionen sie bieten - alles, was zählt, ist, dass sie ein Ersatz für diese Module / Pakete sind?
Um das Sammeln von Wissen zu vereinfachen, antwortete ich mit dem, was ich bisher wusste, und machte die Antwort zu einem Community-Wiki. Ich hoffe, die Leute werden es erweitern, anstatt ihre eigenen Antworten zu schreiben.
Bevor Sie abstimmen, um zu schließen:
- Ja, es gibt bereits einige Fragen zu einzelnen Modulen, und eine Antwort auf diese Frage würde diese Informationen natürlich duplizieren. Aber AFAIK, es gibt keinen einzigen Punkt, um über all dies zu lernen, was meiner Meinung nach sehr wertvoll ist.
- Fragen, die nach Bibliotheksempfehlungen fragen, werden normalerweise als nicht zum Thema gehörend angesehen, da "sie dazu neigen, meinungsgebundene Antworten und Spam anzulocken", aber ich denke nicht, dass dies hier zutrifft. Der Satz gültiger Bibliotheken ist klar abgegrenzt: Sie müssen einen bestimmten Standard implementieren. Darüber hinaus ist nichts anderes wichtig, daher sehe ich kein großes Risiko für Meinungen und Spam.
java
jakarta-ee
java-9
java-module
Nicolai
quelle
quelle
Antworten:
Verwenden Sie anstelle der veralteten Java EE-Module die folgenden Artefakte.
JAF ( java.activation )
JavaBeans Activation Framework (jetzt Jakarta Activation ) ist eine eigenständige Technologie (verfügbar in Maven Central):
( Quelle )
CORBA ( java.corba )
Aus JEP 320 :
JTA ( java.transaction )
Standalone-Version:
( Quelle )
JAXB ( java.xml.bind )
Seit Java EE in Jakarta EE umbenannt wurde , wird JAXB jetzt durch neue Artefakte bereitgestellt:
JAXB-Referenzimplementierungsseite .
schemagen
undxjc
kann dort auch als Teil einer eigenständigen JAXB-Distribution heruntergeladen werden.Siehe auch verknüpfte Antwort .
JAX-WS ( java.xml.ws )
Referenzimplementierung:
Download der eigenständigen Distribution (enthält
wsgen
undwsimport
).Allgemeine Anmerkungen ( java.xml.ws.annotation )
Java Commons Annotations (verfügbar in Maven Central):
( Quelle )
quelle
jax-ws
sowohl aus JDK als auch aus dercom.sun.xml.ws
Abhängigkeit liest ?com.sun.xml.ws:jaxws-ri
anstelle vonjava.xml.ws
in meinem Modul verwenden, da letzteres veraltet ist und entfernt wird. Und ich habe die Abhängigkeit zu meiner POM-Datei hinzugefügt und der Fehler "Modul xyz liest das Paket 'javax.xml.ws' aus 'java.xml.ws' und 'java.xml.ws'" wurde angezeigt.--add-modules
oder weil einige andere Module es erfordern. Können Sie eine neue Frage öffnen, damit wir sie uns ansehen können?--patch-module
kann die Aufteilung korrigieren.JAXB (java.xml.bind) für JDK9
Funktioniert perfekt in meinen Desktop-Anwendungen auf jdk9 / 10 EA
quelle
2.3.0
für beidejaxb-api
undjaxb-runtime
ist keine gute Idee. Die Glassfish-Laufzeit ist derzeit aktiv,2.3.0.1
während die API aktiv bleibt2.3.0
. Ich schlage vor, dasproperties
Element vollständig in der Antwort zu löschen und jede Versionsnummerdependency
einzeln separat zu codieren .<dependencyManagement>
Importieren Sie in dieorg.glassfish.jaxb:jaxb-bom
Stückliste in einer bestimmten Version (die neueste Version ist jetzt 2.3.0.1), und geben Sie dann im aktuellen<dependencies>
Abschnitt keine Version für entwederjaxb-api
oder anjaxb-runtime
. Die Versionsnummer wird aus der Stückliste abgerufen, um sicherzustellen, dass sie immer synchron sind und gemeinsam aktualisiert werden.Ich musste JAX-WS (java.xml.ws) und JAXB (java.xml.bind) für meine Spring Boot 2-basierte Anwendung ersetzen und erhielt diese JARs (Gradle Build):
(Möglicherweise benötigen Sie einen
compile
anderen Bereich, derruntimeOnly
uns gereicht hat.)Ich bemerkte , dass https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core als „Alt“ beschrieben und mit dieser Antwort für ging
org.glassfish
basierte Sachen , die in gebrachtorg.eclipse.yasson
als auch.Jetzt ist es eine wirklich chaotische Situation, es funktioniert, aber wie sollte jemand sicher sein, dass es der beste Ersatz ist, oder?
quelle
Es scheint, dass jaxws-ri transitiv von commonj.sdo: commonj.sdo: jar: 2.1.1.v201112051852 abhängt, das anscheinend im Repository http://download.eclipse.org/rt/eclipselink/maven.repo zu finden ist
quelle
mvn -U clean install
sagt immer wiederCould 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
Nur eine kleine Variation (Verbesserung) der obigen Antworten - hier nur für JAXB veranschaulicht. Man kann die Abhängigkeiten mit dem
runtime
Bereich hinzufügen und nur dann, wenn dies effektiv benötigt wird (dh beim Erstellen für die Ausführung in einer JRE mit Version> = 9 --- hier ist v11 beispielhaft dargestellt):quelle
Ich habe mit den meisten der oben beschriebenen Vorschläge mit JDK 11.0.3 experimentiert und war nicht erfolgreich. Die einzige Lösung, die ich schließlich gefunden habe, ist die folgende. Vielleicht gibt es auch andere Optionen, die funktionieren, aber es scheint, dass die Auswahl der Version entscheidend ist. Wenn Sie beispielsweise com.sun.xml.ws:rt in 2.3.2 ändern, ist das Modul javax.jws nicht mehr verfügbar.
quelle
Ich fand, dass der einfachste Weg, um die JAXB-Teile dieser Probleme zu umgehen, darin bestand, das Abhängigkeitsmanagement in meinem Root-Pom oder in meiner Bom zu verwenden:
Und in den Modulen, deren Kompilierung auf jdk11 fehlschlägt:
Durch das Aktualisieren der Version von
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
0.14.0 wurden auch alle Probleme bei der Jaxb-Generierung für mich gelöst.quelle
Ich benutze JDK 11 + Ameise + Efeu in meinem Frühjahr MVC-Projekt. Ich war immer Fehler „ Paket javax.jws nicht vorhanden ist “ , so fügte ich javax.jws-api-1.1.jar zu Classpath und es funktionierte! Laden Sie das JAR einfach von https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar herunter und fügen Sie es Ihrem Klassenpfad in Ihrer build.xml hinzu
quelle