Есть ли какой-нибудь менеджер версий Java?


Раньше у меня было несколько JDK установленных на моей машине Linux, и мне нравится переключаться с одной версии на другую из командной строки ( я использовал, чтобы изменить мою JAVA_HOME вручную):

Вот мой текущий подход:

Я source а ~/.paths в моем .bashrc.

В .paths содержатся все JDK, установленные на моей машине.

JDK7="~/local/jdk1.7.0_15"
JDK8="~/local/jdk1.8.0"
// I use Jdk 7 by default 
JDK_HOME=$JDK7;     
// including $JDK_HOME/bin to the $PATH

Когда я хочу переключиться на JDK8, я изменяю переменную JDK_HOME, чтобы указать на JDK8 в файле, и я re-source Мой .paths файл.

Я знаю. это IDE может легко управлять несколькими JDK, но я хочу rvm подобное решение.

    Есть ли какой-нибудь лучший трюк ?
  • лучше больше, есть ли какой-либо эквивалент для rvm в Java ?
7 6

7 ответов:

Есть jdk_switcher, хотя он довольно статичен для некоторых ubuntu путей - его должно быть легко модифицировать для запуска с других путей.

Есть план сделать RVM 2 поддержку переключения больше, чем просто Ruby версии, вы можете прочитать больше об этом здесь.

Любой, у кого есть ссылка, может прокомментировать.

Я не думаю, что есть такое решение. Видишь это Вопрос к решению с символическими ссылками.

Вы можете установить столько версий Java, сколько захотите. Просто установите в папку по вашему выбору и используйте некоторые соглашения.

Если вы хотите использовать определенную версию один раз, запустите ее с полным путем (например):

>C:\java\jdk-6u35\bin\java.exe

Или

>/java/jdk-6u35/bin/java.exe

Если вы хотите изменить, чтобы просто использовать его, измените свой путь, чтобы поставить версию, которую вы хотите, на передний план. Путь может быть похож на тот, что показан выше.

Обязательно измените JAVA_HOME, а также любую другую среду параметры, включающие ссылку на расположение java.

Обратите внимание, что некоторые инструменты имеют внутреннюю конфигурацию относительно того, какую версию java использовать. Хороший пример-затмение. Вы должны настроить список ваших JVM, а затем выбрать один для каждого проекта или для всех проектов.

Теперь я использую JDK-manager, небольшой скрипт bash для управления несколькими установками JDKS.

Я написал свой собственный скрипт для управления версиями java. Я использую некоторые сайты, которые требуют Oracle Java и обычно последней версии, поэтому я не могу использовать apt/aptitude и поэтому не могу использовать update-alternatives или JDK-manager (который использует update-alternatives).

Вот мой сценарий. Я не развиваюсь профессионально, так что это, вероятно, беспорядок, но это служит моим целям. Он учитывает только версии java, хранящиеся в файле /usr / lib / jvm.

#!/bin/bash

# the proper way....
# + update: update-alternatives only works for versions installed by apt or aptitude
# ... same for jdk-manager (uses update-alternatives to do the heavy lifting)
#echo "The proper way is:"
#echo "$ update-alternatives --config java"

#exit

# the rest is (no longer) depreciated....

echo "The current default java is $(readlink --canonicalize `which java`)"

