ฉันจะติดตั้ง openjdk 7 บน Ubuntu 16.04 ขึ้นไปได้อย่างไร


120

ฉันต้องการอัพเกรดระบบหลักของฉันเป็น 16.04 แต่ฉันทำงานในโครงการที่ต้องใช้ OpenJDK 7

เห็นได้ชัดว่ามันไม่สามารถใช้ได้จากเรื่องapt-get install openjdk-7-jdkไม่สำคัญ เฉพาะเวอร์ชัน 8 และ 9 เท่านั้นที่แสดงรายการในที่เก็บ

ทุกคนสามารถแนะนำให้ฉันแนะนำวิธีการติดตั้งได้หรือไม่


ในกรณีที่มีใครสงสัยว่าทำไมคุณยังต้องการ JDK 7 ฉันอยู่ในสถานการณ์เดียวกันเพราะฉันคิดว่า neo4j 2.1.6 ไม่ได้เล่นกับ Ubuntu 16.04 เป็นอย่างดีและสิ่งเดียวที่ฉันเห็นก็คือผิด JDK
Sridhar Sarnobat

คุณต้องการ openjdk 7 อย่างชัดเจนเป็นระบบ JVM ของคุณหรือคุณแค่ใช้ Java 7 runtime คุณสามารถดาวน์โหลดไฟล์หลังได้จากคลังเก็บ Oracle
Thorbjørn Ravn Andersen

คำตอบ:


146

คำเตือนความปลอดภัย

แพ็คเกจใน PPA ที่กล่าวถึงด้านล่างไม่ได้รับการอัพเดตด้วยแพตช์รักษาความปลอดภัยไปยัง Java ห้ามใช้ในการผลิต ดูคำตอบอื่นแทน

ในช่วงเวลาของการเขียนการอัปโหลดสุดท้ายสำหรับ OpenJDK 7 ได้ทำ '2016/04/22' กับรุ่น 7u95 และยังคงมีอยู่เป็น 'ล่าสุด' ที่อูบุนตู 14.04 ได้รับการปรับปรุงเพื่อ 7u181


อัปเดต: แม้ว่านี่จะเป็นคำตอบที่ดีที่สุดที่คุณจะได้รับในปี 2018 เนื่องจากขาดการปรับปรุงความปลอดภัยโดย PPA นี้

ฉันพบคำแนะนำต่อไปนี้ซึ่งใช้งานได้สำหรับฉัน:

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

สิ่งนี้นิยาม“ PPA สำหรับการอัปโหลด OpenJDK (จำกัด )” เป็นที่เก็บแพ็กเกจเพิ่มเติมอัปเดตข้อมูลของคุณและติดตั้งแพ็กเกจด้วยการอ้างอิง (จากที่เก็บนั้น)


13
หากคุณติดตั้ง openjdk-8 ผิดพลาดเป็นครั้งแรก (เหมือนที่ฉันทำ) หลังจากทำตามคำตอบนี้คุณจะต้องทำsudo update-java-alternativesเพื่อให้คุณสามารถทำให้ openjdk-7 เป็นค่าเริ่มต้น
Rian Sanderson

4
FYI: ปัจจุบันนี้ใช้งานไม่ได้สำหรับ 16.10
opticyclic

19
-1 เนื่องจาก PPA นี้ล้าสมัยและไม่สนใจแพตช์รักษาความปลอดภัยที่สำคัญมากมาย ไม่สามารถยอมรับได้อย่างสมบูรณ์ที่จะติดตั้ง imo นี้
gertvdijk

3
ยังใช้ไม่ได้กับ 17.04
โคลินแฮร์ริงตัน

2
-1 เช่นเดียวกับ PPA ที่แนะนำถูก จำกัด และไม่ได้รับการปรับปรุง
ตัวคั่น

65

แก้ไข 22-Jul-2019 : คำตอบนี้ไม่ทำงาน แพ็คเกจ JDK ที่อ้างถึงด้านล่างนี้ไม่สามารถใช้ได้ใน Debian Experimental ไม่ว่าในกรณีใดพวกเขาจะล้าหลังแพ็คเกจ Ubuntu Trusty ซึ่งมีการปรับปรุงความปลอดภัยล่าสุด โปรดอ้างอิงคำตอบอื่น ๆ จนกว่าจะสามารถแก้ไขได้ (ขออภัยไม่มี ETA)


