将IntelliJ项目从Java 8切换到Java 11后出现编译错误求助
IntelliJ切换项目SDK到Java 11后触发javax.xml.bind.annotation.XmlSchema类找不到错误(含Android SDK模块)
问题描述
将IntelliJ项目的SDK从Java 8切换到Java 11后,触发内部错误,错误堆栈如下:
Error:Internal error: (java.lang.ClassNotFoundException) javax.xml.bind.annotation.XmlSchema java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:157) at com.android.repository.api.SchemaModule.(SchemaModule.java:76) at com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.java:82) at org.jetbrains.jps.android.AndroidJpsUtil.getAndroidTarget(AndroidJpsUtil.java:405) at org.jetbrains.jps.android.AndroidJpsUtil.getAndroidPlatform(AndroidJpsUtil.java:481) at org.jetbrains.jps.android.builder.AndroidPackagingBuildTarget.doComputeRootDescriptors(AndroidPackagingBuildTarget.java:70) at org.jetbrains.jps.android.builder.AndroidBuildTarget.computeRootDescriptors(AndroidBuildTarget.java:56) at org.jetbrains.jps.builders.impl.BuildRootIndexImpl.addRoots(BuildRootIndexImpl.java:72) at org.jetbrains.jps.builders.impl.BuildRootIndexImpl.(BuildRootIndexImpl.java:62) at org.jetbrains.jps.cmdline.BuildRunner.load(BuildRunner.java:83) at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:274) at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:130) at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:232) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)
项目包含需引用Android-SDK的模块,已尝试添加jaxb依赖,但问题仍未解决。
解决方案
1. 配置IDE启动JVM参数
Java 11移除了JAXB的内置支持,需为IntelliJ手动添加相关模块:
- 打开
Help->Edit Custom VM Options - 在
idea.vmoptions文件中添加以下参数(二选一即可):
或精确指定JAXB模块:--add-modules=java.se.ee--add-modules=java.xml.bind,java.activation - 重启IntelliJ后重新构建项目。
2. 升级Android Gradle插件版本
旧版插件对Java 11兼容性差,升级到兼容版本:
- 打开项目根目录
build.gradle,修改插件版本至3.6.0以上(推荐4.0+):dependencies { classpath 'com.android.tools.build:gradle:4.2.2' } - 同步Gradle并重新构建。
3. 检查Android模块的JDK配置
确保模块编译环境与Java 11匹配:
- 打开
File->Project Structure->Modules - 选中Android模块:
- 在
Dependencies标签页,确认Module SDK为对应Android SDK版本,Language level设为11; - 在
Sources标签页,同步Language level设置。
- 在
4. 确认JAXB依赖添加正确
针对Java 11,需显式引入完整JAXB依赖:
Gradle项目
在模块build.gradle中添加:
dependencies { implementation 'javax.xml.bind:jaxb-api:2.3.1' implementation 'com.sun.xml.bind:jaxb-impl:2.3.3' implementation 'com.sun.xml.bind:jaxb-core:2.3.0.1' implementation 'javax.activation:activation:1.1.1' }
Maven项目
在pom.xml中添加:
<dependencies> <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-impl</artifactId> <version>2.3.3</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0.1</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> </dependencies>
5. 清理缓存并重建
- 执行
File->Invalidate Caches...->Invalidate and Restart - 重启后依次执行
Build->Clean Project和Build->Rebuild Project
内容的提问来源于stack exchange,提问作者mcfly soft
相关产品推荐
相关产品推荐

