Cách xóa chính xác OpenJDK / OpenJRE và đặt SunJDK / SunJRE làm Mặc định


49

Ubuntu dường như ủng hộ OpenJDK / JRE rất nhiều so với Sun JDK / JRE. Ngay cả sau khi tôi đã cài đặt Sun JRE, JDK và plugin và dành một chút thời gian để lấy ra các gói liên quan đến OpenJDK, apt-get đã cài đặt chúng trở lại với một số gói như một phụ thuộc. Hành vi này có thể được sửa chữa theo hướng có lợi cho các gói Sun Java không? Tôi muốn có một và chỉ một ngăn xếp Java được cài đặt (vâng, đó là một chút OCD , nhưng tôi muốn hệ thống của mình sạch sẽ) và muốn nó là Sun Java.

Cập nhật: như Marcos Roriz lưu ý, vấn đề dường như nằm ở default-jre (mà các gói phụ thuộc Java sử dụng để phụ thuộc) chỉ vào OpenJDK, vì vậy câu hỏi dường như là về cách hack default-jre / default-jdk để trỏ đến Sun Java.


xin vui lòng bất kỳ ai cập nhật câu trả lời với oracle jdk ..
LoveToCode

Câu trả lời:


35

Cài đặt Sun Java trên các phiên bản cũ hơn của Ubuntu (9,10 trở xuống)

Tôi nghĩ rằng tôi đã gặp vấn đề tương tự một lần khoảng ba năm trước với Ubuntu 8.04. Có một vấn đề kỳ lạ khi sử dụng openjre và vấn đề đã được giải quyết bằng cách sử dụng phiên bản sun jre. Dưới đây là các bước trong thiết bị đầu cuối áp dụng cho các phiên bản dưới 10.04, vì bắt đầu từ 10.04 mặt trời java đã bị loại bỏ và được thay thế bằng openjre:

sudo apt-get remove openjdk-6-jre default-jre default-jre-headless

sudo apt-get install sun-java6-jre sun-java6-bin sun-java6-plugin sun-java6-fonts

(Mọi thứ liên quan đến Sun java. Chỉ để đảm bảo)

Sau đó, nếu bạn loại bỏ openjdk thì bạn sẽ chỉ có sun java. Nếu bạn không loại bỏ nó thì bạn có cả hai. Để thay đổi từ cái này sang cái khác làm điều này:

sudo update-java-alternatives -l - Điều này sẽ cho bạn thấy danh sách các công cụ java bạn có thể sử dụng.

Tên của thay thế java là tên ở bên trái, ví dụ như openjdk sẽ xuất hiện như thế này:

java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk

Và bạn sẽ thiết lập hệ thống thành openjdk như thế này:

sudo update-java-alternatives -s java-6-openjdk

Nếu bạn muốn sử dụng Sun thì bạn sẽ làm điều này (Sau khi cài đặt các gói mặt trời):

sudo update-java-alternatives -s java-6-sun

Nếu bạn muốn sử dụng phiên bản java 7, chỉ cần thay đổi số 6 được đề cập ở trên cho 7. Ví dụ: nếu tôi muốn cài đặt phiên bản openjre 7, tôi sẽ:

sudo apt-get install openjdk-7-jre default-jre default-jre-headless

Cài đặt Sun Java trên các phiên bản Ubuntu mới hơn (10.04 trở lên)

Mở terminal và gõ như sau:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update   
sudo apt-get upgrade   
sudo apt-get install oracle-java7-installer

Điều đó sẽ cài đặt phiên bản Sun Java trên hệ thống của bạn. Để thay đổi nó, chỉ cần làm như sau trong trường hợp bạn có các lựa chọn thay thế java khác:

sudo update-java-alternatives -s java-7-oracle  

Nếu bạn muốn cài đặt tự động, hãy gõ như sau:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

sau đó chỉ cần làm như sau để đặt các biến môi trường mặc định:

sudo apt-get install oracle-java7-set-default

Lưu ý rằng PPA bao gồm các phiên bản 6, 7 và 8. Vì vậy, bạn có thể cài đặt bất kỳ trong số chúng bằng cách thay đổi số trong dòng cài đặt, ví dụ:

sudo apt-get install oracle-java8-installer

Sẽ cài đặt Java 8. Sau khi cài đặt phiên bản Java bạn muốn sử dụng và đặt phiên bản về mặc định bằng update-java-alternativeslệnh, bạn có thể kiểm tra phiên bản nào bạn đang sử dụng bằng cách nhập như sau:

java -version

Nó sẽ cho bạn thấy phiên bản mặc định bạn đang sử dụng tại thời điểm đó.

Tôi cũng muốn đề cập rằng OpenJRE / JDK đã đi một chặng đường dài từ 2 hoặc 3 năm trước khi nó có nhiều vấn đề đã được giải quyết bằng cách thay đổi thành Sun Java.


11

Tôi nghĩ vấn đề là một số gói Java dựa vào default-jre mà trỏ đến openjdk-jre. Tôi không nghĩ có một cách dễ dàng để gỡ cài đặt openjdk vĩnh viễn. Có một điều là bạn có thể sẽ gặp lại openjdk khi bạn cài đặt gói / chương trình java.

Nhưng nếu bạn sẵn sàng có cả hai, có dễ dàng đặt các chương trình thời gian chạy java (java, javah, javap, v.v.) để thực hiện không. Làm đi:

sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts

hoặc nếu bạn là một nhà phát triển java (cài đặt sdk và srcs):

sudo apt-get install sun-java6-jdk sun-java6-jre sun-java6-source

Và đặt nó làm chương trình mặc định với:

sudo update-java-alternatives -s java-6-sun

1
Vâng, tôi tin rằng đây là về default-jre. Không, tôi thực sự không muốn có cả JDK của Sun và Open - đây là câu hỏi về - để có một và chỉ và để nó là Sun JDK. Có cách nào để hack default-jre để trỏ đến Sun JRE không?
Ivan

Đúng, tôi sẽ cố gắng xây dựng lại default-jregói để trỏ đến sun-java tối nay. Ngay bây giờ tôi đang làm việc.
Marcos Roriz Junior

6

Các .jdk1.6.0_23.jinfotập tin nên là một danh sách các chương trình được cung cấp và đường dẫn của chúng. Có một tiêu đề mô tả theo sau là một dòng trống. Sau đó, một danh sách các chương trình theo định dạng ba trường: loại mục nhập (jre / jkd / plugin); tên chương trình; và con đường. Bạn nên có một số tệp jinfo bạn có thể sử dụng để xem nội dung sẽ như thế nào. Điều này có thể được sử dụng bởi cơ chế thay thế để xác định liên kết nào sẽ tạo. Người đứng đầu gói Sun của tôi là.

tên = java-6-mặt trời-1.6.0.22
bí danh = java-6-mặt trời
ưu tiên = 63
phần = không miễn phí

jre ControlPanel / usr / lib / jvm / java-6-sun / jre / bin / ControlPanel
jre java / usr / lib / jvm / java-6-sun / jre / bin / java
jre java_vm / usr / lib / jvm / java-6-sun / jre / bin / java_vm

Nếu bạn muốn ghi đè các lệnh Java mặc định mà không sử dụng cơ chế thay thế, hãy đặt đường dẫn Java của bạn lên trước / usr / bin trong đường dẫn của bạn.

Khi thực hiện cài đặt thủ công, tôi cài đặt Java /opt. cho cài đặt của bạn, tôi sẽ cài đặt trong /opt/jdk1.6.0_23. Sau đó, tôi đặt đường dẫn $JAVA_HOME/binở đầu PATHbiến của tôi .

EDIT: Đây là toàn bộ tập tin Sun. Lưu ý .java-6-sun.jinfolà một liên kết tượng trưng đến .java-6-sun-1.6.0.22.jinfo.

tên = java-6-mặt trời-1.6.0.22
bí danh = java-6-mặt trời
ưu tiên = 63
phần = không miễn phí

jre ControlPanel / usr / lib / jvm / java-6-sun / jre / bin / ControlPanel
jre java / usr / lib / jvm / java-6-sun / jre / bin / java
jre java_vm / usr / lib / jvm / java-6-sun / jre / bin / java_vm
jre javaws / usr / lib / jvm / java-6-sun / jre / bin / javaws
jre jcontrol / usr / lib / jvm / java-6-sun / jre / bin / jcontrol
jre keytool / usr / lib / jvm / java-6-sun / jre / bin / keytool
jre pack200 / usr / lib / jvm / java-6-sun / jre / bin / pack200
jre chính sách / usr / lib / jvm / java-6-sun / jre / bin / chính sách
jre rmid / usr / lib / jvm / java-6-sun / jre / bin / rmid
jre rmiregistry / usr / lib / jvm / java-6-sun / jre / bin / rmiregology
jre unpack200 / usr / lib / jvm / java-6-sun / jre / bin / unpack200
jre orbd / usr / lib / jvm / java-6-sun / jre / bin / orbd
jre servertool / usr / lib / jvm / java-6-sun / jre / bin / servertool
jre tnameserv / usr / lib / jvm / java-6-sun / jre / bin / tnameserv
jre jexec / usr / lib / jvm / java-6-sun / jre / lib / jexec
jdk HtmlConverter / usr / lib / jvm / java-6-sun / bin / HtmlConverter
jdk appletviewer / usr / lib / jvm / java-6-sun / bin / appletviewer
jdk apt / usr / lib / jvm / java-6-sun / bin / apt
jdk extcheck / usr / lib / jvm / java-6-sun / bin / extcheck
jdk idlj / usr / lib / jvm / java-6-sun / bin / idlj
jdk jar / usr / lib / jvm / java-6-sun / bin / jar
jdk jarsigner / usr / lib / jvm / java-6-sun / bin / jarsigner
jdk javac / usr / lib / jvm / java-6-sun / bin / javac
jdk javadoc / usr / lib / jvm / java-6-sun / bin / javadoc
jdk javah / usr / lib / jvm / java-6-sun / bin / javah
jdk javap / usr / lib / jvm / java-6-sun / bin / javap
jdk jconsole / usr / lib / jvm / java-6-sun / bin / jconsole
jdk jdb / usr / lib / jvm / java-6-sun / bin / jdb
jdk jhat / usr / lib / jvm / java-6-sun / bin / jhat
jdk jinfo / usr / lib / jvm / java-6-sun / bin / jinfo
jdk jmap / usr / lib / jvm / java-6-sun / bin / jmap
jdk jps / usr / lib / jvm / java-6-sun / bin / jps
jdk jrunscript / usr / lib / jvm / java-6-sun / bin / jrunscript
jdk jsadebugd / usr / lib / jvm / java-6-sun / bin / jsadebugd
jdk jstack / usr / lib / jvm / java-6-sun / bin / jstack
jdk jstat / usr / lib / jvm / java-6-sun / bin / jstat
jdk jstatd / usr / lib / jvm / java-6-sun / bin / jstatd
jdk bản địa 2ascii / usr / lib / jvm / java-6-sun / bin / igen2ascii
jdk rmic / usr / lib / jvm / java-6-sun / bin / rmic
jdk schemagen / usr / lib / jvm / java-6-sun / bin / schemagen
jdk serialver / usr / lib / jvm / java-6-sun / bin / serialver
jdk wsgen / usr / lib / jvm / java-6-sun / bin / wsgen
jdk wsimport / usr / lib / jvm / java-6-sun / bin / wsimport
jdk xjc / usr / lib / jvm / java-6-sun / bin / xjc
plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
plugin mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so

Tôi chưa cài đặt java vì vậy tôi không có gì liên quan đến nó, không cài đặt gì, không có tệp .jinfo, v.v. Tôi sẽ giữ nó như vậy. Đó là lý do tại sao tôi muốn xem toàn bộ nội dung của tệp .jinfo cho JDK của Mặt trời.
Nhím

Tôi đã thêm tập tin mặt trời .jinfo đầy đủ.
BillThor

6

Xóa openjdk và icedtea:

apt-get purge openjdk-\* icedtea-\* icedtea6-\*

thêm phần sau vào /etc/apt/source.list

deb http://ppa.launchpad.net/webupd8team/java/ubuntu YOUR_UBUNTU_VERSION_HERE main

cài đặt Sun / Oracle JRE hoặc JDK:

apt-get install oracle-jdk7-installer
apt-get install oracle-java7-installer 

2
Và sau này, bạn hoàn toàn không có Java ... Câu hỏi thực sự đề cập đến việc ai sẽ thay thế người này bằng người khác, chứ không phải làm thế nào để loại bỏ OpenJDK khỏi hệ thống của bạn. Thêm một chút thông tin vào câu trả lời của bạn, câu hỏi không thể được trả lời chỉ bằng cách làm theo các bước sau.
Bruno Pereira

4

Tôi đã thêm dòng này vào tệp / etc / môi trường: JAVA_HOME = "/ usr / lib / jvm / jdk1.6.0_23" và thêm JAVA_HOME / bin vào biến PATH, NHƯNG HĐH vẫn không nhận ra lệnh java, nói nó không được cài đặt và cung cấp cho tôi gcj và openjdk.

Bạn đã kiểm tra nó chưa?

