Ubuntu: OpenJDK 8 - Không thể định vị gói


95

Vì vậy, tôi vừa cài đặt Ubuntu và đây là lần đầu tiên tôi làm việc trong môi trường Linux, vì vậy hãy cố gắng chấp nhận sự không ngoan của tôi ở đây.

Dù sao, tôi đã tải xuống Java 8 JDK trực tiếp từ Oracle, nhưng tôi hiểu rằng cũng có OpenJDK cho Java 8. Tôi có hai câu hỏi.

  1. Sự khác biệt giữa phiên bản Oracle và OpenJDK. Ưu / Nhược điểm?

  2. Khi tôi thử và tải OpenJDK 8, tôi không thể. Tôi đang dán lệnh đầu cuối và thông báo lỗi mà tôi nhận được ở đây, mong lời khuyên. Một lần nữa, rất mới đối với Linux, đã có trên bản phân phối Linux đầu tiên của tôi chưa đầy một giờ ở đây vào thời điểm này.

    user@computer:~/Java$ sudo apt-get install openjdk-8-jdk
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    E: Unable to locate package openjdk-8-jdk

Bất kỳ trợ giúp sẽ được đánh giá cao. Trong khi chờ đợi, tôi sẽ sử dụng gói Oracle. Cảm ơn.

Biên tập:

Vì vậy, bây giờ tôi có một vấn đề mới. Tôi đã cài đặt OpenJDK 7, nó đi kèm với Maven và chỉ cần cài đặt trước khi tôi nhận ra mình đang nhận được một thỏa thuận hai tặng một. Bây giờ tôi có JDK 7, Eclipse và Maven, và tất cả chúng đều hoạt động, nhưng tôi bị mắc kẹt trên JDK 7 thay vì 8.

Mình thấy có link bên dưới, định sáng mai vào xem, 2h sáng mà mệt quá. Bất kỳ lời khuyên nào khác cho vấn đề mới này sẽ được đánh giá cao, nếu không, tôi chắc chắn sẽ kiểm tra liên kết đó đầu tiên vào buổi sáng.



Bạn đang chạy phiên bản Ubuntu nào? Một vài phiên bản mới nhất đã có sẵn nó dưới dạng tùy chọn cài đặt.
Makoto

Liên kết của Stephen sẽ giải quyết vấn đề của bạn :)
Juned

Cảm ơn. Bây giờ là 2 giờ sáng, vì vậy tôi sẽ đi ngủ, nhưng tôi sẽ kiểm tra liên kết vào buổi sáng. Tôi đã thêm một chỉnh sửa cho câu hỏi của mình với một vấn đề bổ sung, nếu bạn có thể xem qua thì điều đó thật tuyệt. Nếu liên kết / câu trả lời hiện có cũng giúp được việc đó, tôi xin lỗi vì đã quá mệt mỏi để xem nó ngay bây giờ, tôi sẽ kiểm tra nó vào buổi sáng.
dùng2223059

Tôi tin rằng tôi đang sử dụng ubuntu 14.10. Bất kể bản phát hành dài hạn gần đây nhất là gì.
dùng2223059

Câu trả lời:


121

CẬP NHẬT : cài đặt không có đặc quyền root bên dưới


Tôi khuyên bạn không nên cài đặt các gói theo cách thủ công trên hệ thống ubuntu nếu đã có một kho lưu trữ (bán chính thức) có thể giải quyết vấn đề của bạn. Hơn nữa, sử dụng Oracle JDK để phát triển, chỉ để tránh các vấn đề tương thích (rất lẻ tẻ) (tôi đã thử nhiều năm trước, chắc chắn bây giờ tốt hơn).

Thêm repo webupd8 vào hệ thống của bạn:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

Cài đặt phiên bản jdk ưa thích của bạn (có sẵn phiên bản từ java-6 đến java-9):

sudo apt-get install oracle-java8-installer

Bạn cũng có thể cài đặt nhiều phiên bản jdk, trộn các phiên bản openjdk và oracle. Sau đó, bạn có thể sử dụng lệnh update-java-Alternatives để chuyển đổi giữa phiên bản đã cài đặt:

# list available jdk
update-java-alternatives --list

# use jdk7
sudo update-java-alternatives --set java-7-oracle

# use jdk8
sudo update-java-alternatives --set java-8-oracle

Yêu cầu

Nếu bạn add-apt-repository: command not foundchắc chắn đã software-properties-commoncài đặt:

sudo apt-get install software-properties-common

Nếu bạn đang sử dụng Ubuntu phiên bản cũ hơn:

