Daugiau
Kaip išspręsti java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9
Turiu tam tikrą kodą, kuriame naudojamos JAXB API klasės, pateiktos kaip "Java 6/7/8" JDK dalis. Kai paleidžiu tą patį kodą su "Java 9", paleidimo metu gaunamos klaidos, rodančios, kad JAXB klasių negalima rasti.
JAXB klasės kaip JDK dalis teikiamos nuo "Java 6", tad kodėl "Java 9" nebegali rasti šių klasių?
718
3
JAXB API laikomos "Java EE" API, todėl "Java SE 9" jos nebėra numatytojo klasių kelio sąraše. "Java 11" jos visiškai pašalintos iš JDK.
Java 9 įvestos modulių sąvokos, ir pagal nutylėjimą klasės kelyje (tiksliau, modulių kelyje) yra
java.se
suvestinis modulis. Kaip matyti iš pavadinimo,java.se
agreguotasis modulis neapima Java EE API, kurios tradiciškai buvo pridedamos prie Java 6/7/8.Laimei, šios Java EE API, kurios buvo pateiktos JDK 6/7/8, vis dar yra JDK, bet jų tiesiog'nėra klasių kelyje pagal nutylėjimą. Papildomos "Java EE" API pateikiamos šiuose moduliuose:
Man tai padėjo:
Atnaujinti
Kaip siūlė @Jasper, kad nereikėtų priklausyti nuo visos "EclipseLink" bibliotekos, taip pat galite priklausyti tik nuo "EclipseLink MOXy":
Maven
Gradle
Kaip priklausomybės mano "Java 8" programai, kuri sukuria *.jar, kurį galima paleisti tiek su JRE 8, tiek su JRE 9 be jokių papildomų argumentų.
Be to, prieš pradedant naudoti JAXB API, ją reikia kažkur paleisti:
Kol kas veikia puikiai, kaip apeinamasis variantas. Tačiau tai neatrodo tobulas sprendimas...
Kompiliavimo ir vykdymo metu pridėkite jungiklį
--add-modules java.xml.bind
Gerą
JDK 9
modulių įvadą taip pat galima rasti adresu : https://www.youtube.com/watch?v=KZfbRuvv5qc