OpenJDK 1.8执行Maven编译时--illegal-access选项报错溯源
问题分析与解决
核心原因
--illegal-access=permit是Java 9及更高版本引入的JVM参数,用于控制对内部API的访问权限,而你的构建使用的是Java 8,该版本完全不支持这个参数,因此启动JVM时会报错。
一、--illegal-access=permit的可能来源
这个参数大概率是从以下几个地方混入的:
- 环境变量:检查你的
MAVEN_OPTS或JAVA_OPTS环境变量,可能之前使用Java 17时添加了该参数,切换到Java 8后未清理。执行以下命令查看:echo $MAVEN_OPTS echo $JAVA_OPTS - Maven全局配置:查看Maven的
settings.xml文件(通常在~/.m2/settings.xml或/etc/maven/settings.xml),检查是否在<configuration>节点下的argLine或其他参数配置中加入了该选项。 - 项目POM配置:检查项目的
pom.xml,重点看maven-compiler-plugin、maven-surefire-plugin等插件的<argLine>配置,是否硬编码了这个JVM参数。 - IDE运行配置:如果是通过IDE执行Maven命令,检查IDE的Maven运行配置模板或当前项目的运行配置,是否添加了该参数。
二、OpenJDK 17是否会造成干扰
系统中同时安装Java 17本身不会直接导致这个问题,但如果存在以下情况可能间接引发错误:
- 之前使用Java 17构建时,在环境变量或Maven配置中添加了
--illegal-access=permit参数,切换到Java 8后未移除这些配置。 JAVA_HOME环境变量错误指向Java 17,但从你的报错信息看,Maven已经调用了Java 8的可执行文件,所以这种情况可以排除。
解决步骤
- 清理环境变量:如果
MAVEN_OPTS或JAVA_OPTS包含--illegal-access=permit,直接从对应的shell配置文件(如.bashrc、.zshrc)中删除该参数,然后重启终端生效。 - 检查并修正Maven配置:在
settings.xml和项目pom.xml中查找并移除所有包含--illegal-access=permit的配置项。 - 确认
JAVA_HOME指向正确:执行echo $JAVA_HOME,确保输出是Java 8的安装路径(如/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.422.b05-2.el8.x86_64)。
内容的提问来源于stack exchange,提问作者Jo Vanmont
相关产品推荐
相关产品推荐