ดูเหมือนว่าผู้ดูแลระบบของ openjdk-r / ppa จะทำการอัปเดตแพ็คเกจ openjdk-7 เกินกว่ารุ่น 7u95-2.6.4-3 คำอธิบายของแพ็คเกจนั้น "คัดลอกมาจากการทดลองเดเบียนในไฟล์เก็บถาวรหลักสำหรับ Debian GNU / Linux" ทำให้เราทราบว่าจะจัดการกับตัวเองได้อย่างไร

ตัวเลือก 1: การติดตั้งด้วยตนเอง

  1. ดาวน์โหลดแพ็คเกจที่เหมาะสำหรับสถาปัตยกรรมของคุณ:
    (สำหรับผู้ใช้ส่วนใหญ่หมายถึง amd64 ถ้า 64 บิตหรือ i386 หากติดตั้ง Ubuntu 32 บิต)

  2. (พยายาม) ติดตั้งแพ็คเกจโดยใช้dpkg:

    Ubuntu 17.10 และรุ่นก่อนหน้า:

    sudo dpkg -i openjdk-7-* libjpeg62-turbo* libfontconfig1* fontconfig-config*

    Ubuntu 18.04 และใหม่กว่า:

    sudo dpkg -i openjdk-7-* libjpeg62-turbo*
  3. dpkgเช็คเอาท์พุทจาก หากมีปัญหาการพึ่งพาซึ่งน่าจะเกิดขึ้นคุณจะเห็นสิ่งต่อไปนี้ (ด้วยสถาปัตยกรรมที่คุณใช้ทดแทน amd64):

    พบข้อผิดพลาดขณะประมวลผล:
    OpenJDK-7-JRE: amd64
    OpenJDK-7-JRE-หัวขาด: amd64
    OpenJDK-7-jdk: amd64

    หากไม่มีปัญหาการพึ่งพาคุณทำได้ดีให้ข้ามไปที่ # 4 มิฉะนั้นหากคุณต้องการแก้ไขปัญหาการพึ่งพาบางอย่างสิ่งนี้จะได้รับการจัดการด้วย:

    sudo apt install -f

    โปรดสังเกตว่าไม่จำเป็นต้องเรียกใช้ซ้ำอีกครั้งdpkgหลังจากให้การaptแก้ไขการอ้างอิง มันจะทำการติดตั้งแพ็กเกจ openjdk ให้โดยอัตโนมัติ

  4. อัพเดตทางเลือก java คุณสามารถดูรุ่นทั้งหมดที่ติดตั้ง Java update-java-alternatives --listด้วย ในการเปิดใช้งาน OpenJDK Java 1.7 ให้เรียกใช้:

    sudo update-java-alternatives -s java-1.7.0-openjdk-amd64

    คุณอาจสังเกตเห็นข้อผิดพลาดเกี่ยวกับIcedTeaPlugin.soปลั๊กอินไม่พร้อมใช้งาน นี่ไม่ใช่ข้อกังวลที่แท้จริงสำหรับนักพัฒนาที่ทำงานกับ JDK

  5. ตรวจสอบว่าจาวาทำงานอยู่:

    java -version

    ซึ่งควรแสดงผลลัพธ์ที่คล้ายกับ:

    รุ่น java "1.7.0_161"
    สภาพแวดล้อมรันไทม์ OpenJDK (IcedTea 2.6.12) (7u161-2.6.12-1)
    OpenJDK เซิร์ฟเวอร์ 64 บิต VM (สร้าง 24.161-b01, โหมดผสม)

ตัวเลือกที่ 2: การติดตั้งอัตโนมัติ (รวมถึงการอัปเดตด้วยapt)

