有没有Java版本管理器?

7

我曾经在我的Linux机器上安装了多个JDK,并且喜欢通过命令行从一个版本切换到另一个版本(我曾经手动更改我的JAVA_HOME):

这是我的当前方法:

我在我的.bashrc中source一个~/.paths。

.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,然后重新加载我的.paths文件。

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

  • 有更好的技巧吗?
  • 更好的是,Java中是否有任何等效于rvm的东西?

可能是JVM版本管理器的重复问题。 - Ciro Santilli OurBigBook.com
7个回答

3

虽然jdk_switcher有些静态,只能在某些ubuntu路径下运行,但很容易修改它以从其他路径运行。

有一个计划使RVM 2支持切换不止Ruby版本,您可以在此处阅读更多信息。

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


“RVM2”计划看起来很有前途,感谢@mpapis的提及。 - Salah Eddine Taouririt

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

1
我认为没有这样的解决方案。 请查看问题,其中包含使用符号链接的解决方案。

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

0
如果您使用Debian或派生的GNU/Linux发行版,可以使用update alternatives来设置在键入java时当前正在运行的内容。
尝试键入
    update-alternatives --display java

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

    man update-alternatives

我会给你这个工具的手册。 但是你可能需要的命令是:

    update-alternatives --config java

这将为您提供一种简单、交互式的设置Java程序的方式。如果您想要脚本化,也可以使用--set选项。

当然,在运行man之前不应该相信我,因为有时人们会上网撒谎。 ;)

编辑:我忘了,此链接以良好的方式(如果是Vi特定的话)介绍了update-alternatives。


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”,当您使用update-alternatives --config jdk切换时,任何您安装的替代方案都将被指向为JAVA_HOME下的jdk。如果您已经在使用alternatives来执行java可执行文件,则可以使用--slave使jdk随java一起运行。


0

你可以安装任意多个Java版本,只需要选择一个文件夹进行安装并遵循一些惯例即可。

如果你想临时使用某个特定版本,请使用该版本的完整路径运行(例如):

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

或者

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

如果你想改变使用的版本,只需将你想要的版本放在路径的最前面即可。路径可能类似于上面显示的内容。

确保同时更改JAVA_HOME以及任何其他包含对Java位置引用的环境设置。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接