sudo apt-get install python-software-properties

Cài đặt JDK không có đặc quyền root

Nếu bạn không có quyền quản trị viên trên máy mục tiêu của mình, cách đơn giản nhất của bạn là sử dụng sdkmanđể cài đặt openjdk được chứng nhận zulu:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java

LƯU Ý : sdkman cho phép cài đặt Oracle JDK chính thức, mặc dù nó không phải là tùy chọn mặc định. Xem các phiên bản có sẵn với:

sdk ls java

Cài đặt phiên bản đã chọn với:

sdk install java <version>

Ví dụ:

sdk install java 9.0.1-oracle

Bảng chú giải các lệnh

  • sudo <command> [command_arguments] : thực hiện một lệnh với đặc quyền superuser.

  • add-apt-repository <PPA_id> : Ubuntu (giống như mọi dẫn xuất Debian và nói chung là mọi bản phân phối Linux) có một kho chính gồm các gói xử lý những thứ như phụ thuộc gói và cập nhật. Trong Ubuntu, có thể mở rộng kho lưu trữ chính bằng PPA (Kho lưu trữ gói cá nhân) thường chứa các gói không có sẵn trong hệ thống (giống như oracle jdk) hoặc các phiên bản cập nhật của những cái có sẵn (ví dụ: LibreOffice 5 trong LTS chỉ khả dụng thông qua điều này PPA ).

  • apt-get [install|update|upgrade|purge|...] : nó là "trình xử lý gói dòng lệnh" được sử dụng để thao tác trạng thái của mọi kho lưu trữ trên hệ thống (cài đặt / cập nhật / nâng cấp có thể được xem như một sự thay đổi trạng thái hiện tại của kho lưu trữ).

Trong trường hợp của chúng tôi : với lệnh, sudo add-apt-repository ppa:webupd8team/javachúng tôi thông báo cho hệ thống rằng bản cập nhật kho lưu trữ tiếp theo phải truy xuất thông tin gói cũng từ kho lưu trữ webupd8.

Với việc sudo apt-get updatechúng tôi thực sự cập nhật kho lưu trữ hệ thống (tất cả các hoạt động này yêu cầu đặc quyền của người dùng siêu cấp, vì vậy chúng tôi thêm sudo vào các lệnh).

sudo apt-get install oracle-java8-installer

  • update-java-Alternatives (một phiên bản java cụ thể của update-Alternatives ): trong Ubuntu một số gói cung cấp chức năng giống nhau (duyệt internet, biên dịch thư, chỉnh sửa tệp văn bản hoặc cung cấp tệp thực thi java / javac ...). Để cho phép hệ thống để lựa chọn các công cụ sử dụng yêu thích cho một nhiệm vụ cụ thể một cơ chế sử dụng liên kết tượng trưng dưới /etc/alternatives/được sử dụng. Hãy thử cập nhật jdk như được chỉ ra ở trên (chuyển đổi giữa java 7 và java 8) và xem cách thay đổi đầu ra của lệnh này:

    ls -l /etc/alternatives/java*

Trong trường hợp của chúng tôi : sudo update-java-alternatives --set java-8-oraclecập nhật các liên kết tượng trưng theo / etc / Alternatives để trỏ đến tệp thực thi java-8-oracle.

Ngoài ra:

  • man <command> : bắt đầu sử dụng man để đọc phần trợ giúp được viết rất tốt và chi tiết về (hầu hết) mọi lệnh shell và các tùy chọn của nó (mọi lệnh mà tôi đề cập trong câu trả lời nhỏ này đều có trang man, hãy thử man update-java-alternatives).

  • apt-cache search <search_key> : truy vấn bộ đệm APT để tìm kiếm một gói có liên quan đến khóa tìm kiếm được cung cấp (có thể là tên gói hoặc một số từ trong mô tả gói).

  • apt-cache show <package> : cung cấp thông tin APT cho một gói cụ thể (phiên bản gói, đã cài đặt hay chưa, mô tả).


Vấn đề là tôi nhận được thông báo "Không thể định vị gói oracle-java8-installer". Điều tương tự cũng xảy ra khi tôi thử và tải openjdk 8 bằng lệnh sudo apt-get.
user2223059

2
Đáng chú ý, đây (ít nhất được gắn nhãn là) phiên bản thương mại của Oracle của java, không phải phiên bản cộng đồng mở (openjre).
ThorSummoner

1
@basZero: Có vẻ như bạn cần phải cài đặt phần mềm tính: apt-get install software-properties-common. Do đó, tôi sẽ cập nhật bài đăng để bao gồm yêu cầu này. Cảm ơn
Giuseppe Ricupero

