You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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文件中添加以下参数(二选一即可):
    --add-modules=java.se.ee
    
    或精确指定JAXB模块:
    --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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:21:01