2

Я хочу запускать разные версии Java на одном компьютере (Linux Mint 17) по умолчанию на Java 7. Поэтому я поместил это в /etc/environment:

JAVA_HOME="/tools/java/java7"
JAVA7_HOME="/tools/java/java7"
JAVA8_HOME="/tools/java/java8"

И в /etc/profile:

export PATH="${JAVA_HOME}/bin:...:${PATH}"

Я ожидаю, что java -version будет 8, если JAVA_HOME равен /tools/java/java8 и 7, если он установлен на Java 7.

Итак, я бегу:

┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─$ export JAVA_HOME=/tools/java/java8 && java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Server VM (build 24.60-b09, mixed mode)

А также

┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─! $ export JAVA_HOME=/tools/java/java7 && java -version
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Server VM (build 24.60-b09, mixed mode)

Независимо от того, что JAVA_HOME $PATH выглядит так:

┌[madhead@madhead-mint:~/Projects/thymeleaf]
└─$ echo $PATH
/home/madhead/bin:/usr/local/bin:/tools/java/java7/bin:...:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

И export JAVA_HOME=/tools/java/java8 && which java выводит java /tools/java/java7/bin/java .

Итак, похоже, что настоящая замена появляется, когда я вхожу в систему. Можно ли изменить это поведение? Было бы здорово, если бы я мог решить эту проблему с помощью переменных env, а не с помощью символических ссылок.

1 ответ1

4

Вы правы, что замена происходит, когда определен PATH. Это просто обойти. Определите функцию bash/zsh :

javaswitch() { [[ "$1" =~ ^[0-9]$ ]] && export  PATH=${PATH/java[0-9]/java$1}; }

Теперь в любое время, когда вы захотите переключить Java-версии, запустите:

javaswitch 7

Или же:

javaswitch 8

Чтобы сделать определение javaswitch постоянным, поместите его в файл ~/.bashrc .

Как это устроено

  • [[ "$1" =~ ^[0-9]$ ]]

    Для защиты от опечаток этот тест проверяет, что аргумент является числом. Если это не так, то никаких изменений не производится.

    Если вы уверены, что будете использовать только версии 7 или 8, используйте вместо этого:

    [[ "$1" =~ ^[7-8]$ ]]
    
  • export PATH=${PATH/java[0-9]/java$1}

    При этом используется замена шаблона для обновления PATH на новый номер версии.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .