Java 17升级时groovy-maven-plugin:2.0执行报错求助
解决Java 17升级后groovy-maven-plugin初始化失败的问题
核心原因
你碰到的InaccessibleObjectException是因为Java 17的模块系统默认限制了对内部API的访问,而旧版本groovy-maven-plugin:2.0依赖的Groovy版本会尝试调用java.lang.finalize()这个被模块系统封锁的方法,导致GroovySystem初始化失败。
推荐解决方案:升级到兼容Java 17的Groovy Maven插件
原org.codehaus.gmaven:groovy-maven-plugin已停止维护,建议替换为它的继任者gmavenplus-plugin,该插件支持Java 17及更高版本。修改后的POM配置如下:
<plugin> <groupId>org.codehaus.gmavenplus</groupId> <artifactId>gmavenplus-plugin</artifactId> <version>1.13.1</version> <!-- 可使用最新稳定版 --> <executions> <execution> <id>echo-build-environment</id> <phase>validate</phase> <goals> <goal>execute</goal> </goals> <configuration> <scripts> <script><![CDATA[ log.info("POM Hierarchy") def rootPom = project; while (rootPom.parent != null) { log.info(rootPom.groupId + ':' + rootPom.artifactId + ':' + rootPom.version) rootPom = rootPom.parent; } log.info(rootPom.groupId + ':' + rootPom.artifactId + ':' + rootPom.version) ]]></script> </scripts> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>3.0.17</version> <!-- 选择兼容Java17的Groovy版本 --> <type>pom</type> </dependency> </dependencies> </plugin>
备选临时方案(不推荐)
如果暂时无法替换插件,可以通过添加JVM参数开放模块访问权限,但这只是临时 workaround,长期来看还是建议升级插件:
<plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>groovy-maven-plugin</artifactId> <version>2.0</version> <executions> <!-- 保持原有execution配置不变 --> </executions> <configuration> <jvmArguments>--add-opens java.base/java.lang=ALL-UNNAMED</jvmArguments> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者Abhishek-Sahu
相关产品推荐
相关产品推荐

