#java #gradle #jvm #jvm-arguments #java-17
#Ява #грейдер #спм #jvm-аргументы #ява-17
Вопрос:
После изменения версии 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
Комментарии:
1. «Непризнанный параметр виртуальной машины «CMSClassUnloadingEnabled» возникает из-за того, что в Java 14 был удален сборщик мусора CMS, и параметры, относящиеся к этому сборщику мусора (например, «CMSClassUnloadingEnabled»), являются незаконными для Java 14 и более поздних версий. Если вы добавите эту опцию, JVM откажется запускаться.
2. Вторая ошибка «Не удалось сделать поле закрытым в java.lang.reflect. Поле.доступные модификаторы» происходит из-за того, что Java 17 резко ограничила доступ к внутренним полям. Однако, поскольку Gradle 7.3 совместим с Java 17, это должно быть сообщение об ошибке от какого-либо стороннего плагина или из вашего кода. Без дальнейшего контекста это не может быть решено.
3. Да, вы правы, это из-за аспектаj
4. Типичный случай эзотерических параметров командной строки. Этот параметр
-XX: CMSClassUnloadingEnabled
, как следует из названия, специфичен для сборщика мусора CMS и, следовательно , никогда не имел никакого смысла в сочетании с-XX: UseG1GC
совершенно другим сборщиком мусора. Итак, теперь, когда сборщик CMS удален, параметры, связанные с CMS, вызывают ошибку, но эти параметры в любом случае не действовали, когда вы использовали G1GC. Поскольку G1GC используется по умолчанию в JDK 17, вы даже можете удалить эту-XX: UseG1GC
опцию.