WSL2 использует неправильные версии Java для задачи gradle.

Вопрос или проблема

Я запускаю IntelliJ в WSL2 на Windows, и всё в порядке внутри IDE, но в командной строке версии Java сбивают с толку. Несколько примеров:

which java.exe
> /mnt/c/Program Files/Java/jdk-23.0.1/bin/java.exe

java --version
> openjdk 11.0.25 2024-10-15
> OpenJDK Runtime Environment (build 11.0.25+9-post-Ubuntu-1ubuntu122.04)
> OpenJDK 64-Bit Server VM (build 11.0.25+9-post-Ubuntu-1ubuntu122.04, mixed mode, sharing)

echo $JAVA_HOME
> /opt/java/temurin-17

echo $PATH
> :/opt/java/temurin-17/bin/

Я опустил большинство частей PATH по соображениям конфиденциальности. Я добавил это в .bashrc:
export PATH="$PATH:/opt/java/temurin-17/bin/"

Так много разных версий, которые нужно учитывать, но, похоже, используется 11-я, когда я запускаю commit-hook с помощью gradle:

> Failed to calculate the value of task ':buildSrc:compileJava' property 'javaCompiler'.
      > Toolchain installation '/usr/lib/jvm/java-11-openjdk-amd64' does not provide the required capabilities: [JAVA_COMPILER]

Как я могу заставить :buildSrc:compileJava использовать установку temurin-17?

Насколько я знаю:

  1. PATH ищется слева направо.
    Попробуйте

    export PATH="/opt/java/temurin-17/bin/:$PATH"
    export JAVA_HOME=/opt/java/temurin-17

  2. which java.exe – поиск явного исполняемого файла для Windows (исполняемый файл Linux java не имеет расширения)

    java --version – тест любого первого найденного в PATH (или только Linux) исполняемого файла

  3. $JAVA_HOME – это где Java ищет библиотеки и т.д.

Ответ или решение

Когда мы говорим о запуске IntelliJ в WSL2 на Windows и столкновении с неверными версиями Java для задач Gradle, проблему в вашем случае можно разложить на несколько аспектов:

Теория

WSL2 и взаимодействие окружений: Windows Subsystem for Linux (WSL2) интегрирует ядро Linux в Windows, позволяя пользователям запускать родные Linux-инструменты непосредственно под Windows. В этом окружении могут возникать конфликты, связанные с путями к различным версиям программных средств, особенно Java. Java часто используется как на Windows, так и на Linux, что приводит к сложностям в установке переменных окружения, таких как JAVA_HOME и PATH.

PEREMENNUE OKRUZHENIYA И ПРИОРИТЕТ: Когда вы добавляете пути в PATH, система просматривает их слева направо, отдавая предпочтение тем, которые расположены первыми. Это критично для правильного выбора версии Java для Gradle.

Пример

Конфликт версий: В вашей первоначальной установке программы указано как минимум три разных версии Java:

  1. C:\Program Files\Java\jdk-23.0.1 — это версия Java, установленная на Windows.
  2. OpenJDK 11 (версия 11.0.25), доступная через команду java --version в WSL2.
  3. Temurin 17, установленный по пути /opt/java/temurin-17 и добавленный в PATH через .bashrc.

Задача Gradle: Ошибка при запуске Gradle связана с тем, что он пытается использовать OpenJDK 11, но вам требуется использование Temurin 17.

Применение

Решение проблемы с версиями Java в WSL2: Ваша задача заключается в том, чтобы убедиться, что командная строка Gradle использует нужное окружение. Следуйте следующим шагам, чтобы привести всё в порядок:

  1. Обновление переменных окружения:

    Измените ваш файл .bashrc для полной переустановки JAVA_HOME и корректировки PATH. Например:

    export JAVA_HOME=/opt/java/temurin-17
    export PATH="$JAVA_HOME/bin:$PATH"

    Это гарантирует, что любые вызовы Java с использованием java или подобных команд будут ссылаться на правильную директорию Java.

  2. Убедитесь в удалении каждого кеша:

    В некоторых случаях требуется перезапуск WSL2 и проверка, занимает ли .bashrc корректные изменения:

    source ~/.bashrc

    Или просто закрытие и новое открытие терминала для восстановления всех переменных.

  3. Проверка корректности:

    Проверьте, какую версию Gradle пытается использовать, вызвав:

    gradle -version

    Это поможет убедиться, что Gradle использует правильную версию Java.

  4. Указание для Gradle использовать нужную версию Java:

    Создайте или отредактируйте файл gradle.properties в вашем проекте, добавив следующее:

    org.gradle.java.home=/opt/java/temurin-17

    Это позволит явно указать Gradle, какую версию среды должен использовать для всех процессов компиляции и сборки.

  5. Проверка настройки Java в IntelliJ:

    Убедитесь, что конфигурации проекта в IntelliJ также направлены на нужный JDK. Откройте Project Structure -> Project и убедитесь, что выставлен корректный JDK.

Заключение

Вашу проблему можно резюмировать как сложность управления несколькими установками Java в рамках смешанного окружения WSL2 и Windows. Следуя описанным шагам, вы сможете устранить конфликты, связанные с версиями JDK, и обеспечить консистентность в работе Gradle с нужной версией Java. Если проблема сохраняется, рассмотрите возможность полного удаления лишних версий Java из окружения, чтобы минимизировать потенциальные конфликты.

Оцените материал
Добавить комментарий

Капча загружается...