9 июля 2021 г.

Проект не собирается гредлом

    После очередного обновления системы (pacman -Suy в данном случае) у меня перестал собираться проект из командной строки:

➜  clicker git:(master) ✗ ./gradlew assembleAndroidTest assembleDebug
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
> Task :app:processDebugMainManifest FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processDebugMainManifest'.
> Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @101d84f6

 Запуск с флагом печати стектрейса сказал следующее:

Caused by: java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x1cb57a7a) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x1cb57a7a

    При этом сборка проекта средствами самой Android Studio не сломалась. Всё дело в том, что при запуске из командной строки гредл использует общесистемную джаву, а Студия ту, которая прописана у неё в настройках. То есть всё, что требуется — сказать Гредлу для этого проекта использоать ту же версию, что и Студия.

    Открываем gradle.properties проекта и вставляем то значение, которое у Студии для параметра org.gradle.java.home. У меня это выглядит так:

org.gradle.java.home=/opt/android-studio/jre

Всё, проблема решена: BUILD SUCCESSFUL in 27s

Разумеется, можно использовать переменную окружения JAVA_HOME и gradle её считывает. Но так вот получилось, что у меня в этой переменной Java 16, потому что причины. И как раз из-за этого не работала сборка проекта.

Больше настроек: https://docs.gradle.org/current/userguide/build_environment.html

Комментариев нет:

Отправить комментарий