การปักหมุดสามารถใช้เพื่อติดตั้งและอัปเดต openjdk-7-jdk และการพึ่งพาจากที่เก็บ Debian

  1. สร้างไฟล์ปักหมุดที่บอกaptให้พิจารณาเฉพาะแพ็คเกจที่เราสนใจ (แน่นอนว่าเราไม่ต้องการให้อูบุนตูของเรา "อัพเกรด" ด้วยแพ็คเกจเดเบียนรุ่นทดลอง)

    สร้างไฟล์ที่/etc/apt/preferences.d/debianมีเนื้อหาด้านล่าง คุณจะต้องมีสิทธิ์ superuser เพื่อใช้อย่างใดอย่างหนึ่งsudo vim, sudo nano, gksudo geditฯลฯ

    Package: *
    Pin: release o=Debian,n=experimental
    Pin-Priority: -1
    
    Package: *
    Pin: release o=Debian,n=sid
    Pin-Priority: -1
    
    Package: openjdk-7-jdk
    Pin: release o=Debian,n=experimental
    Pin-Priority: 500
    
    Package: openjdk-7-jre
    Pin: release o=Debian,n=experimental
    Pin-Priority: 500
    
    Package: openjdk-7-jre-headless
    Pin: release o=Debian,n=experimental
    Pin-Priority: 500
    
    Package: libjpeg62-turbo
    Pin: release o=Debian,n=sid
    Pin-Priority: 500

    สำหรับ Ubuntu 17.10 และก่อนหน้านี้ให้ผนวกสิ่งต่อไปนี้ (และดูหมายเหตุที่ด้านล่าง):

    Package: libfontconfig1
    Pin: release o=Debian,n=sid
    Pin-Priority: 500
    
    Package: fontconfig-config
    Pin: release o=Debian,n=sid
    Pin-Priority: 500
  2. ติดตั้งพวงกุญแจ Debian:

    sudo apt install debian-archive-keyring

    หมายเหตุ: ในขณะที่นี่เป็นวิธีที่ง่ายที่สุดในการเพิ่มพวงกุญแจเดเบียนมันอาจจะไม่ทันสมัย ตรวจสอบเอาต์พุตดังต่อไปนี้เมื่อทำงานapt updateในขั้นตอนที่ 4:

    W: ข้อผิดพลาด GPG: http://cdn-fastly.deb.debian.org/debian รุ่นทดลอง InRelease: ไม่สามารถตรวจสอบลายเซ็นต่อไปนี้ได้เนื่องจากรหัสสาธารณะไม่พร้อมใช้งาน: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010
    E: พื้นที่เก็บข้อมูล 'http://httpredir.debian.org/debian รุ่นทดลอง InRelease' ไม่ได้ลงนาม

    หากคุณเห็นข้อผิดพลาดนี้ให้เพิ่มคีย์ที่จำเป็นด้วยตนเองด้วย:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010

    ตรงไหน8B48AD6246925553และ7638D0442B90D010ควรตรงกับ pubkeys ที่คุณเห็นในข้อความเตือน

  3. เพิ่มที่เก็บข้อมูลที่ต้องการ:

    sudo add-apt-repository 'deb http://httpredir.debian.org/debian experimental main'
    sudo add-apt-repository 'deb http://httpredir.debian.org/debian sid main'

    ทำไมไม่ใช้พื้นที่เก็บข้อมูล Debian ที่มีเสถียรภาพ? คุณจะพบกับการพึ่งพาที่ไม่น่าพอใจกับ Debian เสถียร ที่เก็บทดลอง (สำหรับ openjdk-7) และ sid (สำหรับ libjpeg62-turbo, libfontconfig1 และ fontconfig-config) ที่เก็บข้อมูลมีความผ่อนปรนมากกว่ารุ่นที่ขึ้นต่อกัน

  4. อัปเดตaptแคช (คาดว่าจะใช้เวลาสักครู่เนื่องจากรายการแพ็กเกจของ Debian มีขนาดใหญ่):

    sudo apt update
  5. ติดตั้ง openjdk-7-jdk:

    sudo apt install openjdk-7-jdk
  6. อัพเดตทางเลือก java คุณสามารถดูรุ่นทั้งหมดที่ติดตั้ง Java update-java-alternatives --listด้วย ในการเปิดใช้งาน OpenJDK Java 1.7 ให้เรียกใช้:

    sudo update-java-alternatives -s java-1.7.0-openjdk-amd64

    คุณอาจสังเกตเห็นข้อผิดพลาดเกี่ยวกับIcedTeaPlugin.soปลั๊กอินไม่พร้อมใช้งาน นี่ไม่ใช่ข้อกังวลที่แท้จริงสำหรับนักพัฒนาที่ทำงานกับ JDK

  7. ตรวจสอบว่าจาวาทำงานอยู่:

    java -version

    ซึ่งควรแสดงผลลัพธ์ที่คล้ายกับ:

    รุ่น java "1.7.0_161"
    สภาพแวดล้อมรันไทม์ OpenJDK (IcedTea 2.6.12) (7u161-2.6.12-1)
    OpenJDK เซิร์ฟเวอร์ 64 บิต VM (สร้าง 24.161-b01, โหมดผสม)

