gradle `切换到java 17后无法识别的VM选项'CMSClassUnloadingEnabled'`

wko9yo5t  于 2023-08-06  发布在  Java
关注(0)|答案(1)|浏览(262)

在将Java版本更改为17之后,我无法构建Gradle项目。
我使用的是Gradle 7.3.1版本,Gradle属性中有以下行:

org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xms1g -Xmx4g -XX:+UseG1GC -XX:+CMSClassUnloadingEnabled

字符串
然后我得到以下错误

Unrecognized VM option 'CMSClassUnloadingEnabled'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.


如果删除-XX:+CMSClassUnloadingEnabled,则会出现以下错误:

Unable to make field private int java.lang.reflect.Field.modifiers accessible: module java.base does not "opens java.lang.reflect" to unnamed module @1b9ee3e0

ig9co6j1

ig9co6j11#

Unable to make field private int java.lang.reflect.Field.modifiers accessible:
module java.base does not "opens java.lang.reflect" to unnamed module @1b9ee3e0

字符串
是的,你是对的,那是因为AspectJ
假设你使用的是AspectJ加载时织入(LTW)而不是编译时织入,也许你应该阅读1.9.7以后每个版本的AspectJ release notes,支持Java 16+:

在Java 16+上使用LTW

请注意,如果你想在Java 16+上使用加载时织入,织入代理会与JEP 396 (Strongly Encapsulate JDK Internals by Default)和相关的后续JEP冲突。因此,您需要设置JVM参数--add-opens java.base/java.lang=ALL-UNNAMED以启用方面编织。这是由于织入器使用内部API的事实,当在不同的类加载器中定义类时,我们还没有找到合适的替代品。

相关问题