Подсистема Windows для Linux не распознает переменную среды JAVA_HOME - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь, чтобы WSL распознал установленную в Windows переменную среды JAVA_HOME. Я добавил то, что у меня есть в моем bashrc, и то, что у меня есть в моих переменных среды Windows, а также выходные данные из cmd и bash. JAVA_HOME Env. Var.

imageenter image description here">

Что в конце моего bashrc:

export JAVA_HOME="/mnt/d/Program Files/Java/jdk-11.0.1"
export PATH="/mnt/d/Program Files/Java/jdk-11.0.1/bin:$PATH"

CMD INPUT / OUTPUT:

C:\Users\jaall>javac --version
javac 11.0.1

BASH INPUT / OUTPUT:

myubuntu_name@DESKTOP-LUK3BII:~$ javac --version

Command 'javac' not found, but can be installed with:

sudo apt install default-jdk
sudo apt install openjdk-11-jdk-headless
sudo apt install ecj
sudo apt install openjdk-8-jdk-headless

Я застрял на этом некоторое время и не могу понять это или найти рабочее решение онлайн. Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Поскольку мне никогда не удавалось легко обмениваться переменными между двумя системами, я разработал простую функцию bash, которая может легко извлекать (и определять, если требуется) любую переменную среды Windows.Он также заботится о путях, поэтому они конвертируются из Win32 в Un * x-line.

Я добавил это в /etc/bash.bashrc:

winenv()
{
  if [ "$#" == "0" ] || [ "$1" == "--help" ]
  then
    echo $'\n'Usage:
    echo $'\t'winenv [-d] WINDOWS_ENVIRONEMENT_VARIABLE_NAME
    echo $'\t'-d: Defines environment variable in current shell
    echo $'\t    Note that paths will be translated into un*x-like paths\n'
    return
  fi
  local IFS='$\n'
  local PATH_TO_TRANSLATE=$1
  [ "$1" == "-d" ] && PATH_TO_TRANSLATE=$2
  local VAR=$(cmd.exe /c echo %${PATH_TO_TRANSLATE}% | tr -d '\r')
  local NEW=$(wslpath -u "${VAR}" 2>/dev/null || echo ${VAR})
  echo "${PATH_TO_TRANSLATE} = ${VAR} -> ${NEW}"
  [ "$1" == "-d" ] && export "${PATH_TO_TRANSLATE}=${NEW}"
}

И все, что мне нужно сделать, чтобы отобразитьнужно вызвать winenv PROGRAMFILES (например)
Или, если я ожидаю его экспортировать, мне просто нужно добавить аргумент -d перед именем переменной, как в winenv -d WINDIR.

0 голосов
/ 01 декабря 2018

Как предложил Biswapriyo, вы должны использовать WSLENV.

  1. Откройте PowerShell.Затем установите JAVA_HOME на путь к вашей установке Java.

  2. В вашем случае запустите setx JAVA_HOME "D:\Program Files\Java\jdk-11.0.1"

Вы должны увидеть сообщение «УСПЕХ: Указанное значение было сохранено.

Затем запустите setx WSLENV "JAVA_HOME/p"

Вы должны увидеть сообщение об успехе снова.

Введите 'env' в командной строке WSL.

Вы должны увидеть, что JAVA_HOME правильно настроен на этом этапе.

Примечание. Если шаг 2 не работает, вы можете изменить путь на JAVA_HOME, включив в него '\ binпапка.

...