บันทึกย่อแบบอักษร

libfontconfig1และfontconfig-configต้องอัปเกรดเป็น 2.12 หรือใหม่กว่าบน Ubuntu 17.10 และรุ่นก่อนหน้า แพ็คเกจการอัพเดทจาก Debian ไม่มีการปรับแต่งของ Ubuntu ดังนั้นบางแอปพลิเคชั่นจึงแสดงแบบอักษรที่น่าเกลียดเมื่อติดตั้งแพ็คเกจเหล่านี้ เช่น Charles Debug Proxy ขึ้นอยู่กับโปรแกรมที่คุณใช้คุณอาจหรืออาจไม่ได้รับผลกระทบจากปัญหานี้


คำตอบที่น่าสนใจโปรดอัปเดตหากคุณพบวิธีในการอัปเดตแพ็กเกจนี้โดยอัตโนมัติ
J.Serra

ฉันเพิ่งลองติดตั้ง jdk 7 บน Ubuntu 16.04 และนี่เป็นวิธีเดียวที่ฉันจัดการเพื่อให้มันทำงานได้ ขอขอบคุณ!
ลิงก์

2
@ J.Serra Answer แก้ไขด้วยวิธีการอัพเดตอัตโนมัติ
MDMower

คำตอบที่สมบูรณ์แบบโดยเฉพาะอย่างยิ่งวิธีการอัตโนมัติเป็นที่นิยมอย่างมาก! ขอบคุณสำหรับเวลาที่จะคิดออกและจดบันทึก!
steadfasterX

1
วิธีการอัตโนมัติส่วนใหญ่ทำงานให้ฉัน แต่ไม่ถาวรอย่างใดอย่างหนึ่ง ฉันต้องเพิ่มอีกสองแพ็กเกจใน /etc/apt/preferences.d/debian (นอกเหนือจาก libjpeg62-turbo): libfontconfig1 และ fontconfig-config
comodoro

11

คุณสามารถดาวน์โหลด OpenJDK 7 จาก Azul ซึ่งอาจเหมาะกับความต้องการของคุณ พวกเขาทั้งสองมี DEB (สำหรับระบบแพ็คเกจ) และการกระจาย ZIP ฉันทำงานกับการกระจาย ZIP เท่านั้น

http://www.azul.com/downloads/zulu/zulu-linux/


นี่คือสิ่งที่ใช้ได้กับฉันกับ Ubuntu เวอร์ชันล่าสุด
razvanone

0

ติดตั้ง Java 7 บน Ubuntu 16.04, Ubuntu 17.04

