2013-04-26 41 views
6

我曾经有多个JDKLinux机上安装了,我想切换从一个版本到另一个从所述命令行(I用于手动改变我JAVA_HOME):是否有任何Java版本管理器?

这是我的当前的方法:

I source a ~/.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 

当我想t开关来JDK8,我修改JDK_HOME变量在文件中指出的JDK8,我re-source.paths文件。

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

  • 有什么更好的把戏吗?
  • 更多更多,在Java中是否有与rvm等价的东西?
+0

[JVM版本管理器]的可能重复(http://stackoverflow.com/questions/2463936/jvm-version-manager) – 2014-12-08 10:38:33

回答

3

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

有一个计划,使RVM 2支持切换,不只是Ruby版本,你可以阅读更多关于它here

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

+0

了'RVM2'计划看起来很有希望,感谢@mpapis为提。 – tarrsalah 2013-04-26 23:37:30

0

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

如果你想一次性使用的特定版本(例如)一个完整的路径运行:

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

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

如果你想改变,只是使用它,改变你的路径,把你想要的版本放在前面。路径可能与上面显示的类似。

一定要更改JAVA_HOME以及包含对java位置的引用的任何其他环境设置。

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

1

我不认为有这样的解决方案。 请参阅此question以符合链接的解决方案。

0

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

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发行版,您可以使用更新替代设置什么是当前正在运行,当你输入java。

试着键入

update-alternatives --display java 

,会告诉你,你有什么可以替代。 这个命令是非破坏性的,也就是说,它不会改变任何东西。

man update-alternatives 

会给你这个工具的手册。 你可能会想虽然的命令是:

update-alternatives --config java 

,这将给你设置Java程序的简单,互动的方式。如果你想编写脚本,你也可以使用--set。

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

编辑:我忘了,this link引入了更好的选择(如果特定的方式)。

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 - 配置jdk。如果您正在使用java可执行文件的替代方法,那么只要有java,就可以使用--slave来创建jdk。

相关问题