1
Câu trả lời này không hợp lệ - oracle cấm tải trực tiếp trình cài đặt java. sudo apt-get install oracle-java8-installer không
Alec Istomin

2
Tôi đã cố gắng giải quyết vấn đề này trong 4 giờ rồi. Cảm ơn vì giải pháp tuyệt vời này!
ickyrr

108

Như bạn thấy, tôi chỉ cài đặt java 1.7 (trên máy Ubuntu 14.04).

update-java-alternatives -l
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64

Để cài đặt Java 8, tôi đã

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk

Sau đó, bây giờ tôi có java 7 và 8,

update-java-alternatives -l
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1069 /usr/lib/jvm/java-1.8.0-openjdk-amd64

THƯỞNG THÊM (cách chuyển đổi giữa các phiên bản khác nhau)

  • chạy lệnh follwing từ thiết bị đầu cuối:

sudo update-alternatives --config java

There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1069      manual mode

Press enter to keep the current choice[*], or type selection number:

Như bạn có thể thấy, tôi đang mở jdk 8. Để chuyển sang jdk 7, hãy nhấn 1và nhấn Enterphím. Làm tương tự javacvới sudo update-alternatives --config javac,.

Kiểm tra các phiên bản để xác nhận thay đổi: java -versionjavac -version.


2
Rất hữu ích vì tôi không biết repo nào được yêu cầu để cài đặt OpenJDK! Cảm ơn rất nhiều.
cram2208,

@ cram2208 rất vui vì đã giúp được bạn. cảm ơn vì nhận xét.
samamara

Openjdk-r có đủ an toàn cho máy chủ không?
Wang

Cảm ơn câu trả lời chi tiết, giải pháp này hoàn toàn phù hợp với tôi.
Muddasir

@ Muddasir23 rất vui vì điều đó hữu ích!
samamara

13

Tôi đang nhận OpenJDK 8 từ kho lưu trữ Debian chính thức, thay vì một số PPA ngẫu nhiên hoặc tệp nhị phân Oracle không miễn phí. Đây là cách tôi đã làm điều đó:

sudo apt-get install debian-keyring debian-archive-keyring

Thực hiện /etc/apt/sources.list.d/debian-jessie-backports.list:

deb http://httpredir.debian.org/debian/ jessie-backports main

Thực hiện /etc/apt/preferences.d/debian-jessie-backports:

Package: *
Pin: release o=Debian,a=jessie-backports
Pin-Priority: -200

Sau đó, cuối cùng thực hiện cài đặt:

sudo apt-get update
sudo apt-get -t jessie-backports install openjdk-8-jdk

1
Và cuối cùng cuối cùng update-alternatives --config java ;-)
Javali

Cảm ơn rất nhiều! Đây là giải pháp duy nhất làm việc cho tôi (Deb 8)

3
sudo apt-get update
sudo apt-get  install openjdk-8-jdk

cái này sẽ hoạt động


Vui lòng thêm lời giải thích điều này bổ sung cho các câu trả lời hiện có.
Gert Arnold

Tôi đang sử dụng WSL2 từ Windows và tôi đã quên cập nhật các gói trước khi cài đặt OpenJDK và gặp lỗi tương tự. @GertArnold, câu trả lời của Zoe đã giúp tôi trong tình huống đó.
pcdro

0

Tôi đang gặp vấn đề tương tự và đã thử tất cả các giải pháp trên trang này nhưng không có giải pháp nào trong số họ thực hiện được thủ thuật.

Điều cuối cùng đã hoạt động là thêm universerepo vào danh sách repo của tôi. Để làm điều đó, hãy chạy lệnh sau

sudo add-apt-repository universe

Sau khi chạy lệnh trên, tôi đã có thể chạy

sudo apt install openjdk-8-jre

mà không có sự cố và gói đã được cài đặt.

Hy vọng điều này sẽ giúp ai đó.


Không chắc tại sao tôi lại bị từ chối cho câu trả lời này. Nếu có điều gì không chính xác hoặc một vấn đề tiềm ẩn xin vui lòng để lại bình luận để giúp những người khác và bản thân tôi hiểu rõ hơn.
Daniel Black

0

Sau khi thêm JDKrepo, trước khi Cài đặt, bạn có thể muốn chạy bản cập nhật trước để repo có thể được thêm vào chạy apt update

sau đó tiếp tục cài đặt của bạn sudo apt install adoptopenjdk-8-hotspot

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.