ก็แนะนำให้ติดตั้งออราเคิล Javaเพราะมันมีขอบประสิทธิภาพมากกว่าOpenJDK ด้วยเหตุนี้ฉันต้องการโพสต์ทางเลือก หากคุณต้องการติดตั้ง Oracle Java ให้รันคำสั่งต่อไปนี้ในเทอร์มินัลเพื่อติดตั้งจาก PPA

  1. เพิ่มที่เก็บข้อมูลที่ต้องการ:

    sudo add-apt-repository ppa:webupd8team/java
  2. อัปเดตaptแคชและติดตั้งoracle-java7 :

    sudo apt update
    sudo apt install java-common oracle-java7-installer

    ในระหว่างกระบวนการติดตั้งคุณจะต้องยอมรับข้อตกลงสิทธิ์การใช้งานของ Oracle เมื่อติดตั้งแล้วเราจำเป็นต้องตั้งค่าตัวแปรสภาพแวดล้อม Java เช่นJAVA_HOME

  3. แก้ไขตัวแปรสภาพแวดล้อม Java

    sudo apt install oracle-java7-set-default
    source /etc/profile
  4. ตรวจสอบว่าจาวาทำงานอยู่:

    java -version

    ซึ่งควรแสดงผลลัพธ์ที่คล้ายกับ:

    java version "1.7.0_80"
    Java(TM) SE Runtime Environment (build 1.7.0_80-u80)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-u80, mixed mode)

3
โปรแกรมติดตั้ง oracle ไม่ทำงานอีกต่อไปกำลังเชื่อมต่อกับ download.oracle.com (download.oracle.com) | 184.51.150.144 |: 80 ... เชื่อมต่อแล้ว ส่งคำขอ HTTP แล้วกำลังรอการตอบกลับ ... 404 ไม่พบ
เอกราช

สำหรับ Oracle JDK บริษัท จะไม่เสนอการสนับสนุนสาธารณะสำหรับ JDK 7 (พวกเขาให้การสนับสนุนที่มีค่าใช้จ่าย) ฉันคิดว่าapt-getกำลังพยายามรับตัวติดตั้งจากหน้าเว็บที่ไม่มีอยู่ - หากคุณต้องการ JDK 7 คุณสามารถดาวน์โหลดตัวติดตั้งได้จากเว็บไซต์ Archive: oracle.com/technetwork/java/javase/downloads/…
Jaime

0

ทางเลือกของ Oracle JDK:

ฉันต้องการหลีกเลี่ยงความพยายามกับที่เก็บเพราะฉันสลับระหว่าง 7, 8 และ 9 ดังนั้นฉันจึงลงเอยด้วย Oracle JDK แทนที่จะเป็น OpenJDK ดาวน์โหลดได้จากเว็บไซต์อย่างเป็นทางการ ฉันไม่แน่ใจเกี่ยวกับว่า build 80 ล่าสุดมีการแก้ไขเช่นเดียวกับ build 161 ของ OpenJDK หรือไม่ แต่ฉันมีไว้สำหรับการพัฒนาเพื่อไม่ให้มีความหมายมากนัก

จากนั้นคุณต้องตั้งค่า$JAVA_HOMEในสภาพแวดล้อมเพื่อให้สคริปต์ต่างๆรับ JDK ที่เหมาะสม (เช่น Maven, JBoss เป็นต้น)

เพื่อความสมบูรณ์ JDK เวอร์ชัน 7 นั้น EOL'ed แม้การสนับสนุนสาธารณะ JDK 8 จะถูกยกเลิกตั้งแต่เดือนกันยายน 2560และจะไม่ได้รับการอัพเดตสาธารณะหลังจากเดือนกันยายน 2018


0

ใช้ภาชนะบรรจุ

นี่คือคำตอบที่ถูกต้องในระดับสากลเกี่ยวกับวิธีการเรียกใช้<outdated>ซอฟต์แวร์ที่ถูกลบออกจาก<current>อูบุนตู: containerize ใบสมัครของคุณ

ตัวอย่างเช่นใช้ Docker และอิมเมจพื้นฐานของ Ubuntu รุ่นเก่าซึ่งซอฟต์แวร์ที่คุณกำลังค้นหายังคงมีอยู่ / บำรุงรักษา

มันยังทำงานในทิศทางอื่น ๆ ; ลองใช้ซอฟท์แวร์ตัวใหม่หรือแม้กระทั่งลีนุกซ์รุ่นอื่น ๆ ใน Ubuntu ที่มีเสถียรภาพ

