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

Java 11迁移时sun.misc.URLClassPath编译失败问题求助

问题

Java 8中引入sun.misc.URLClassPath可正常运行,迁移至Java 11后无法工作,原因是sun.misc包被移入JDK内部包。尝试在Maven编译插件中添加--add-exports参数导出相关包到模块,但执行mvn compile时仍出现找不到URLClassPath类的编译错误。

当前pom配置

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.10.1</version>
            <configuration>
                <source>11</source>
                <target>11</target>
                <encoding>UTF-8</encoding>
                <showWarnings>true</showWarnings>
                <showDeprecation>true</showDeprecation>
                <compilerArgs>
                    <arg>--add-exports=java.base/jdk.internal.misc=com.myapp.af.util</arg>
                    <arg>--add-opens=java.base/jdk.internal.misc=com.myapp.af.util</arg>
                </compilerArgs>
            </configuration>
        </plugin>            
    </plugins>
</build>

编译错误信息

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /D:/apps/src/main/java/com/myapp/af/util/AgentClassLoaderUtil.java:[6,16] cannot find symbol
  symbol:   class URLClassPath
  location: package sun.misc
[ERROR] /D:/apps/src/main/java/com/myapp/af/util/AgentClassLoaderUtil.java:[35,17] cannot find symbol
  symbol:   class URLClassPath
  location: class com.myapp.af.util.AgentClassLoaderUtil
[ERROR] /D:/apps/src/main/java/com/myapp/af/util/AgentClassLoaderUtil.java:[35,37] cannot find symbol
  symbol:   class URLClassPath
  location: class com.myapp.af.util.AgentClassLoaderUtil
[INFO] 3 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.091 s
[INFO] Finished at: 2023-06-15T16:27:46+07:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project apps: Compilation failure: Compilation failure:
[ERROR] /D:/apps/src/main/java/com/myapp/af/util/AgentClassLoaderUtil.java:[6,16] cannot find symbol
[ERROR]   symbol:   class URLClassPath
[ERROR]   location: package sun.misc
[ERROR] /D:/apps/src/main/java/com/myapp/af/util/AgentClassLoaderUtil.java:[35,17] cannot find symbol
[ERROR]   symbol:   class URLClassPath
[ERROR]   location: class com.myapp.af.util.AgentClassLoaderUtil
[ERROR] /D:/apps/src/main/java/com/myapp/af/util/AgentClassLoaderUtil.java:[35,37] cannot find symbol
[ERROR]   symbol:   class URLClassPath
[ERROR]   location: class com.myapp.af.util.AgentClassLoaderUtil
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
解决方案

你遗漏了两个关键配置点:

  • 类的包路径变更
    Java 11中sun.misc.URLClassPath已经迁移到jdk.internal.misc.URLClassPath,需要把代码中所有import sun.misc.URLClassPath;替换为import jdk.internal.misc.URLClassPath;。

  • 编译参数的模块范围
    当前的--add-exports参数只导出到com.myapp.af.util模块,但如果你的项目是非模块化项目(没有module-info.java),需要使用ALL-UNNAMED指代所有未命名模块,修改编译参数如下:

<compilerArgs>
    <arg>--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED</arg>
    <arg>--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED</arg>
</compilerArgs>

注意:jdk.internal.misc是JDK内部API,未来版本可能被移除或变更,建议优先使用公开API替代(比如java.net.URLClassLoader的公开方法)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:05:41