[IntelliJ IDEA + Groovy] JAXBContext 依赖项与类 JaxbExtensions

环境描述

  • IntelliJ IDEA 2020.2 (Ultimate Edition)
  • Oracle Java Development Kit 14.0.1
  • Groovy 3.0.5 (installed via Scoop)

问题描述

当您在 IntelliJ IDEA 中创建了 Groovy 项目并尝试运行时,可能会出现与下列内容相似的报错(位于 Build 界面的 Build Output 中)。

执行预编译任务...
正在加载 Ant 配置…
Running Ant Tasks...
Too many modules require recompilation, forcing full project rebuild
Cleaning output directories...
Running 'before' tasks
Checking sources
Searching for compilable files...
Groovyc: loading sources... [Groovy-Tutorial]
Groovyc: compiling... [Groovy-Tutorial]
Groovy stub generator: initialization [Groovy-Tutorial]
Groovy stub generator: parsing [Groovy-Tutorial]
Groovy compiler in operation... [Groovy-Tutorial]
Groovyc: While compiling Groovy-Tutorial: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:458)
	at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:274)
	at org.codehaus.groovy.ast.ClassNode.getMethods(ClassNode.java:396)
	at org.codehaus.groovy.transform.stc.AbstractExtensionMethodCache.scan(AbstractExtensionMethodCache.java:116)
	at org.codehaus.groovy.transform.stc.AbstractExtensionMethodCache.getMethods(AbstractExtensionMethodCache.java:97)
	at org.codehaus.groovy.transform.stc.AbstractExtensionMethodCache.getMethodsFromClassLoader(AbstractExtensionMethodCache.java:73)
	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
	at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:115)
	at org.codehaus.groovy.transform.stc.AbstractExtensionMethodCache.get(AbstractExtensionMethodCache.java:51)
	at org.codehaus.groovy.macro.transform.MacroCallTransformingVisitor.findMacroMethods(MacroCallTransformingVisitor.java:119)
	at org.codehaus.groovy.macro.transform.MacroCallTransformingVisitor.visitMethodCallExpression(MacroCallTransformingVisitor.java:90)
	at org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:76)
	at org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:117)
	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:200)
	at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
	at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86)
	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:164)
	at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
	at org.codehaus.groovy.ast.MethodCallTransformation.visit(MethodCallTransformation.java:49)
	at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$4(ASTTransformationVisitor.java:337)
	at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:880)
	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:650)
	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:627)
	at org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:62)
	at org.jetbrains.groovy.compiler.rt.DependentGroovycRunner.runGroovyc(DependentGroovycRunner.java:119)
	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.jetbrains.groovy.compiler.rt.GroovycRunner.intMain2(GroovycRunner.java:81)
	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.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovycInThisProcess(InProcessGroovyc.java:167)
	at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.lambda$runGroovyc$0(InProcessGroovyc.java:77)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at java.base/java.lang.Thread.run(Thread.java:832)

Groovyc: Internal groovyc error: code 1
Finished, saving caches...
执行后编译任务...
正在加载 Ant 配置…
Running Ant Tasks...
正在同步输出目录…
2020/8/25 17:29 - 编译完成 1 个错误 和 0 个警告 in 7 s 712 ms

异常类型为 java.lang.NoClassDefFoundError ,具体原因为:

由于缺少依赖项 javax/xml/bind/JAXBContext ,无法加载类 org.apache.groovy.jaxb.extensions.JaxbExtensions


 解决方案

此问题是由于 Java 类路径(Classpath)中缺少 JAXB 依赖引起的,以下提供2种解决方式:

  1. 将 JDK 切换为 1.8 并尝试重新构建项目

  2. 将 Groovy SDK 提供的 JAXB 依赖添加至 IntelliJ IDEA 项目(推荐)

方案一 更改 JDK 版本

JDK 9 及以上版本默认不提供 JAXB 依赖,因此可以选择将 JDK 降级至 8 (1.8) 解决。

如果您本地尚未安装 JDK 1.8 ,推荐使用方案二解决,也可以通过 IntelliJ IDEA 下载并安装 JDK ;如果您已经安装了 JDK 1.8 但尚未添加至 IntelliJ IDEA ,请添加 JDK。

更改完成后,重新构建项目即可。

方案二 添加 JAXB 依赖

Groovy SDK 在安装目录的 lib/extras-jaxb 子目录下提供了额外的 JAXB 依赖项,可用于 JDK 9 及更高版本。前往 IntelliJ IDEA 项目结构的全局库列表,将 JAXB 依赖项添加至类库。

应用并确定、重新构建项目,即可成功运行 Groovy 项目!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值