Java 9 tidak lagi menggunakan enam modul yang mengandung Java EE API dan akan segera dihapus :
- java.activation dengan
javax.activation
paket - java.corba dengan
javax.activity
,javax.rmi
,javax.rmi.CORBA
, danorg.omg.*
paket - java.transaction dengan
javax.transaction
paket - java.xml.bind dengan semua
javax.xml.bind.*
paket - java.xml.ws dengan
javax.jws
,javax.jws.soap
,javax.xml.soap
, dan semuajavax.xml.ws.*
paket - java.xml.ws.annotation dengan
javax.annotation
paket
Artefak pihak ketiga yang dikelola mana yang menyediakan API itu? Tidak masalah seberapa baik mereka menyediakan API tersebut atau fitur lain apa yang mereka tawarkan - yang penting adalah, apakah itu pengganti drop-in untuk modul / paket ini?
Untuk membuatnya lebih mudah untuk mengumpulkan pengetahuan, saya menjawab dengan apa yang saya ketahui sejauh ini dan membuat jawabannya sebagai wiki komunitas. Saya harap orang-orang akan memperluas itu daripada menulis jawaban mereka sendiri
Sebelum Anda memilih untuk menutup:
- Ya, sudah ada beberapa pertanyaan pada modul individual dan jawaban untuk pertanyaan ini tentu saja akan menggandakan informasi itu. Tetapi AFAIK tidak ada satu titik untuk belajar tentang semua ini, yang saya pikir memiliki banyak nilai.
- Pertanyaan yang meminta rekomendasi perpustakaan biasanya dianggap di luar topik, karena "mereka cenderung menarik jawaban dan spam yang beralasan", tapi saya rasa itu tidak berlaku di sini. Himpunan perpustakaan yang valid jelas digambarkan: Mereka harus menerapkan standar tertentu. Selain itu tidak ada hal lain yang penting, jadi saya tidak melihat banyak risiko untuk pendapat dan spam.
java
jakarta-ee
java-9
java-module
Nicolai
sumber
sumber
Jawaban:
Alih-alih menggunakan modul Java EE yang sudah usang, gunakan artefak berikut.
JAF ( java.activation )
JavaBeans Activation Framework (sekarang Jakarta Activation ) adalah teknologi mandiri (tersedia di Maven Central):
( Sumber )
CORBA ( java.corba )
Dari JEP 320 :
JTA ( java.transaction )
Versi yang berdiri sendiri:
(Sumber )
JAXB ( java.xml.bind )
Sejak Java EE diganti nama menjadi Jakarta EE , JAXB sekarang disediakan oleh artefak baru:
Halaman Implementasi Referensi JAXB .
schemagen
danxjc
dapat diunduh di sana juga sebagai bagian dari distribusi JAXB mandiri.Lihat juga jawaban yang ditautkan .
JAX-WS ( java.xml.ws )
Implementasi referensi:
Unduhan distribusi mandiri (berisi
wsgen
danwsimport
).Anotasi Umum ( java.xml.ws.annotation )
Java Commons Annotations (tersedia di Maven Central):
( Sumber )
sumber
jax-ws
dari jdk dancom.sun.xml.ws
ketergantungan?com.sun.xml.ws:jaxws-ri
bukanjava.xml.ws
di modul saya karena yang terakhir sudah usang dan akan dihapus. Dan saya menambahkan dependensi ke file pom saya dan kesalahan "module xyz membaca paket 'javax.xml.ws' dari 'java.xml.ws' dan 'java.xml.ws'" muncul.--add-modules
atau karena beberapa modul lain memerlukannya. Bisakah Anda membuka pertanyaan baru, jadi kita bisa melihatnya?--patch-module
dapat memperbaiki pemisahan.JAXB (java.xml.bind) untuk JDK9
Bekerja dengan sempurna di aplikasi desktop saya di jdk9 / 10 EA
sumber
2.3.0
untuk keduanyajaxb-api
danjaxb-runtime
bukan ide yang baik. The runtime Glassfish saat ini di2.3.0.1
saat API tetap di2.3.0
. Saya sarankan menjatuhkanproperties
elemen seluruhnya dalam Jawaban, dan hanya kode-keras setiap nomor versi di masingdependency
- masing secara terpisah.<dependencyManagement>
, impororg.glassfish.jaxb:jaxb-bom
BOM di beberapa versi (sekarang terbaru adalah 2.3.0.1), dan kemudian di bagian yang sebenarnya<dependencies>
, jangan tentukan versi untukjaxb-api
ataujaxb-runtime
. Nomor versi akan diambil dari BOM, yang akan memastikan mereka selalu sinkron dan ditingkatkan bersama.Saya perlu mengganti JAX-WS (java.xml.ws) dan JAXB (java.xml.bind) untuk aplikasi berbasis Spring Boot 2 dan berakhir dengan JAR ini (Gradle build):
(Anda mungkin perlu
compile
atau ruang lingkup lain,runtimeOnly
sudah cukup untuk kami.)Saya perhatikan bahwa https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core dijelaskan sebagai "Lama" dan menggunakan jawaban ini digunakan untuk
org.glassfish
barang-barang berbasis yang dibawaorg.eclipse.yasson
juga.Sekarang situasinya benar-benar berantakan, itu berfungsi, tetapi bagaimana orang harus yakin itu pengganti terbaik, bukan?
sumber
Tampaknya jaxws-ri tergantung secara transitif dari commonj.sdo: commonj.sdo: jar: 2.1.1.v201112051852 yang tampaknya dapat ditemukan dari repositori http://download.eclipse.org/rt/eclipselink/maven.repo
sumber
mvn -U clean install
terus berkataCould 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
Hanya sedikit variasi (peningkatan) pada jawaban di atas --- dicontohkan di sini hanya untuk JAXB. Satu dapat menambahkan dependensi dengan
runtime
cakupan dan hanya jika ini diperlukan secara efektif (yaitu ketika membangun untuk berjalan di JRE dengan versi> = 9 --- di sini v11 dicontohkan):sumber
Saya telah bereksperimen dengan sebagian besar saran yang dijelaskan di atas menggunakan JDK 11.0.3 dan belum berhasil. Satu-satunya solusi yang akhirnya saya temukan untuk berhasil adalah sebagai berikut. Mungkin ada opsi lain yang juga berfungsi tetapi tampaknya pemilihan versi sangat penting. Misalnya, mengubah com.sun.xml.ws:rt ke 2.3.2 menyebabkan modul javax.jws tidak lagi tersedia.
sumber
Saya menemukan jalan termudah untuk berkeliling JAXB bagian dari masalah ini adalah menggunakan manajemen dependensi di root pom saya atau di bom saya:
Dan di modul yang gagal dikompilasi pada jdk11:
Juga, memperbarui versi
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
ke 0.14.0 menyelesaikan semua masalah generasi jaxb bagi saya.sumber
Saya menggunakan jdk 11 + semut + ivy dalam proyek mvc musim semi saya. Saya mendapatkan error " paket javax.jws tidak ada " jadi saya menambahkan javax.jws-api-1.1.jar ke classpath dan berhasil! Cukup unduh toples dari https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar Dan tambahkan ke classpath Anda di build.xml Anda
sumber