Java 9 wycofała sześć modułów zawierających interfejsy API Java EE i wkrótce zostaną one usunięte :
- java.activation z
javax.activation
pakietem - java.corba z
javax.activity
,javax.rmi
,javax.rmi.CORBA
iorg.omg.*
pakiety - java.transaction with
javax.transaction
package - java.xml.bind ze wszystkimi
javax.xml.bind.*
pakietami - java.xml.ws z
javax.jws
,javax.jws.soap
,javax.xml.soap
i wszystkichjavax.xml.ws.*
pakietów - java.xml.ws.annotation z
javax.annotation
pakietem
Które utrzymywane artefakty innych firm zapewniają te interfejsy API? Nie ma znaczenia, jak dobrze zapewniają te interfejsy API lub jakie inne funkcje mają do zaoferowania - wszystko, co się liczy, to czy są one zamiennikami tych modułów / pakietów?
Aby ułatwić gromadzenie wiedzy, odpowiedziałem, podając to, co wiem do tej pory, i uczyniłem odpowiedź wiki społeczności. Mam nadzieję, że ludzie będą go przedłużać, zamiast pisać własne odpowiedzi.
Zanim zagłosujesz za zamknięciem:
- Tak, jest już kilka pytań dotyczących poszczególnych modułów, a odpowiedź na to pytanie oczywiście powieliłaby te informacje. Ale AFAIK, nie ma sensu uczyć się o tym wszystkim, co moim zdaniem ma dużą wartość.
- Pytania z prośbą o rekomendacje biblioteczne są zwykle uważane za niezwiązane z tematem, ponieważ „zwykle przyciągają uparte odpowiedzi i spam”, ale nie sądzę, żeby to miało tutaj zastosowanie. Zestaw ważnych bibliotek jest jasno określony: muszą wdrażać określony standard. Poza tym nic innego się nie liczy, więc nie widzę dużego ryzyka dla opinii i spamu.
java
jakarta-ee
java-9
java-module
Nicolai
źródło
źródło
Odpowiedzi:
Zamiast używać przestarzałych modułów Java EE, użyj następujących artefaktów.
JAF ( java.activation )
JavaBeans Activation Framework (obecnie Jakarta Activation ) to samodzielna technologia (dostępna w Maven Central):
( Źródło )
CORBA ( java.corba )
Od JEP 320 :
JTA ( java.transaction )
Wersja samodzielna:
( Źródło )
JAXB ( java.xml.bind )
Od czasu zmiany nazwy Java EE na Jakarta EE , JAXB jest teraz dostarczany przez nowe artefakty:
Strona implementacji referencji JAXB .
schemagen
ixjc
można je tam również pobrać jako część samodzielnej dystrybucji JAXB.Zobacz także połączoną odpowiedź .
JAX-WS ( java.xml.ws )
Realizacja referencyjna:
Samodzielne pobieranie dystrybucji (zawiera
wsgen
iwsimport
).Typowe adnotacje ( java.xml.ws.annotation )
Java Commons Adnotations (dostępne w Maven Central):
( Źródło )
źródło
jax-ws
zarówno z jdk, jak icom.sun.xml.ws
zależności?com.sun.xml.ws:jaxws-ri
zamiastjava.xml.ws
w moim module, ponieważ ten ostatni jest przestarzały i zostanie usunięty. Dodałem zależność do mojego pliku pom i pojawił się błąd „moduł xyz odczytuje pakiet„ javax.xml.ws ”zarówno z„ java.xml.ws ”, jak i„ java.xml.ws ”.--add-modules
lub dlatego, że wymagają tego inne moduły. Czy możesz otworzyć nowe pytanie, żebyśmy mogli się temu przyjrzeć?--patch-module
może naprawić podział.JAXB (java.xml.bind) dla JDK9
Działa idealnie w moich aplikacjach desktopowych na jdk9 / 10 EA
źródło
2.3.0
dla obujaxb-api
ijaxb-runtime
nie jest dobrym pomysłem. GlassFish czas pracy wynosi obecnie2.3.0.1
zaś pozostaje w API2.3.0
. Proponuję porzucićproperties
element całkowicie w odpowiedzi i po prostu zakodować na stałe każdy numer wersji w każdym z nichdependency
osobno.<dependencyManagement>
zaimportowaćorg.glassfish.jaxb:jaxb-bom
BOM w jakiejś wersji (teraz jest najnowsza 2.3.0.1), a następnie w samej<dependencies>
sekcji, nie określają wersję dla albojaxb-api
albojaxb-runtime
. Numer wersji zostanie pobrany z BOM, co zapewni ich zawsze synchronizację i wspólną aktualizację.Musiałem wymienić JAX-WS (java.xml.ws) i JAXB (java.xml.bind) na moją aplikację opartą na Spring Boot 2 i skończyło się na tych JAR (kompilacja Gradle):
(Możesz potrzebować
compile
lub inny zakres,runtimeOnly
wystarczył nam.)Zauważyłem, że https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core jest opisany jako „stary” i stosując tę odpowiedź udał się do
org.glassfish
rzeczy, które przyniósł w oparciuorg.eclipse.yasson
również.Teraz sytuacja jest naprawdę nieporządna, działa, ale jak ktoś powinien mieć pewność, że to najlepszy zamiennik, prawda?
źródło
Wygląda na to, że jaxws-ri zależy przejściowo od commonj.sdo: commonj.sdo: jar: 2.1.1.v201112051852, które najwyraźniej można znaleźć w repozytorium http://download.eclipse.org/rt/eclipselink/maven.repo
źródło
mvn -U clean install
powtarzaCould 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
Tylko niewielka zmiana (poprawa) w powyższych odpowiedziach --- zilustrowana tutaj tylko dla JAXB. Można dodać zależności z
runtime
zakresem i tylko wtedy, gdy jest to efektywnie potrzebne (np. Podczas budowania do pracy w środowisku JRE z wersją> = 9 - tutaj przykład v11):źródło
Eksperymentowałem z większością opisanych powyżej sugestii przy użyciu JDK 11.0.3 i nie odniosłem sukcesu. Jedyne rozwiązanie, które ostatecznie zadziałało, jest następujące. Być może istnieją inne opcje, które również działają, ale wydaje się, że wybór wersji jest krytyczny. Na przykład zmiana com.sun.xml.ws:rt na 2.3.2 spowoduje, że moduł javax.jws przestanie być dostępny.
źródło
Odkryłem, że najłatwiejszą drogą do obejścia części JAXB tych problemów jest użycie zarządzania zależnościami w moim głównym pomie lub w moim urodzeniu:
A w modułach, które nie kompilują się na jdk11:
Ponadto aktualizacja do wersji
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
0.14.0 rozwiązała wszystkie problemy z generowaniem jaxb.źródło
Używam jdk 11 + ant + ivy w moim wiosennym projekcie MVC. Pojawiał się błąd „ pakiet javax.jws nie istnieje ”, więc dodałem javax.jws-api-1.1.jar do ścieżki klasy i zadziałało! Po prostu pobierz jar z https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar i dodaj go do swojej ścieżki klas w pliku build.xml
źródło