echo $JAVA_HOME 
echo $PATH

Nếu bạn không cần nó: Hủy cài đặt openjdk và gcj trong synap hoặc với apt-get.

apt-get remove gcj 
apt-get remove openjdk

Sau đó, tôi sẽ cấm java từ các lựa chọn thay thế, và chủ yếu làm như BillThor đề xuất, tại sao tôi lại đưa cho anh ấy một upvote.

which javac
which java

phải trỏ đến nơi bạn đã cài đặt java và nơi nó được tìm thấy trong PATH.


Tôi chưa cài đặt gcj hoặc openjdk ... Chỉ cần thử các whichlệnh và nó không in gì cả. Phát hiện ra rằng tôi đã quên biểu tượng $ trước biến JAVA_HOME trong PATH, tôi sẽ khởi động lại ngay bây giờ và xem nó diễn ra như thế nào.
Nhím

Khởi động lại PC, nhưng whichlệnh vẫn không hiển thị gì. Cả hai biến JAVA_HOME và PATH đều đúng: echo $ JAVA_HOME /usr/lib/jvm/jdk1.6.0_23 echo $ PATH $ JAVA_HOME / bin: / usr / local / sbin: / usr / local / bin: / us: usr / bin: / sbin: / bin: / usr / games Vấn đề có thể xảy ra ở đâu? Chỉnh sửa: GOD DAMN IT, tại sao không có ngắt dòng trong nhận xét ??
jicksiks

a) khởi động lại PC không cần thiết. Mở lại vỏ nên đủ, hoặc chủ yếu là relogin như người dùng. b) Nhìn vào bên trong sự giúp đỡ để định dạng trong các bình luận. Tôi thấy echo $PATH $JAVA_HOME/bin:/usr/local/sbin...nhưng trong kết quả $ JAVA_HOME phải được đánh giá - có gì đó không đúng hoặc báo cáo của bạn bị nhầm lẫn. c) Ngắt dòng: Chúng không có ở đó, do đó chúng tôi liên tục nhấn ENTER quá sớm và sau đó đồng hồ kêu, vì chỉnh sửa chỉ trong vài phút cho phép - tôi liên tục bước vào cái bẫy đó. Tôi ghét nó! :)
người dùng không xác định

Chà, biến JAVA_HOME nằm trong cùng một tệp (/ etc / môi trường), chỉ trong dòng đầu tiên. Có lẽ nó nên ở một nơi khác? Nó nhận ra nó khi tôi gõ echo $JAVA_HOMEmặc dù ...
jurchiks

Câu hỏi của tôi là: Có echo $PATHin $JAVA_HOME...hay nó in giá trị cho JAVA_HOME, tức là : /usr/lib/jvm/jdk1.6.0_23?
người dùng không xác định

3
  1. Mở Hệ thống-> Quản trị-> Trình quản lý gói Synaptic và sau đó xóa hoàn toàn OpenJDK.
  2. Phiên bản thử nghiệm gõ Java java -versiontrong shell (nó sẽ chỉ hiển thị Sun java)
  3. Thể loại sudo update-java-alternatives -l
  4. Bạn xong việc rồi. Bây giờ bạn chỉ có sun java được cài đặt và nó được thiết lập như jdk mặc định

và nó chỉ hoạt động nếu bạn đã cài đặt hai jdk và bạn muốn đặt sun-java làm môi trường mặc định


2

Sử dụng Ubuntu 10.10, có vẻ như bạn cần đánh dấu để loại bỏ libaccess-Bridge-java trước tiên trong Synaptic, sau đó đánh dấu openjdk-6-jre-headless.

Tôi đã kết thúc với một danh sách sẽ bị xóa:

ca-cert-java, icedtea-6-jre-cacao, libaccess-Bridge-java, libaccess-Bridge-java-jni, openjdk-6-jre, openjdk-6-jre-headless, openjdk-6-jre

Điều này đã làm việc nhưng nó đã để lại một thư mục /etc/java-6-openjdkphía sau với các loại tệp và thư mục con bên trong, mà tôi đã tách ra trong một thư mục mới. Không có tác dụng bất thường, vì vậy có lẽ nó chỉ là tàn dư còn sót lại.

Điều này để lại cho tôi Java mà tôi đã tải xuống trực tiếp từ trang web Java. Tuy nhiên, mặc dù đã đặt nó làm mặc định và tạo liên kết đến thư mục bổ trợ của Firefox, nhưng nó không còn hoạt động. Cài đặt sun-java6-jre và các gói liên quan gsfonts-x11, odbcinst, odbcinst1debian2, sun-java6-bin và unixodbc, thông qua Synaptic, đã thấy plugin Java bắt đầu hoạt động trở lại. Xóa liên kết trong thư mục plugin và thay thế nó bằng tệp libnpjp2.so thực tế không hoạt động. Việc sử dụng một liên kết đến các tệp libjavaplugin_oji.so trong các thư mục ns7 hoặc ns7-gcc29 trong Java được cài đặt qua Synaptic cũng không hoạt động. Điều này gợi ý cho tôi rằng để có được plugin Java mới nhất trong Firefox, người ta có thể làm theo các hướng dẫn trên trang web Java và rằng Java Java tích hợp của bất kỳ loại nào có mặt là cần thiết để chạy Java đã tải xuống, mà sau đó phụ thuộc vào hoạt động của nó trên các tệp xung quanh nó khi plugin đã được kích hoạt. Mặc dù hiểu biết đầy đủ về mã bao gồm Java và Linux sẽ được yêu cầu để thực sự giải quyết những bí ẩn của nó, có lẽ những thử nghiệm này rất hữu ích trong việc tìm ra lý do tại sao hai Java có thể cần thiết trong trường hợp này. Ít nhất cũng có thể loại bỏ tất cả Java, nếu có ai thấy nó hữu ích để làm như vậy.


2

Việc tôi làm trên các máy Ubuntu 10.10 mới là

  • thêm java-6-sun,
  • xóa openJDK (thêm sun Java trước nếu không một loạt thứ sẽ bị xóa như tomcat, v.v.)

Sau đó, nó là tốt cho tôi, không có phụ thuộc openJDK


java-6-sun không phải là gói mặc định của Ubuntu, hay là vậy?
Fabian Zeindl

2

Các câu trả lời cho câu hỏi này không làm việc cho tôi. Đó là, thất bại sau đây:

sudo apt-get purge sun-java5-jre sun-java6-font sun-java6-jre

Với lỗi:

Virtual packages like 'sun-java6-jre' can't be removed

Thay vào đó, hãy thử các hướng dẫn sau:

  1. Mở Trung tâm phần mềm Ubuntu .
  2. Tìm kiếm IcedTea.
  3. Xóa IcedTea Java Plug-in ( icedtea-6-jre-cacao), nếu nó được cài đặt.
  4. Chọn OpenJDK Java 7 Runtime.
  5. Nhấp vào Cài đặt.
  6. Đợi gói 41,6 MB tải xuống và cài đặt.

OpenJDK (IcedTea) hiện đã được cài đặt, điều này sẽ cho phép bạn (nếu bạn gặp lỗi này) tiếp tục cài đặt JDK của Oracle mà không gặp lỗi.

Xem thêm:


1

Đầu tiên: xóa plugin openjdk và icedtea.

sudo apt-get remove openjdk* icedtea*

Thứ hai: sao chép tệp .bin jdk vào / opt hoặc / usr / java và giải nén nó.

sudo cp jdk_1.16.0.bin /usr/java

Thứ ba: đặt một liên kết của tệp java tới / usr / bin /

ln -s /usr/java/jdk_1.6.0/bin/java /usr/bin/java
ln -s /usr/java/jdk_1.6.0/bin/javac /usr/bin/javac

cập nhật các lựa chọn thay thế bằng cách sử dụng cập nhật thay thế

Tạo một liên kết tượng trưng đến Trình cắm Java trong thư mục bổ trợ của Firefox.

Tạo một liên kết tượng trưng đến tệp libnpjp2.so của Trình cắm Java trong thư mục bổ trợ của Firefox:

   cd  

<Firefox>/plugins


 ln -s  

<JRE>/lib/i386/libnpjp2.so .

Hi vọng điêu nay co ich.


Bạn đã không bỏ lỡ một bước sau cp và trước khi liên kết? Và: Bạn đề xuất liên kết thủ công, nhưng có 45 tệp trong java / bin, hầu hết đều có thể thực thi được. Bạn có muốn tạo 25 liên kết tượng trưng? Tôi muốn thay đổi PATH.
người dùng không xác định

theo như tôi biết các bước là chính xác. bạn có thể tham khảo hướng dẫn trên trang cài đặt java của mặt trời (oracle's). Các bước trên làm việc cho tôi mặc dù!. cho tôi biết làm thế nào bạn có được cùng.
Ubuntuser
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.