7

我曾经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的解决方案。

  • 有没有更好的技巧?
  • 更好的是,Java 中是否有rvm等价物?
4

7 回答 7

3

jdk_switcher尽管它对于某些路径是相当静态的ubuntu——应该很容易修改它以从其他路径运行。

有一个计划让RVM 2支持切换不仅仅是Ruby版本,你可以 在这里阅读更多关于它的信息。

知道链接的任何人都可以发表评论。

于 2013-04-26T22:08:08.640 回答
1

我不认为有这样的解决方案。请参阅此问题以获取带有符号链接的解决方案。

于 2013-04-26T17:11:03.947 回答
0

如果您使用 Debian 或派生的 GNU/Linux 发行版,您可以使用更新选项来设置当您键入 java 时当前正在运行的内容。

尝试输入

    update-alternatives --display java

这将向您展示您有哪些可用的替代品。这个命令是非破坏性的,也就是说,它不会改变任何东西。

    man update-alternatives

会给你工具的手册。您可能想要的命令是:

    update-alternatives --config java

这将为您提供一种简单的交互式方式来设置 java 程序。如果要编写脚本,也可以使用 --set 。

当然,不先跑男,你不应该相信我,因为人们有时会上网说谎。;)

编辑:我忘了,这个链接以一种很好的(如果特定于 Vi)的方式介绍了更新替代方案。

于 2014-05-20T16:35:04.600 回答
0

您可以安装任意数量的 Java 版本。只需安装到您选择的文件夹并使用一些约定。

如果您想一次性使用特定版本,请使用完整路径运行它(例如):

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

或者

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

如果您想更改为仅使用它,请更改路径以将所需的版本放在前面。路径可能类似于上面显示的路径。

请务必更改 JAVA_HOME 以及包含对 java 位置的引用的任何其他环境设置。

请注意,某些工具具有关于使用哪个 java 版本的内部配置。Eclipse 就是一个很好的例子。您必须设置 JVM 列表,然后为每个项目或所有项目选择一个。

于 2013-04-26T16:37:36.840 回答
0

现在,我正在使用jdk-manager,一个小 bash 脚本来管理多个JDKS安装。

于 2013-05-18T11:09:26.450 回答
0

我编写了自己的脚本来管理 java 版本。我使用一些需要 Oracle Java 并且通常是最新版本的站点,所以我不能使用 apt/aptitude,因此不能使用 update-alternatives 或 jdk-manager(它使用 update-alternatives)。

这是我的脚本。我不是专业开发的,所以它可能是一团糟,但它符合我的目的。它只考虑存储在 /usr/lib/jvm 中的 java 版本。

#!/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
于 2013-07-31T21:02:26.853 回答
0

对于 Linux,您不仅可以使用 update-alternatives 设置 java、javac 和其他二进制文件的路径,还可以设置您的 JAVA_HOME。由于它所做的只是管理链接,因此您可以安装一个指向您的 jdk 目录的链接,然后将 JAVA_HOME 设置为指向该链接。例如,“update-alternatives --install /usr/lib/jdk jdk /path/to/jdk8 1”将安装一个指向您的 jdk 目录的链接。然后,您在 .bashrc、.profile 或您用来设置环境变量的任何文件中添加“将 JAVA_HOME 导出到 /usr/lib/jdk”,并且当您使用更新切换时,JAVA_HOME 将指向您以 jdk 名称安装的任何替代文件-alternatives --config jdk。如果您已经为 java 可执行文件使用了替代品,则可以在 java 使用时使用 --slave 来制作 jdk。

于 2015-04-24T23:41:56.327 回答