Windows10下Maven编译JDK17/21项目抛出UnsupportedOperationException
问题分析与解决方案
问题描述
检出完全一致的Maven JDK21项目,使用相同版本的JDK与Maven,同版本Windows10机器上他人可正常编译,但本地执行mvn compile时抛出如下异常:
java.lang.UnsupportedOperationException at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.ensureFile(ZipFileSystemProvider.java:87) at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.newFileSystem(ZipFileSystemProvider.java:119) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager$ArchiveContainer.<init>(JavacFileManager.java:566) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.getContainer(JavacFileManager.java:329) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.pathsAndContainers(JavacFileManager.java:1078) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.indexPathsAndContainersByRelativeDirectory(JavacFileManager.java:1033) at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1228) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.pathsAndContainers(JavacFileManager.java:1021) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.list(JavacFileManager.java:777) at jdk.compiler/com.sun.tools.javac.main.DelegatingJavaFileManager.list(DelegatingJavaFileManager.java:83) at jdk.compiler/com.sun.tools.javac.code.ClassFinder.list(ClassFinder.java:752) at jdk.compiler/com.sun.tools.javac.code.ClassFinder.scanUserPaths(ClassFinder.java:696) at jdk.compiler/com.sun.tools.javac.code.ClassFinder.fillIn(ClassFinder.java:570) at jdk.compiler/com.sun.tools.javac.code.ClassFinder.complete(ClassFinder.java:311) at jdk.compiler/com.sun.tools.javac.code.Symbol.complete(Symbol.java:682) at jdk.compiler/com.sun.tools.javac.code.Symbol$PackageSymbol.members(Symbol.java:1178) at jdk.compiler/com.sun.tools.javac.code.Symtab.listPackageModules(Symtab.java:901) at jdk.compiler/com.sun.tools.javac.comp.Enter.visitTopLevel(Enter.java:345) at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:553) at jdk.compiler/com.sun.tools.javac.comp.Enter.classEnter(Enter.java:287) at jdk.compiler/com.sun.tools.javac.comp.Enter.classEnter(Enter.java:302) at jdk.compiler/com.sun.tools.javac.comp.Enter.complete(Enter.java:608) at jdk.compiler/com.sun.tools.javac.comp.Enter.main(Enter.java:592) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:1072) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:947) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94) at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:136) at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:183) at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1140) at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:193) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289) at org.apache.maven.cli.MavenCli.main(MavenCli.java:193) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
已知情况:
- 已尝试更换Maven版本、重装JDK21/Maven、更换Maven编译插件版本
- IntelliJ可使用JDK21正常编译,但通过IntelliJ或命令行执行
mvn compile均失败 - Maven编译Java8项目正常,仅JDK17/21项目出现问题,且仅本地机器触发
解决方案
从异常栈看,问题出在JDK的zip文件系统提供者(jdk.zipfs)无法正常处理归档文件,属于本地环境配置或权限问题,按以下步骤排查:
- 校验JAVA_HOME配置:确保
JAVA_HOME指向纯净的JDK17/21安装目录,没有混入其他JDK的文件(比如旧JDK的jre/lib下的zipfs相关组件)。执行echo %JAVA_HOME%和java -version确认路径和版本匹配。 - 清理Maven本地仓库:删除
C:\Users\<你的用户名>\.m2\repository下的所有内容,重新执行mvn clean install——损坏的依赖包可能导致zipfs读取异常。 - 检查临时目录权限:JDK处理zip文件时会用到系统临时目录(
%TEMP%),确保当前用户对该目录有读写权限,手动清理临时目录后再尝试编译。 - 禁用增量编译:执行
mvn clean compile -Dmaven.compiler.useIncrementalCompilation=false,增量编译的缓存可能导致zip文件句柄异常。 - 排查安全软件拦截:临时关闭杀毒软件、防火墙等工具,部分安全软件会限制JDK访问zip文件的权限,导致无法创建zip文件系统。
- 更换JDK安装包:使用Oracle或Adoptium官方的JDK安装包,避免修改版;安装时选择默认路径,不要包含中文、空格等特殊字符。
内容的提问来源于stack exchange,提问作者Bellow Zero
相关产品推荐
相关产品推荐