ตัวอย่าง Java 7 โดยใช้ Ubuntu 14.04

  1. ติดตั้ง Docker - Docker CE รุ่นฟรีเรียบร้อยแล้ว ดูตัวอย่างhttps://docs.docker.com/install/linux/docker-ce/ubuntu/หรือใช้docker.ioแพ็คเกจใน Ubuntu รุ่นล่าสุดที่จัดส่ง

  2. ในโฟลเดอร์ว่างให้สร้างไฟล์Dockerfile:

    FROM ubuntu:trusty
    RUN apt-get update \
        && apt-get install -y \
            openjdk-7-jdk \
        && rm -rf /var/lib/apt/lists/*
    
    ENTRYPOINT ["/usr/bin/java"]

    เพิ่มแพ็คเกจเพิ่มเติมในคำสั่งนั้นหากคุณต้องการ

  3. ในโฟลเดอร์นั้นให้เรียกใช้:

    docker build -t gertvdijk/java7 .
  4. เรียกใช้คำสั่งภายในคอนเทนเนอร์แบบใช้ครั้งเดียวโดยใช้อิมเมจ Java 7 นั้น:

    เช่นjava -version:

    docker run --rm -it gertvdijk/java7 -version

    เอาท์พุท:

    java version "1.7.0_181"
    OpenJDK Runtime Environment (IcedTea 2.6.14) (7u181-2.6.14-0ubuntu0.1)
    OpenJDK 64-Bit Server VM (build 24.181-b01, mixed mode)
  5. เลือกสร้าง wrapper เพื่อความสะดวก

    • สร้างไฟล์ที่/usr/local/bin/java7-in-dockerมีเนื้อหา:

      #!/usr/bin/env sh -e
      
      DOCKER_IMAGE=gertvdijk/java7
      PWD="$(pwd)"
      
      exec docker run \
        --rm -it \
        -v ${PWD}:${PWD} \
        -v "/etc/passwd:/etc/passwd:ro" \
        -v "/etc/group:/etc/group:ro" \
        --user "$(id -u):$(id -g)" \
        --workdir "${PWD}" \
        "${DOCKER_IMAGE}" \
        $@

      สิ่งนี้จะทำให้ไดเรกทอรีการทำงานปัจจุบันพร้อมใช้งานภายในคอนเทนเนอร์ - ไม่ใช่ระบบไฟล์ทั้งหมดของคุณและจะปลอมตัวเป็นบัญชีผู้ใช้ภายในเครื่องของคุณในเนมสเปซของคอนเทนเนอร์

    • ทำเครื่องหมายว่าปฏิบัติการได้:

      sudo chmod +x /usr/local/bin/java7-in-docker
  6. รัน Java 7 ของคุณอย่างโปร่งใสดังนี้

    java7-in-docker -jar relative/path/to/some.jar

14.04 จะไม่ได้รับการบำรุงรักษาอีกต่อไปเว้นแต่คุณจะจ่ายเงินสำหรับการบำรุงรักษาเพิ่มเติม (จนถึง 2022)
Thorbjørn Ravn Andersen

-2

วิธีง่ายๆคือ:

เพิ่มบรรทัดเหล่านี้ไปที่/etc/apt/sources.list::

deb http://security.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse

จากนั้นอัปเดต apt และติดตั้ง คุณอาจจำเป็นต้องลดระดับtzdataแพ็คเกจ

หลังจากนั้นฉันแนะนำให้ใส่เครื่องหมายบรรทัดเหล่านั้นและทำการอัพเดทอีกครั้งเพื่อป้องกันการติดตั้งหรืออัพเดทแพ็กเกจจากที่เก็บนั้น (ซึ่งอาจนำไปสู่พฤติกรรมที่ไม่คาดคิด)

ปัญหาหนึ่งคือคุณต้องถือแพคเกจเหล่านั้นเพื่อไม่ให้ลบออกเมื่อคุณอัปเดตระบบของคุณ ( tzdataแพคเกจพิเศษ)

หมายเหตุ : ใช้วิธีนี้เป็นทางเลือกสุดท้ายเลือกวิธีอื่นที่จะช่วยให้คุณอัปเดตโดยไม่มีปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.