2013-04-26 42 views
6

Tôi từng có nhiều JDK cài đặt trên máy Linux của tôi, và tôi muốn chuyển đổi từ một phiên bản khác từ dòng lệnh (Tôi sử dụng để thay đổi JAVA_HOME tôi bằng tay):Có trình quản lý phiên bản Java nào không?

Đây là cách tiếp cận hiện tại của tôi:

I source a ~/.paths trong số .bashrc.

.paths chứa tất cả JDK được cài đặt trên máy của tôi.

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 

Khi tôi muốn t chuyển sang JDK8, tôi sửa đổi biến JDK_HOME đến điểm trên JDK8 trong tập tin, và tôi re-source tập tin .paths tôi.

Tôi biết rằng IDE có thể quản lý nhiều JDK dễ dàng, nhưng tôi muốn một giải pháp như rvm.

  • Có mẹo nào tốt hơn không?
  • Tốt hơn, Có tương đương với rvm trong Java không?
+0

bản sao có thể có của [Trình quản lý phiên bản JVM] (http://stackoverflow.com/questions/2463936/jvm-version-manager) –

Trả lời

3

jdk_switcher mặc dù nó khá tĩnh đối với một số đường dẫn ubuntu - sẽ dễ dàng sửa đổi nó để chạy từ các đường dẫn khác.

Có một kế hoạch để thực hiện RVM 2 hỗ trợ chuyển đổi nhiều hơn sau đó chỉ Ruby phiên bản, bạn có thể đọc thêm về nó here.

bất kỳ ai có liên kết đều có thể nhận xét.

+0

kế hoạch 'RVM2' trông đầy hứa hẹn, nhờ @mpapis để đề cập đến. – tarrsalah

0

Bạn có thể cài đặt nhiều phiên bản Java tùy thích. Chỉ cần cài đặt vào một thư mục bạn chọn và sử dụng một số quy ước.

Nếu bạn muốn chắc một thời gian sử dụng một phiên bản đặc biệt chạy nó với một đường dẫn đầy đủ (ví dụ):

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

hoặc

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

Nếu bạn muốn thay đổi để chỉ sử dụng nó, thay đổi đường dẫn của bạn để đặt phiên bản bạn muốn ở phía trước. Đường dẫn có thể giống với đường dẫn được hiển thị ở trên.

Đảm bảo thay đổi JAVA_HOME và mọi cài đặt môi trường khác bao gồm tham chiếu đến vị trí java.

Lưu ý rằng một số công cụ có cấu hình nội bộ để sử dụng phiên bản java nào. Eclipse là một ví dụ tốt. Bạn phải thiết lập một danh sách các JVM và sau đó chọn một cho mỗi dự án hoặc cho tất cả các dự án.

1

Tôi không nghĩ có giải pháp như vậy. Xem điều này question với giải pháp có liên kết tượng trưng.

0

Hiện tại, tôi đang sử dụng jdk-manager, một tập lệnh bash nhỏ để quản lý nhiều cài đặt JDKS.

0

Tôi đã viết tập lệnh của riêng mình để quản lý các phiên bản java. Tôi sử dụng một số trang web yêu cầu Oracle Java và thường là phiên bản mới nhất, vì vậy tôi không thể sử dụng apt/aptitude và do đó không thể sử dụng các lựa chọn thay thế cập nhật hoặc jdk-manager (sử dụng các lựa chọn thay thế cập nhật).

Đây là tập lệnh của tôi. Tôi không phát triển chuyên nghiệp, vì vậy nó có thể là một mớ hỗn độn, nhưng nó phục vụ cho mục đích của tôi. Nó chỉ xem xét các phiên bản java được lưu trữ trong/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 
0

Nếu bạn sử dụng Debian hoặc phân phối GNU/Linux có nguồn gốc, bạn có thể sử dụng các lựa chọn cập nhật để thiết lập những gì hiện đang chạy khi bạn nhập java.

Hãy thử gõ

update-alternatives --display java 

Điều đó sẽ cho bạn thấy những gì thay thế bạn có sẵn. Lệnh này không phá hoại, nghĩa là nó không thay đổi bất cứ điều gì.

man update-alternatives 

Sẽ cung cấp cho bạn hướng dẫn sử dụng cho công cụ. Lệnh bạn có thể sẽ muốn mặc dù là:

update-alternatives --config java 

Mà sẽ cung cấp cho bạn một cách tương tác đơn giản của thiết lập các chương trình java. Bạn cũng có thể sử dụng --set nếu bạn muốn kịch bản nó.

Tất nhiên, bạn không nên tin tưởng tôi mà không cần chạy người đàn ông đầu tiên, bởi vì mọi người đôi khi đi trên Internet và nói dối. ;)

EDIT: Tôi quên, this link giới thiệu các lựa chọn thay thế cập nhật theo cách tốt (nếu Vi cụ thể).

0

Đối với Linux, bạn có thể sử dụng các lựa chọn thay thế cập nhật để không chỉ đặt đường dẫn đến java, javac và các tệp nhị phân khác mà còn là JAVA_HOME của bạn. Vì tất cả những gì nó làm là quản lý các liên kết, bạn có thể cài đặt một liên kết đến các thư mục jdk của bạn và sau đó đặt JAVA_HOME để trỏ đến liên kết đó. Ví dụ: "các tùy chọn thay thế cập nhật - cài đặt/usr/lib/jdk jdk/đường dẫn/đến/jdk8 1" sẽ cài đặt liên kết đến thư mục jdk của bạn. Sau đó bạn thêm "xuất JAVA_HOME vào/usr/lib/jdk" trong .bashrc, .profile, hoặc bất kỳ tệp nào bạn sử dụng để đặt biến môi trường và bất kỳ thay thế nào bạn cài đặt dưới tên jdk sẽ được trỏ đến bởi JAVA_HOME khi bạn chuyển đổi với bản cập nhật -những người bên ngoài --config jdk. Nếu bạn đang sử dụng các lựa chọn thay thế cho các tệp thi hành java, bạn có thể sử dụng --slave để tạo jdk bất cứ khi nào java thực hiện.

Các vấn đề liên quan