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

JDK10下Cloud Endpoint项目Maven编译TypeTags错误排查与解决

问题原因分析

这个编译错误Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags的核心原因是你使用的旧版Cloud Endpoints Framework(2.0.8)与JDK10不兼容:

  • com.sun.tools.javac.code.TypeTags是JDK8及更早版本中的内部API类,JDK9及以后的版本已经移除了这个类(改为使用com.sun.tools.javac.code.TypeTag单例枚举)。
  • 旧版Endpoints Framework依赖这个内部类处理注解编译逻辑,在JDK10环境下尝试加载不存在的类时就会抛出初始化异常。
  • 虽然你在pom.xml中指定了maven.compiler.source和target为1.8,但这仅控制编译生成的字节码版本,无法解决依赖库对JDK内部API的调用问题。
解决方法

根据优先级推荐以下几种方案:

方案1:升级Cloud Endpoints Framework到兼容JDK9+的版本

这是最稳妥、长期有效的解决方案,步骤如下:

  1. 更新pom.xml中的Endpoints相关版本,推荐升级到2.2.0及以上(该版本开始支持JDK9+):
<properties>
    <!-- 升级Endpoints版本 -->
    <endpoints.framework.version>2.2.2</endpoints.framework.version>
    <endpoints.management.version>1.0.14</endpoints.management.version>
    <!-- 其他属性保持不变 -->
</properties>
  1. 同步更新endpoints-management-control-appengine-all依赖的版本,确保与endpoints.management.version一致:
<dependency>
    <groupId>com.google.endpoints</groupId>
    <artifactId>endpoints-management-control-appengine-all</artifactId>
    <version>${endpoints.management.version}</version>
</dependency>
  1. 同时建议升级appengine-api-1.0-sdk到较新版本,比如1.9.87(与新Endpoints版本兼容更好)。
  2. 重新执行mvn clean package,问题应该就能解决。

方案2:降级JDK到JDK8

如果暂时无法升级Endpoints框架,可以将JDK版本降级到JDK8:

  • 卸载当前的JDK10,安装JDK8(Oracle JDK8或OpenJDK8均可)。
  • 配置Maven使用JDK8(可以通过JAVA_HOME环境变量指定,或者在pom.xml中添加maven.compiler.plugin明确指定JDK路径)。
  • 重新编译项目,旧依赖在JDK8环境下可以正常工作。

方案3:临时绕过JDK内部API限制(不推荐)

如果以上两种方案都暂时无法实施,可以尝试添加JVM参数允许访问内部API,但这只是临时方案,后续JDK版本可能完全禁止这种访问:
在pom.xml中添加maven-compiler-plugin配置,加入--add-exports参数:

<build>
    <plugins>
        <!-- 其他插件保持不变 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArgs>
                    <arg>--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

注意:这种方法可能会带来兼容性和安全风险,仅作为临时过渡方案使用。

内容的提问来源于stack exchange,提问作者Azeem Haider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:35:26