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

Java 8升级至Java 11后Maven编译及jaxb-runtime依赖路径警告求助

解决思路与方案

刚巧我之前升级Java 8到11时也碰到过类似的问题,给你分享下我当时的解决思路和具体方案:

1. 处理error_prone_core的非法反射访问警告

Java 9及以后版本收紧了反射访问权限,旧版本的error_prone_core可能会触发这类警告。你可以按以下两种方式解决:

  • 升级error_prone_core到适配Java 11的版本:这是最稳妥的方案,比如升级到2.18.0及以上版本(具体可参考官方兼容说明),新版本已经修复了Java 11下的反射访问问题。
  • 添加JVM参数允许反射访问:如果暂时不想升级,需要在Maven编译插件中添加--add-opens参数,同时确保fork=true(因为必须启动新的编译进程才能传递JVM参数),示例配置如下:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version> <!-- 建议升级到支持Java 11的插件版本 -->
    <configuration>
        <release>11</release>
        <fork>true</fork>
        <compilerArgs>
            <!-- 根据警告提示的具体包路径添加对应参数,以下是常见的需要开放的包 -->
            <arg>--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
            <arg>--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
            <arg>--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
        </compilerArgs>
    </configuration>
</plugin>

2. 解决jaxb-runtime的路径警告问题

你观察得没错,这个问题和Java版本无关,是jaxb-runtime-2.3.2本身的MANIFEST.MF文件里的Class-Path属性引用了不存在的JAR文件(比如jaxb-api.jar、jaxb-core.jar等),而Maven的依赖管理已经自动处理了这些依赖,所以实际运行不受影响,但会触发日志警告。解决方法如下:

  • 替换为修复了该问题的jaxb-runtime版本:排除Hibernate Core引入的旧版本,手动添加2.3.3及以上的稳定版(这些版本已经移除了错误的Class-Path配置),示例依赖配置:
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>你的Hibernate版本</version>
    <exclusions>
        <exclusion>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 手动添加修复后的jaxb-runtime -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.6</version> <!-- 或更高的稳定版本 -->
    <scope>runtime</scope>
</dependency>
  • 临时隐藏警告(不推荐):如果暂时不想修改依赖,可以在日志配置中关闭该类警告,比如在logback.xml中添加:
<logger name="org.springframework.boot.devtools.restart.classpath" level="ERROR" />

不过这只是掩盖问题,建议优先采用替换版本的方案。

3. 反馈渠道

如果确认是jaxb-runtime的问题,可以直接去它的官方代码仓库提交Issue,描述清楚你使用的版本、Maven环境、具体的警告信息;如果是Hibernate Core默认引入了有问题的旧版本,也可以去Hibernate的官方仓库反馈,建议他们升级依赖的jaxb-runtime版本。

内容的提问来源于stack exchange,提问作者Filip Procházka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:40:52