Java: jak rozwiązać Javę.lang.NoClassDefFoundError: javax / xml / bind / JAXBException
Mam jakiś kod, który używa klas API JAXB, które zostały dostarczone jako część JDK w Javie 6/7/8. Kiedy uruchamiam ten sam kod w Javie 9, w czasie uruchamiania pojawiają się błędy wskazujące, że klas JAXB nie można znaleźć.
Klasy JAXB zostały dostarczone jako część JDK od Javy 6, więc dlaczego Java 9 nie może już znaleźć tych klas?
30 answers
Interfejsy API JAXB są uważane za interfejsy API Java EE i dlatego nie są już zawarte w domyślnej ścieżce classpath w Java SE 9. W Javie 11 są one całkowicie usunięte z JDK.
Java 9 wprowadza koncepcje modułów i domyślnie moduł zbiorczy java.se
jest dostępny w classpath (a raczej module-path). Jak sama nazwa wskazuje, moduł agregujący java.se
nie zawiera interfejsów API Java EE, które tradycyjnie są dołączane do Javy 6/7/8.
Na szczęście te API Java EE, które zostały dostarczone w JDK 6/7/8 nadal są w JDK, ale po prostu nie są domyślnie na classpath. Dodatkowe interfejsy API Java EE są dostępne w następujących modułach:]}
java.activation
java.corba
java.transaction
java.xml.bind << This one contains the JAXB APIs
java.xml.ws
java.xml.ws.annotation
Szybkie i brudne rozwiązanie: (tylko JDK 9/10)
Aby udostępnić interfejsy API JAXB w czasie wykonywania, należy podać następującą opcję wiersza poleceń:
--add-modules java.xml.bind
Ale nadal potrzebuję tego do pracy z Javą 8!!!
Jeśli spróbujesz podanie --add-modules
ze starszym JDK spowoduje wybuch, ponieważ jest to nierozpoznana opcja. Proponuję jedną z dwóch opcji:
- możesz ustawić dowolne opcje Java 9 + only używając zmiennej środowiskowej
JDK_JAVA_OPTIONS
. Ta zmienna środowiskowa jest automatycznie odczytywana przez program uruchamiającyjava
dla Java 9+. - możesz dodać
-XX:+IgnoreUnrecognizedVMOptions
, aby JVM po cichu ignorował nierozpoznane opcje, zamiast wysadzać. Ale uważaj! Wszelkie inne argumenty linii poleceń, których użyjesz, nie będą już potwierdzony dla ciebie przez JVM. Ta opcja działa z Oracle / OpenJDK, a także IBM JDK (od JDK 8sr4).
Alternatywne szybkie rozwiązanie: (tylko JDK 9/10)
Zauważ, że możesz udostępnić wszystkie powyższe Moduły Java EE w czasie wykonywania, podając opcję --add-modules java.se.ee
. Moduł java.se.ee
jest zbiorczym modułem, który zawiera java.se.ee
, jak również powyższe Moduły API Java EE. Uwaga, to nie działa na Javie 11 ponieważ {[11] } zostało usunięte w Javie 11.
Właściwe rozwiązanie długoterminowe: (JDK 9 i więcej)
Moduły API Java EE wymienione powyżej są oznaczone @Deprecated(forRemoval=true)
, ponieważ są zaplanowane do usunięcia W Java 11 . Tak więc podejście --add-module
nie będzie już działać w Java 11 po wyjęciu z pudełka.
To, co musisz zrobić w Java 11 i przekazać dalej, to dołączyć własną kopię API Java EE na ścieżce classpath lub module path. Na przykład, można dodać interfejsy API JAX-B jako zależność Maven, jak to:
<!-- API, java.xml.bind module -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
<!-- Runtime, com.sun.xml.bind module -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
Aby uzyskać więcej informacji na temat JAXB, zapoznaj się z strona implementacji referencyjnej JAXB.
Aby uzyskać szczegółowe informacje na temat modułowości Javy, zobacz JEP 261: Module System
Dla programistów Gradle lub Android Studio: (JDK 9 i więcej)
Dodaj następujące zależności do pliku build.gradle
:
dependencies {
// JAX-B dependencies for JDK 9+
implementation "jakarta.xml.bind:jakarta.xml.bind-api:2.3.2"
implementation "org.glassfish.jaxb:jaxb-runtime:2.3.2"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-08 11:47:07
W moim przypadku (spring boot fat jar) dodaję tylko do pom.xml.
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-21 12:33:34
Żadne z tych rozwiązań nie działało dobrze dla mnie w ostatnim JDK 9.0.1.
Odkryłem, że ta lista zależności jest wystarczająca do prawidłowego funkcjonowania, więc nie musisz jawnie określać --add-module
(choć jest ona określona w pom tych zależności). Wystarczy tylko określić listę zależności:
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-04 11:18:24
Czysty roztwór dla wszystkich JDK > = 9
Musisz dodać dwie zależności do swojej kompilacji
- jaxb-api
- implementacja jaxb
Jako implementację wybrałem implementację referencyjną firmy glassfish, aby pozbyć się starego com.sun classes / libraries. Więc w rezultacie dodałem w moim Maven build
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
Zauważ, że od wersji 2.3.1 nie musisz dodawać javax.aktywacja trwa dłużej. (patrz https://github.com/eclipse-ee4j/jaxb-ri/issues/1222 )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-02 17:07:51
To mi pomogło:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.0</version>
</dependency>
Update
Jak zasugerował @Jasper, aby uniknąć zależności od całej biblioteki EclipseLink, możesz również polegać na EclipseLink MOXy:
Maven
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.7.3</version>
</dependency>
Gradle
compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.moxy', version: '2.7.3'
Jako zależności dla mojej aplikacji Java 8, która produkuje *.jar, który może być uruchamiany zarówno przez JRE 8, jak i JRE 9 bez dodatkowych argumentów.
Dodatkowo, to musi być wykonane gdzieś, zanim JAXB API będzie być użyte:
System.setProperty("javax.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");
Jak dotąd działa świetnie, jako obejście. Nie wygląda to jednak na idealne rozwiązanie...Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-01 01:10:26
Its ponieważ wersja java jeśli używasz jdk 9 lub nowszej wersji po prostu dodaj to do pom
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-23 22:36:16
Aby to rozwiązać, zaimportowałem kilka plików JAR do mojego powyższe pliki i skopiować je do folderu libs w projekcie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-23 02:51:43
W czasie kompilacji, a także w czasie wykonywania, dodaj Przełącznik --add-modules java.xml.bind
javac --add-modules java.xml.bind <java file name>
java --add-modules java.xml.bind <class file>
Dobre wprowadzenie do modułów JDK 9
można również znaleźć na :
https://www.youtube.com/watch?v=KZfbRuvv5qc
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 05:20:12
To mi pomogło. Dodanie tylko jaxb-api nie wystarczyło.
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-04 18:24:27
Idź do swojej budowy.gradle i dodać poniżej zależności zarówno dla Java 9 lub Java 10.
sourceCompatibility = 10 // You can also decrease your souce compatibility to 1.8
//java 9+ does not have Jax B Dependents
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
compile group: 'com.sun.xml.bind', name: 'jaxb-core', version: '2.3.0'
compile group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '2.3.0'
compile group: 'javax.activation', name: 'activation', version: '1.1.1'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-08 18:51:27
Możesz użyć opcji --add-modules=java.xml.bind
JVM, aby dodać moduł XML bind do środowiska JVM run-time.
Eg: java --add-modules=java.xml.bind XmlTestClass
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 22:48:56
Aktualizacja Kwiecień 2019
Zmiana dla wydań JAXB jest na https://javaee.github.io/jaxb-v2/doc/user-guide/ch02.html
Fragmenty:
4.1. Changes between 2.3.0.1 and 2.4.0
JAXB RI is now JPMS modularized:
All modules have native module descriptor.
Removed jaxb-core module, which caused split package issue on JPMS.
RI binary bundle now has single jar per dependency instead of shaded fat jars.
Removed runtime class weaving optimization.
4.2. Changes between 2.3.0 and 2.3.0.1
Removed legacy technology dependencies:
com.sun.xml.bind:jaxb1-impl
net.java.dev.msv:msv-core
net.java.dev.msv:xsdlib
com.sun.xml.bind.jaxb:isorelax
4.3. Changes between 2.2.11 and 2.3.0
Adopt Java SE 9:
JAXB api can now be loaded as a module.
JAXB RI is able to run on Java SE 9 from the classpath.
Addes support for java.util.ServiceLoader mechanism.
Security fixes
Autorytatywny link jest na https://github.com/eclipse-ee4j/jaxb-ri#maven-artifacts
Współrzędne Mavena dla artefaktów JAXB
Dżakarta.xml.bind: Dżakarta.xml.bind-api: klasy API dla JAXB. Wymagane do kompilacji przeciwko JAXB.
Org.glassfish.jaxb: JAXB-runtime: Implementacja JAXB, runtime używana do serializacji i deserializacji obiektów java do / z xml.
JAXB fat-jar bundles:
Com.słońce.xml.bind: jaxb-impl: JAXB runtime fat słoik.
W przeciwieństwie do org.glassfish.JAXB, te słoiki mają wszystkie zależności zajęcia zawarte w środku. Artefakty te nie zawierają modułu JPMS deskryptory. W Maven projects org.glassfish.artefakty jaxb są / align = "left" / zamiast tego.
Org.glassfish.jaxb: jaxb-runtime:jar: 2.3.2 ściąga:
[INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:2.3.2:compile
[INFO] | +- jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.2:compile
[INFO] | +- org.glassfish.jaxb:txw2:jar:2.3.2:compile
[INFO] | +- com.sun.istack:istack-commons-runtime:jar:3.0.8:compile
[INFO] | +- org.jvnet.staxex:stax-ex:jar:1.8.1:compile
[INFO] | +- com.sun.xml.fastinfoset:FastInfoset:jar:1.2.16:compile
[INFO] | \- jakarta.activation:jakarta.activation-api:jar:1.2.1:compile
Oryginalna ODPOWIEDŹ
Po jakich artefaktów powinienem użyć dla JAXB RI w moim projekcie Maven? W Maven możesz użyć profilu typu:
<profile>
<id>java-9</id>
<activation>
<jdk>9</jdk>
</activation>
<dependencies>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</profile>
Drzewo zależności pokazuje:
[INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:2.3.0:compile
[INFO] | +- org.glassfish.jaxb:jaxb-core:jar:2.3.0:compile
[INFO] | | +- javax.xml.bind:jaxb-api:jar:2.3.0:compile
[INFO] | | +- org.glassfish.jaxb:txw2:jar:2.3.0:compile
[INFO] | | \- com.sun.istack:istack-commons-runtime:jar:3.0.5:compile
[INFO] | +- org.jvnet.staxex:stax-ex:jar:1.7.8:compile
[INFO] | \- com.sun.xml.fastinfoset:FastInfoset:jar:1.2.13:compile
[INFO] \- javax.activation:activation:jar:1.1.1:compile
Aby użyć tego w Eclipse, powiedzmy tlen.Wersja 3a (4.7.3 a) lub nowsza, Ctrl-Alt-P lub kliknij prawym przyciskiem myszy projekt, Maven, a następnie wybierz profil.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-20 07:59:24
Potykam się również o ClassNotFoundException: javax.xml.bind.DatatypeConverter using Java 11 and
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
Próbowałem wszystkiego wokół dodawania javaxa.xml.bind: jaxb-api lub spring boot.xml.bind-api .. Znalazłem podpowiedź do poprawek w jjwt w wersji 0.10.0 .. ale co najważniejsze, pakiet jjwt jest teraz podzielony !
Tak więc, sprawdź to odniesienie: https://github.com/jwtk/jjwt/issues/510
Po prostu, jeśli używasz
Java11 oraz jjwt 0.9.x i stawiasz czoła klasie: javax.xml.bind.Problem DatatypeConverter,
Idź do
Jjwt wersja 0.11.x, ale użyj podzielonych pakietów: https://github.com/jwtk/jjwt#install
Nie znajdziesz wyższej wersji zależności od jjwt, ponieważ dzielą Pakiety.
Zdrówko.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
W Java Web Start Execution możemy użyć sugestii Andy ' ego Guiberta w następujący sposób:
<j2se version="1.6+"
java-vm-args="-XX:+IgnoreUnrecognizedVMOptions --add-modules=java.se.ee"/>
Zwróć uwagę na dodatkowy " = " w --add-modules. Zobacz ten bilet openjdk lub ostatnią uwagę w "Understanding runtime Access Warnings" Java Platform, Standard Edition Oracle JDK 9 Migration Guide.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-29 11:01:54
Dodaj javax.xml.zależność bind w pom.xml
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-17 19:02:41
To rozwiązało moje problemy z zależnościami z uruchomieniem Apache Camel 2.24.1 na Javie 12:
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0.1</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-25 06:32:18
Ponieważ JavaEE jest teraz zarządzane przez https://jakarta.ee / , nowe współrzędne Mavena od 2.3.2 to:
Https://eclipse-ee4j.github.io/jaxb-ri/#maven-artifacts
Pierwszy wydany jaxb.wersja to 2.3.2.
<properties>
<jaxb.version>2.3.2</jaxb.version>
</properties>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>${jaxb.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>${jaxb.version}</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-06 10:28:04
Skorzystałem z tego adresu URL i poniższe ustawienia naprawdę mi pomogły. Używam Javy 10 z STS IDE w MacBooku Pro. To działa jak urok.
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-15 16:12:31
Napotkałem ten sam problem przy użyciu Spring Boot 2.0.5.RELEASE
W Java 11.
Samo dodanie javax.xml.bind:jaxb-api:2.3.0
nie rozwiązało problemu. Musiałem również zaktualizować Spring Boot do najnowszego kamienia milowego 2.1.0.M2
, więc zakładam, że zostanie to naprawione w następnym oficjalnym wydaniu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-29 04:25:20
Musisz dodać zależności JAX - B podczas używania JDK 9+. Dla użytkownika Android Studio, musisz dodać to do swojego build.gradle
'S dependencies {}
bloku:
// Add missing dependencies for JDK 9+
if (JavaVersion.current().ordinal() >= JavaVersion.VERSION_1_9.ordinal()) {
// If you're using @AutoValue or any libs that requires javax.annotation (like Dagger)
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
// If you're using Kotlin
kapt "com.sun.xml.bind:jaxb-core:2.3.0.1"
kapt "javax.xml.bind:jaxb-api:2.3.1"
kapt "com.sun.xml.bind:jaxb-impl:2.3.2"
// If you're using Java
annotationProcessor "com.sun.xml.bind:jaxb-core:2.3.0.1"
annotationProcessor "javax.xml.bind:jaxb-api:2.3.1"
testAnnotationProcessor "com.sun.xml.bind:jaxb-core:2.3.0.1"
testAnnotationProcessor "javax.xml.bind:jaxb-api:2.3.1"
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-04 10:21:44
Jak stwierdza oficjalna dokumentacja:
Podczas aktualizacji możesz napotkać:
java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
Hibernate zazwyczaj wymaga JAXB, który nie jest już domyślnie dostarczany. Możesz dodaj Javę.xml.moduł bind przywracający tę funkcjonalność za pomocą Java9 lub Java10 (nawet jeśli moduł jest przestarzały).
Od Java11, moduł nie jest dostępny, więc jedyną opcją jest dodaj JAXB RI (możesz to zrobić od Java9 zamiast dodawania java.xml.bind Moduł:
Maven
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
Gradle (bułg.gradle.kts):
implementation("org.glassfish.jaxb:jaxb-runtime")
Gradle (bułg.gradle)
implementation 'org.glassfish.jaxb:jaxb-runtime'
Jeśli wolisz określić konkretną wersję, zajrzyj tutaj: https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-07 14:35:42
Nie odpowiedź, ale dodatek: dostałem, ponieważ uruchomienie groovysh
(Groovy 2.4.13) jeśli JAVA_HOME wskazuje na instalację Java 9 (java version "9.0.1"
aby być precyzyjnym) nie powiodło się:
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:107)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:129)
Caused by: java.lang.NoClassDefFoundError: Unable to load class groovy.xml.jaxb.JaxbGroovyMethods due to missing dependency javax/xml/bind/JAXBContext
at org.codehaus.groovy.vmplugin.v5.Java5.configureClassNode(Java5.java:400)
at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:277)
at org.codehaus.groovy.ast.ClassNode.getMethods(ClassNode.java:397)
...
..
.
..
...
at org.codehaus.groovy.tools.shell.Groovysh.<init>(Groovysh.groovy:135)
at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
at org.codehaus.groovy.tools.shell.Main.<init>(Main.groovy:66)
at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
at org.codehaus.groovy.tools.shell.Main.main(Main.groovy:163)
... 6 more
Rozwiązaniem było:
Przejdź do JAXB Project na github.io ("JAXB jest licencjonowany na podwójnej licencji-CDDL 1.1 i GPL 2.0 z wyjątkiem ścieżki klasowej")
Pobierz
jaxb-ri-2.3.0.zip
-
Rozpakuj gdziekolwiek umieścisz swoje pliki java infrastructure (w moja sprawa,
/usr/local/java/jaxb-ri/
). Inne rozwiązanie może istnieć (może przez SDKMAN, Nie wiem) -
Upewnij się, że słoiki w podkatalogu lib znajdują się w
CLASSPATH
. Robię to za pomocą skryptu uruchomionego przy starcie Basha, o nazwie/etc/profile.d/java.sh
, gdzie dodałem (wśród wielu innych linii) następującą pętlę:
Spakowane do funkcji...
function extend_qzminynshg {
local BASE="/usr/local/java"
for LIB in jaxb-api.jar jaxb-core.jar jaxb-impl.jar jaxb-jxc.jar jaxb-xjc.jar; do
local FQLIB="$BASE/jaxb-ri/lib/$LIB"
if [[ -f $FQLIB ]]; then
export CLASSPATH=$FQLIB:$CLASSPATH
fi
done
}
extend_qzminynshg; unset extend_qzminynshg
I to działa!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 20:46:57
Potrzebujesz tylko 1 zależności:
dependencies {
implementation ("jakarta.xml.bind:jakarta.xml.bind-api:2.3.2")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-18 11:13:38
Napotkałem ten problem podczas pracy nad projektem Java W Debian 10 .
Przy każdym uruchomieniu aplikacji wyświetla błąd w pliku dziennika:
Java.lang.NoClassDefFoundError: javax / xml / bind / JAXBException
Oto Jak to rozwiązałem :
Problem jest często spowodowany brakiem JAXB biblioteki (Java Architecture for XML Binding) w classpath. JAXB jest zawarty w Javie SE 10 lub starszej, ale został usunięty z Java SE z Java 11 lub nowszej-przeniesiony do Java EE w ramach projektu Jakarta ee.
Więc sprawdziłem moją wersję Javy używając:
java --version
I dało mi to wyjście
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Debian-1deb10u1, mixed mode, sharing)
Więc natknąłem się na błąd JAXBException ponieważ używałem Java 11 , który nie ma biblioteki JAXB (Java Architecture for XML Binding) brakuje w classpath. JAXB wchodzi w jego skład.
Aby rozwiązać problem musiałem dodać JAXB API biblioteka lib (/opt/tomcat/lib
) katalog mojej instalacji tomcat:
sudo wget https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.4.0-b180830.0359/jaxb-api-2.4.0-b180830.0359.jar
Potem zmieniłem nazwę z jaxb-api-2.4.0-b180830.0359.jar
na jaxb-api.jar
:
sudo mv jaxb-api-2.4.0-b180830.0359.jar jaxb-api.jar
Uwaga : upewnij się, że zmienisz uprawnienia zezwalaj tomcat na dostęp do pliku, a także zmień własność na tomcat
:
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 777 /opt/tomcat/
A potem zrestartowałem serwer tomcat:
sudo systemctl restart tomcat
Zasoby: [Solved] java.lang.NoClassDefFoundError: javax / xml / bind / JAXBException
To wszystkie.
Mam nadzieję, że to pomoże
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-01 16:49:22
OK, miałem ten sam problem, ale korzystałem z Javy 8 i ciągle otrzymywałem ten błąd, próbowałem większości rozwiązań. ale okazuje się, że mój maven nadal wskazywał na Javę 9-chociaż ustawiłem globalną wersję Javy na 8, jak tylko naprawiłem, że wszystko działało.
Dla każdego, kto może mieć tego rodzaju problem, sprawdź Jak naprawić Mavena, aby używał domyślnej Javy
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-08 12:03:24
Stara odpowiedź " Problem rozwiązany przez przejście na amazoncorretto" Odpowiedź na wiadomości: używałem corretto latest, ale jest podobny jdk 1.8. więc tak czy inaczej musimy dodać zależności ręcznie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-23 10:53:38
Wersje zależności, których potrzebowałem podczas kompilacji dla Java 8 target. Testowana aplikacja w Javie 8, 11 i 12 JREs.
<!-- replace dependencies that have been removed from JRE's starting with Java v11 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.8-b01</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.8-b01</version>
</dependency>
<!-- end replace dependencies that have been removed from JRE's starting with Java v11 -->
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-08 20:01:22
Dla mnie w Javie 11 i gradle tak wyszło:
plugins {
id 'java'
}
dependencies {
runtimeOnly 'javax.xml.bind:jaxb-api:2.3.1'
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-22 07:08:28
Wiem, że jestem spóźniony na imprezę, ale mój błąd zakończył się potrzebą innego rozwiązania... super simple too
Początkowo depoloyed do Tomcat 9 i zdałem sobie sprawę, że potrzebuję 7... Zapomniałem mapować moją ścieżkę klasową z powrotem do wersji 7 W build.xml
Mam nadzieję, że naprawi to błąd kogoś innego w przyszłości, komu uda się przeoczyć ten prosty problem, tak jak ja!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-08 11:19:21
Musisz dodać JAXB do Mavena. Implementacja glassfish w wersji 2.3.2 jest doskonale kompatybilna z nowym jakarta EE JAXB API w wersji 2.3.2.
<!-- API -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
<!-- Runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-24 14:23:08