Java 6/7/8에서 JDK의 일부로 제공되는 JAXB API 클래스를 사용하는 코드가 있습니다. Java 9에서 동일한 코드를 실행하면 런타임에 JAXB 클래스를 찾을 수 없다는 오류가 발생합니다.
JAXB 클래스는 Java 6부터 JDK의 일부로 제공되었으므로 Java 9가 더 이상 이러한 클래스를 찾을 수없는 이유는 무엇입니까?
Java 6/7/8에서 JDK의 일부로 제공되는 JAXB API 클래스를 사용하는 코드가 있습니다. Java 9에서 동일한 코드를 실행하면 런타임에 JAXB 클래스를 찾을 수 없다는 오류가 발생합니다.
JAXB 클래스는 Java 6부터 JDK의 일부로 제공되었으므로 Java 9가 더 이상 이러한 클래스를 찾을 수없는 이유는 무엇입니까?
답변:
JAXB API는 Java EE API로 간주되므로 Java SE 9의 기본 클래스 경로에 더 이상 포함되지 않습니다. Java 11에서는 JDK에서 완전히 제거됩니다.
Java 9에는 모듈 개념이 도입되었으며 기본적으로 java.se
집계 모듈은 클래스 경로 (또는 모듈 경로)에서 사용할 수 있습니다. 이름에서 알 수 있듯이 java.se
집계 모듈에는 전통적으로 Java 6/7/8과 번들로 제공되는 Java EE API가 포함되어 있지 않습니다 .
다행히 JDK 6/7/8에서 제공되는 이러한 Java EE API는 여전히 JDK에 있지만 기본적으로 클래스 경로에는 없습니다. 추가 Java EE API는 다음 모듈에서 제공됩니다.
java.activation
java.corba
java.transaction
java.xml.bind << This one contains the JAXB APIs
java.xml.ws
java.xml.ws.annotation
빠르고 더러운 솔루션 : (JDK 9/10 만 해당)
런타임시 JAXB API를 사용 가능하게하려면 다음 명령 행 옵션을 지정하십시오.
--add-modules java.xml.bind
그러나 Java 8에서 작동하려면 여전히 이것이 필요합니다 !!!
--add-modules
이전 JDK로 지정하려고 하면 인식 할 수없는 옵션이기 때문에 폭파됩니다. 두 가지 옵션 중 하나를 제안합니다.
JDK_JAVA_OPTIONS
환경 변수를 사용하여 Java 9+ 전용 옵션을 설정할 수 있습니다 . 이 환경 변수가되고 자동으로 읽기 에 의해 java
자바 9+에 대한 발사기.-XX:+IgnoreUnrecognizedVMOptions
하지 않고 JVM이 자동으로 인식되지 않는 옵션을 무시하도록 만들 수 있습니다. 그러나 조심하십시오! 사용하는 다른 명령 줄 인수는 더 이상 JVM에서 확인하지 않습니다. 이 옵션은 Oracle / OpenJDK 및 IBM JDK (JDK 8sr4 기준)와 함께 작동합니다.대체 빠른 솔루션 : (JDK 9/10 만 해당)
--add-modules java.se.ee
옵션 을 지정하여 위의 모든 Java EE 모듈을 런타임에 사용 가능하게 할 수 있습니다 . java.se.ee
모듈을 포함하는 집계 모듈 java.se.ee
뿐만 아니라 위의 자바 EE API 모듈. 참고,이 자바 (11)에서 작동하지 않습니다 때문에 java.se.ee
자바 (11)에서 제거되었다.
적절한 장기 솔루션 : (JDK 9 이상)
위에 나열된 Java EE API 모듈은 모두 Java 11 에서 제거 예정@Deprecated(forRemoval=true)
이므로 표시되어 있습니다. 따라서이 접근 방식은 더 이상 Java 11 기본 제공에서 작동하지 않습니다.--add-module
Java 11 이상에서 수행해야 할 작업은 클래스 경로 또는 모듈 경로에 자신의 Java EE API 사본을 포함시키는 것입니다. 예를 들어 JAX-B API를 다음과 같이 Maven 종속성으로 추가 할 수 있습니다.
<!-- 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>
JAXB에 대한 자세한 내용 은 JAXB 참조 구현 페이지 를 참조하십시오.
Java 모듈성에 대한 자세한 내용은 JEP 261 : 모듈 시스템을 참조하십시오 .
Gradle 또는 Android Studio 개발자 : (JDK 9 이상)
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"
}
javax.xml.bind
및 기타 JavaEE 어플의 클래스 당 자바 (11)에서 제거 될 예정입니다 JEP-320 .
java.se.ee
모듈이 제거되었으므로 --add-modules
솔루션이 더 이상 작동하지 않습니다. 대신 권장 솔루션을 사용하십시오. JAXB를 별도의 종속성으로 추가하십시오.
필자의 경우 (스프링 부트 팻 항아리) pom.xml에 다음을 추가합니다.
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
testCompile('javax.xml.bind:jaxb-api')
나에게 도움이되었습니다.
<scope>runtime</scope>
그런 경우 에 사용 하는 것이 좋습니다
최근 JDK 9.0.1에서는 이러한 솔루션 중 어느 것도 제대로 작동하지 않았습니다.
이 종속성 목록이 제대로 작동하기에 충분하다는 것을 알았으므로 명시 적으로 지정할 필요가 없습니다--add-module
(이러한 종속성의 pom 내에 지정되어 있음). 이 종속성 목록을 지정하기 만하면됩니다.
<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>
pom.xml
Maven 구성 파일입니다. 그것이 무엇인지 모른다면, 시작부터 시작하는 것이 좋습니다
<dependency> <groupId>javax.activation</groupId> <artifactId>javax.activation-api</artifactId> <version>1.2.0</version> </dependency>
마지막 종속성으로 사용하지만 .
이것은 나를 위해 일했다 :
<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>
@Jasper가 제안했듯이 전체 EclipseLink 라이브러리에 의존하지 않기 위해 EclipseLink MOXy에 의존 할 수도 있습니다.
메이븐
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.7.3</version>
</dependency>
그래들
compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.moxy', version: '2.7.3'
Java 8 앱의 종속성으로 추가 인수없이 JRE 8 또는 JRE 9 둘 다에서 실행할 수있는 * .jar을 생성합니다.
또한 JAXB API를 사용하기 전에 어딘가에서 실행해야합니다.
System.setProperty("javax.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");
해결 방법으로 지금까지 잘 작동합니다. 그래도 완벽한 솔루션처럼 보이지는 않습니다 ...
org.eclipse.persistence:eclipselink
JAXB API를 얻기 위해 추가 하는 것은 이미 eclipselink를 사용하지 않는 한 매우 무거운 종속성입니다.
-XX:+IgnoreUnrecognizedVMOptions
커맨드 라인 옵션을 사용하는 것이 좋습니다 (내 답변을 세부 사항으로 업데이트했습니다)
org.eclipse.persistence
, artifactId 에 의존 할 수도 있습니다 org.eclipse.persistence.moxy
.
빌드에 두 가지 종속성을 추가해야합니다
구현으로 나는 glass com의 참조 구현을 사용하여 오래된 com.sun 클래스 / 라이브러리를 제거하기로 결정했습니다. 결과적으로 maven 빌드에 추가했습니다.
<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>
버전 2.3.1부터는 javax.activation을 더 이상 추가 할 필요가 없습니다. ( https://github.com/eclipse-ee4j/jaxb-ri/issues/1222 참조 )
jdk 9 이상 버전을 사용하는 경우 Java 버전이므로 pom에 추가하십시오.
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
이 문제를 해결하기 위해 프로젝트에서 일부 JAR 파일을 가져 왔습니다.
http://search.maven.org/remotecontent?filepath=javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar
com.sun.xml.bind
유물이 오래된 및 이전 버전과의 호환성을 위해서만 제공. org.glassfish.jaxb
다른 답변 중 일부에서 언급했듯이 동등한 아티팩트를 대신 사용해야합니다 .
컴파일 및 런타임시 스위치를 추가하십시오. --add-modules java.xml.bind
javac --add-modules java.xml.bind <java file name>
java --add-modules java.xml.bind <class file>
JDK 9
모듈에 대한 좋은 소개는 https://www.youtube.com/watch?v=KZfbRuvv5qc 에서도 확인할 수 있습니다.
이것은 나를 위해 일했습니다. jaxb-api 만 추가하는 것만으로는 충분하지 않습니다.
<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>
com.sun.xml.bind
유물이 오래된 및 이전 버전과의 호환성을 위해서만 제공. org.glassfish.jaxb
다른 답변 중 일부에서 언급했듯이 동등한 아티팩트를 대신 사용해야합니다 .
Build.gradle로 이동하여 Java 9 또는 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'
--add-modules=java.xml.bind
JVM 옵션을 사용 하여 xml 바인드 모듈을 JVM 런타임 환경에 추가 할 수 있습니다 .
예 : java --add-modules=java.xml.bind XmlTestClass
2019 년 4 월 업데이트
JAXB 릴리스에 대한 Changelong은 https://javaee.github.io/jaxb-v2/doc/user-guide/ch02.html에 있습니다.
발췌 :
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
정식 링크는 https://github.com/eclipse-ee4j/jaxb-ri#maven-artifacts에 있습니다.
JAXB 아티팩트에 대한 Maven 좌표
jakarta.xml.bind : jakarta.xml.bind-api : JAXB 용 API 클래스. JAXB에 대해 컴파일하는 데 필요합니다.
org.glassfish.jaxb : jaxb-runtime : JAXB의 구현, XML과의 자바 객체 직렬화 및 역 직렬화에 사용되는 런타임.
JAXB 지방 병 번들 :
com.sun.xml.bind : jaxb-impl : JAXB 런타임 팻 jar.
org.glassfish.jaxb 아티팩트와 달리이 jar에는 모든 종속성 클래스가 포함되어 있습니다. 이러한 아티팩트에는 JPMS 모듈 디스크립터가 포함되어 있지 않습니다. Maven 프로젝트에서는 org.glassfish.jaxb 아티팩트가 대신 사용됩니다.
org.glassfish.jaxb : jaxb-runtime : jar : 2.3.2 가져 오기 :
[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
원래 답변
다음 내 Maven 프로젝트에서 JAXB RI 사용해야 어떤 유물? Maven에서 다음과 같은 프로파일을 사용할 수 있습니다.
<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>
종속성 트리는 다음을 보여줍니다.
[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
Eclipse에서 이것을 사용하려면 Oxygen.3a Release (4.7.3a) 이상, Ctrl-Alt-P 또는 Maven 프로젝트를 마우스 오른쪽 단추로 클릭 한 다음 프로파일을 선택하십시오.
javax.xml.bind
> jaxb-api
다른 곳에서 본 종속성 이 실제로 중복되어 있음을 보여 주셔서 감사합니다 . 글래스 피쉬 의존성은 당깁니다. 방금 시도했지만 실제로 작동합니다.
Java Web Start Execution의 경우 다음과 같이 Andy Guibert의 제안을 사용할 수 있습니다.
<j2se version="1.6+"
java-vm-args="-XX:+IgnoreUnrecognizedVMOptions --add-modules=java.se.ee"/>
--add-modules에서 추가 "="에 유의하십시오. 참조 이 오픈 JDK 티켓 또는의 "이해 런타임 액세스 경고"의 마지막 주 자바 플랫폼 스탠다드 에디션 오라클 JDK 9 마이그레이션 가이드 .
JavaEE는 이제 https://jakarta.ee/ 에 의해 관리되므로 2.3.2 기준의 새로운 Maven 좌표는 다음과 같습니다.
https://eclipse-ee4j.github.io/jaxb-ri/#maven-artifacts
첫 번째로 릴리스 된 jaxb.version은 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>
나는이 URL을 따르고 아래 설정이 실제로 도움이되었습니다. Macbook Pro에서 STS IDE와 함께 Java 10을 사용합니다. 그것은 매력처럼 작동합니다.
<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>
이것은 Java 12에서 Apache Camel 2.24.1을 실행하는 종속성 관련 문제를 해결했습니다.
<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>
2.0.5.RELEASE
Java 11에서 Spring Boot 를 사용하는 것과 동일한 문제가 발생했습니다 .
javax.xml.bind:jaxb-api:2.3.0
혼자 추가 해도 문제가 해결되지 않았습니다. 또한 Spring Boot를 최신 Milestone으로 업데이트해야 2.1.0.M2
했으므로 다음 공식 릴리스에서 수정 될 것이라고 가정합니다.
JDK 9+를 사용할 때 JAX-B 종속성을 추가해야합니다. Android Studio 사용자 build.gradle
의 경우이를 dependencies {}
블록 에 추가해야합니다 .
// 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"
}
또한 Java 11 및
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
javax.xml.bind : jaxb-api 또는 spring boot jakarta.xml.bind-api 추가와 관련하여이 모든 것들을 시도했습니다. 이제 분할!
따라서이 참조를 확인하십시오 : https://github.com/jwtk/jjwt/issues/510
간단하게 사용하면
Java11 및 jjwt 0.9.x이며 ClassNotFoundException : javax.xml.bind.DatatypeConverter 문제가 발생했습니다.
가다
jjwt 버전 0.11.x이지만 분할 된 패키지를 사용하십시오. https://github.com/jwtk/jjwt#install
패키지를 분할하기 때문에 jjwt 종속성에 대한 더 높은 버전을 찾지 못할 것입니다.
건배.
대답은 아니지만 부록 : groovysh
JAVA_HOME이 Java 9 설치 ( java version "9.0.1"
정확히)를 가리키는 경우 실행 (Groovy 2.4.13)이 심해 져서 얻었습니다 .
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
해결책은 다음과 같습니다.
github.io 의 JAXB 프로젝트 로 이동하십시오 ( "JAXB는 이중 라이센스에 따라 라이센스가 부여됨-클래스 경로 예외가있는 CDDL 1.1 및 GPL 2.0" ).
다운로드 jaxb-ri-2.3.0.zip
Java 인프라 파일을 넣을 때마다 압축을 풉니 다 (제 경우에는 /usr/local/java/jaxb-ri/
). 다른 솔루션이 존재할 수 있습니다 (SDKMAN, I dunno를 통해 가능)
lib 서브 디렉토리의 jar 파일이 CLASSPATH
. 나는 bash 시작시 시작된 스크립트를 통해 /etc/profile.d/java.sh
다음과 같은 루프를 추가했다.
기능으로 포장 ...
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
그리고 작동합니다!
하나의 종속성 만 필요합니다.
dependencies {
implementation ("jakarta.xml.bind:jakarta.xml.bind-api:2.3.2")
좋아, 나는 같은 종류의 문제가 있었지만 Java 8을 사용하고 있었고이 오류가 계속 발생하여 대부분의 솔루션을 시도했습니다. 하지만 내 maven이 여전히 Java 9를 가리키고 있지만 전역 Java 버전을 8로 설정했지만 모든 것이 제대로 작동한다는 것을 알았습니다.
이런 종류의 문제가있는 사람은 기본 Java를 사용하도록 Maven을 수정하는 방법을 확인하십시오.
이전 답변 "amazoncorretto로 전환하여 문제가 해결되었습니다"뉴스 답변 : corretto latest를 사용했지만 jdk 1.8과 유사합니다. 어쨌든 우리는 수동으로 의존성을 추가해야합니다.
amazoncorretto:latest
현재 11이 아닌 JDK 8을 제공합니다. 많은 Docker 이미지는 여전히 JDK 8을 기반으로합니다. JDK 8-> 11
Java 8 대상을 컴파일 할 때 사용해야하는 종속성 버전입니다. Java 8, 11 및 12 JRE에서 테스트 된 애플리케이션.
<!-- 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 -->
jaxb 의존성을 maven에 추가해야합니다. glassfish 구현 버전 2.3.2는 새로운 jakarta EE jaxb API 버전 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>
내가 자바 (11)에 내 프로젝트를 업그레이드 한 후 비슷한 문제가 있었다, 그 다음 무엇을 그것은 분명히 자바 (11)에 대한 지원을하고 봄 부팅 2.1.1로 업그레이드했습니다 고정 이 도움이