有没有Java版本管理器?

时间:2013-04-26 16:32:09

标签: java linux shell build rvm

我以前在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 {my} .paths文件

我知道IDE可以轻松管理多个JDK,但我想要一个类似rvm的解决方案。

  • 有没有更好的伎俩?
  • 更好的是,Java中有rvm的等价物吗?

7 个答案:

答案 0 :(得分:3)

jdk_switcher虽然它对某些ubuntu路径来说是非常静态的 - 但应该很容易将其修改为从其他路径运行。

我们计划让RVM 2支持切换更多Ruby个版本,您可以阅读更多相关信息here

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

答案 1 :(得分:1)

我认为没有这样的解决方案。 请参阅此question以查找带符号链接的解决方案。

答案 2 :(得分:0)

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

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

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

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

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分: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

答案 5 :(得分:0)

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

尝试输入

    update-alternatives --display java

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

    man update-alternatives

将为您提供该工具的手册。 您可能想要的命令是:

    update-alternatives --config java

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

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

编辑:我忘了,this link以良好的(如果特定于Vi)方式引入更新替代品。

答案 6 :(得分: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或用于设置环境变量的任何文件中添加“export JAVA_HOME to / usr / lib / jdk”,当您使用更新切换时,JAVA_HOME将指向您以jdk名称安装的任何替代方法 - 替代品--config jdk。如果你已经为java可执行文件使用了替代品,你可以使用--slave在每次java时使用jdk。