PS3='Select Java to install: '
options=( $(find /usr/lib/jvm -iname java) )
noptions=${#options[@]}
(( loption=noptions-1 ))
options[${#options[@]}]="Quit"

select opt in "${options[@]}"
do
  for i in $(seq 0 $loption); do
     [ "$opt" == "${options[$i]}" ] && \
        javapath=${options[$i]}
  done
  if [ "$javapath" ]; then
    break
  fi
  if [ "$opt" == "Quit" ]; then
        echo "Nothing installed."; 
        exit
  else 
        echo "Invalid option. Try another one.";
        continue
  fi
done


# remove the old link (might be superfluous)
#rm -vf -- "$link"

# set new link (symbolic, force, verbose)
sudo ln -sTfv "$javapath" "/usr/bin/java"

default_java_dir=$(echo "$javapath" | grep --only-matching --regexp="\/usr\/lib\/jvm\/[^\/]*")
sudo ln -sTfv "$default_java_dir" "/usr/lib/jvm/default-java"

java_bin_dir=$(echo "$javapath" | sed 's/[^\/]*$//')
echo $java_bin_dir
[ -f "${java_bin_dir}javac" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javac"
[ -f "${java_bin_dir}javadoc" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javadoc"
[ -f "${java_bin_dir}javafxpackager" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javafxpackager"
[ -f "${java_bin_dir}javah" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javah"
[ -f "${java_bin_dir}javap" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javap"
[ -f "${java_bin_dir}java-rmi.cgi" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}java-rmi.cgi"
[ -f "${java_bin_dir}java_vm" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}java_vm"
[ -f "${java_bin_dir}javaws" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javaws"

find_dir=$(dirname "$java_bin_dir")
pluginpath=$(find "$find_dir" -name libnpjp2.so)

#exit

echo -n "Install $pluginpath as the Java plugin? [y/N]: "
read
response=$(echo $REPLY | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/')

if [ "${response:0:1}" == "Y" ]; then

  # directories for plugins

  plugin_dirs="/usr/lib/firefox/plugins
                     /usr/lib/firefox-addons/plugins
                     /usr/lib/mozilla/plugins
                     /opt/google/chrome
                     /home/james/.mozilla/plugins"


  # first, clean out anything we might have improperly installed already
  echo "Using 'sudo' to remove any installed java plugins..."

  for pdir in $plugin_dirs; do
     sudo rm --verbose --force "$pdir/libjavaplugin_oji.so" "$pdir/libnpjp2.so" "$pdir/IcedTeaPlugin.so"
  done

  # okay, trying brute force and awkwardness....
  echo "Using 'sudo' to install \"$pluginpath\" in several places..."

  for pdir in $plugin_dirs; do
     sudo ln --symbolic --verbose --force "$pluginpath" "$pdir"
  done
fi

exit

Если вы используете Debian или производный дистрибутив GNU / Linux, вы можете использовать альтернативные обновления, чтобы установить, что в данный момент выполняется при вводе java.

Попробуйте набрать

    update-alternatives --display java
Это покажет вам, какие альтернативы у вас есть. Эта команда неразрушающая, то есть она ничего не меняет.
    man update-alternatives

Даст вам руководство для инструмента. Команда, которую вы, вероятно, захотите, хотя:

    update-alternatives --config java

Который даст вам простой, интерактивный способ установки программа Java. Вы также можете использовать --set, если хотите написать сценарий.

Конечно, вы не должны доверять мне без запуска man first, потому что люди иногда заходят в Интернет и говорят неправду. ;)

EDIT: я забыл, эта ссылка вводит Update-alternatives хорошим (если Vi специфическим) способом.

Для Linux вы можете использовать update-alternatives не только для установки путей к java, javac и другим двоичным файлам, но и для вашего JAVA_HOME. Поскольку все, что он делает, это управляет ссылками, вы можете установить ссылку на каталоги jdk, а затем установить JAVA_HOME, чтобы указать на эту ссылку. Например, "update-alternatives --install /usr / lib /jdk jdk/path/to / jdk8 1" установит ссылку на ваш каталог jdk. Затем вы добавляете "экспорт JAVA_HOME в /usr / lib/jdk".bashrc следующее, .профиль или любой файл, который вы используете для установки окружения переменные и любые альтернативы, устанавливаемые под именем jdk, будут указываться JAVA_HOME при переключении с update-alternatives --config jdk. Если вы уже используете Альтернативы для исполняемых файлов java, вы можете использовать --slave для создания jdk всякий раз, когда это делает java.