После очередного обновления системы (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
Комментариев нет:
Отправить комментарий