본문 바로가기
Environment·Tool

[Groovy] Unable to load class org.apache.groovy.jaxb.extensions.JaxbExtensions due to missing dependency javax/xml/bind/JAXBContext 에러 원인과 해결 방법

by Leica 2020. 2. 26.
반응형
  • 관련 글

- [Environment·Tool] - IntelliJ에서 Groovy 프로젝트 생성하고 테스트 코드 실행하기


[Groovy] Unable to load class org.apache.groovy.jaxb.extensions.JaxbExtensions due to missing dependency javax/xml/bind/JAXBContext 에러 원인과 해결 방법

Groovy 프로젝트를 빌드했을 때 이와 같은 에러가 발생한다면,

 

Information:Groovyc: While compiling testGroovy:java.lang.NoClassDefFoundError: Unable to load class org.apache.groovy.jaxb.extensions.JaxbExtensions due to missing dependency javax/xml/bind/JAXBContext at org.codehaus.groovy.vmplugin.v8.Java8.configureClassNode(Java8.java:456) at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:273) at org.codehaus.groovy.ast.ClassNode.getMethods(ClassNode.java:395) at
...

 

일단 해당 groovy 프로젝트의 JDK 버전을 확인해보자.

아마 JDK 버전 9 이상일 것이다.

이렇게 JDK 버전 9 이상을 사용할 경우 JAXB 종속성을 추가해줘야 하기 때문에 JAXB 라이브러리를 추가하지 않을 경우 이런 에러가 발생한다.

 

나 같은 경우 JDK 11 + groovy 3 조합에서 이 에러가 발생했다.

 

해결 방법은 2가지가 있다.

JDK 버전을 8 이하로 변경하는 방법과 JAXB 종속성을 추가하는 방법이다.

 

해결 방법 1 - JDK 버전 변경

JDK를 1.8로 변경하고 다시 빌드해보자.

 

아까와 달리 빌드가 정상적으로 될 것이다.

 

해결 방법 2 - JAXB 종속성 추가

JDK 버전을 바꾸지 못하는 상황이라면 프로젝트에 JAXB 종속성을 추가해준다.

JAXB jar 파일들은 groovy SDK에 포함되어 있다.

 

Groovy SDK 홈\lib\extras-jaxb에 해당 jar파일들이 있다.

 

Groovy 프로젝트 dependency에 이 디렉토리를 추가해준다.

 

그리고 다시 빌드해보면 마찬가지로 정상적으로 될 것이다.

 

혹시 자바 9 이상에서 JAXB jar 파일들을 추가해도 에러가 난다면 VM 옵션에 아래 옵션을 추가한다.

 

--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED

 

VM 옵션 추가

 

참고로 amazon corretto 11 + groovy 3 조합에서는 JAXB 라이브러리만 추가해줌으로써 해당 에러가 해결되었다.


  • 관련 글

- [Environment·Tool] - IntelliJ에서 Groovy 프로젝트 생성하고 테스트 코드 실행하기

 

References

https://www.logicbig.com/tutorials/misc/groovy/intellij.html

반응형

댓글