Как исправить ошибку Could not initialize class org.codehaus.groovy.reflection.ReflectionCache при сборке мобильного приложения 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При попытке собрать мобильное приложение с помощью стандартного «Сборщика мобильных приложений 1С» разработчики часто сталкиваются с критической ошибкой, которая останавливает процесс на этапе выполнения Gradle-скриптов. В логе сборки это выглядит следующим образом: FAILURE: Build failed with an exception. What went wrong: Could not initialize class org.codehaus.groovy.reflection.ReflectionCache. Проблема сопровождается моментальным прекращением сборки, обычно через несколько секунд после старта.

В этой статье мы подробно разберем, почему возникает данная ошибка, как она связана с архитектурой современных версий Java и какие шаги необходимо предпринять, чтобы успешно собрать ваше мобильное приложение.

Проанализируем техническую причину возникновения ошибки

Для начала разберемся в механике работы сборщика. Когда мы нажимаем кнопку «Собрать» в базе сборщика, 1С запускает внешние инструменты: Android SDK и систему автоматизации сборки Gradle. Внутри Gradle активно используется язык программирования Groovy, который отвечает за обработку сценариев сборки.

Основная проблема заключается в несовместимости версий. Начиная с Java 14, разработчики из Oracle внесли существенные изменения в механизмы работы рефлексии (доступа к внутренним структурам классов) в рамках проекта Jigsaw. Класс ReflectionCache в библиотеке Groovy, который используется в старых версиях Gradle, пытается получить доступ к системным структурам Java способом, который в новых версиях JDK был заблокирован или полностью удален из соображений безопасности и оптимизации.

Рассмотрим зависимости Gradle от версий Java:

  1. Для полноценной поддержки Java 14 требуется Gradle версии 6.3 и выше.
  2. Для работы с Java 15 необходим Gradle версии 6.7 и выше.

Поскольку сборщик мобильных приложений (особенно версий 2.0.12.x и близких к ним) использует внутренние шаблоны и скрипты, ориентированные на более старые версии Gradle (часто 5.x), возникает конфликт. Система пытается запустить старый код Groovy на новой виртуальной машине Java, что и приводит к ошибке инициализации класса.

Решение №1: Понижение версии Java (JDK) до стабильной LTS-версии

Как показывает практика и опыт многих разработчиков, наиболее надежным решением является отказ от использования Java 14, 15 и более новых версий в пользу проверенных временем JDK 11 или JDK 13.

Рассмотрим пошагово процесс замены версии Java:

  1. Загрузка дистрибутива: Скачаем и установим OpenJDK 11 (LTS). Это версия с долгосрочной поддержкой, которая считается стандартом для Android-разработки последних лет. Также допустимо использование JDK 13, если это требуется специфическими версиями мобильной платформы.
  2. Изменение настроек в Сборщике: Откроем информационную базу «Сборщик мобильных приложений». Перейдем в настройки параметров сборки или в карточку конкретной сборки.
  3. Указание пути: В поле «Путь к Java» (или аналогичном) заменим путь к версии 14/15 на путь к установленной JDK 11. Например: C:\Program Files\Java\jdk-11.0.12.
  4. Очистка кэша: Это важный этап. Проанализируем содержимое рабочего каталога (путь к которому указан в настройках сборщика, например, C:\temp). Перед новой попыткой сборки рекомендуется полностью очистить временные файлы, чтобы исключить влияние старых артефактов Gradle.

Решение №2: Использование встроенной JRE из Android Studio

Если мы не хотим устанавливать несколько версий JDK в систему, мы можем воспользоваться тем инструментом, который уже идет в комплекте с Android Studio. Компания Google поставляет проверенную версию JRE (Java Runtime Environment), которая гарантированно совместима с инструментами Android SDK.

Разберем, как это сделать:

  1. Найдем папку, в которую установлена Android Studio. Обычно это C:\Program Files\Android\Android Studio.
  2. Внутри этой папки найдем подкаталог jre или jbr (в новых версиях).
  3. Скопируем путь к этому каталогу и вставим его в поле «Путь к Java» в настройках сборщика 1С.

Например, путь может выглядеть так: C:\Program Files\Android\Android Studio\jre. Использование этого пути часто решает не только проблему с ReflectionCache, но и другие скрытые ошибки несовместимости версий.

Дополнительные факторы успеха: API Level и Build-Tools

Даже после исправления ситуации с Java, мы можем столкнуться с другими ошибками. Проанализируем параметры успешной сборки для платформы 1С 8.3.17 и выше:

Проверка переменных окружения

Иногда настройки внутри 1С могут перекрываться системными переменными Windows. Рассмотрим, как проверить системные настройки:

  1. Откроем «Свойства системы» — «Дополнительные параметры системы» — «Переменные среды».
  2. Проверим переменную JAVA_HOME. Если она указывает на JDK 14/15, это может сбивать с толку Gradle, даже если в 1С указан другой путь.
  3. Рекомендуется либо изменить JAVA_HOME на путь к JDK 11, либо убедиться, что в переменной Path путь к нужной версии Java стоит выше остальных.

Заключение

Подводя итог, можно сказать, что ошибка Could not initialize class org.codehaus.groovy.reflection.ReflectionCache — это классический симптом «избыточно новой» версии Java для старых скриптов сборки.

Краткий чек-лист для исправления:

  1. Удаляем или игнорируем JDK 14/15/16.
  2. Устанавливаем JDK 11 или используем JRE из папки Android Studio.
  3. Указываем новый путь в настройках сборщика 1С.
  4. Очищаем временный каталог (кеш) сборки.
  5. Проверяем, что Android API Level соответствует установленным в SDK компонентам.

Следуя этим рекомендациям, вы сможете восстановить процесс сборки мобильных приложений и избежать конфликтов в инфраструктуре Android-разработки на платформе 1С:Предприятие.

← На главную