Ответ 1
После долгих поисков я нашел ответ на форуме Ubuntu.
По сути, проблема заключается в том, что существует новая версия Java, и установщик не был обновлен для ссылки на нее.
Если на вашем компьютере установлен Linux x64 с процессором AMD64, и вам нужна последняя версия Java8, это можно легко исправить, выполнив следующие команды (кредит на оригинальную версию идет на g1zmo2, а эта обновленная версия идет на @stoneLeaf):
cd /var/lib/dpkg/info
sudo sed -i 's|JAVA_VERSION=8u191|JAVA_VERSION=8u201|' oracle-java8-installer.*
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/|' oracle-java8-installer.*
sudo sed -i 's|SHA256SUM_TGZ=.*|SHA256SUM_TGZ="cb700cc0ac3ddc728a567c350881ce7e25118eaf7ca97ca9705d4580c506e370"|' oracle-java8-installer.*
sudo sed -i 's|J_DIR=jdk1.8.0_191|J_DIR=jdk1.8.0_201|' oracle-java8-installer.*
А затем запустите команды установщика JDK 8, как вы это обычно делаете =):
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default
Если ваша машина не Linux64 x64 AMD64 или вы ищете Java 9, то вам повезло. Сегодня вы узнаете, как починить установщик Java для своих нужд.
Для целей данного руководства мы предполагаем, что вы хотите Java 8u181, а ранее вы установили Java 8u171 (потому что это то, что у меня есть).
Во-первых, вам нужно перейти на страницу загрузок Java JDK (для Java8 перейдите сюда, перейдите на вкладку "Загрузки", а затем ссылку "Java SE 8u181").
Теперь найдите нужную версию JDK для вашей машины. В моем случае моя машина работает на 64-битной Ubuntu 14.04, поэтому мне нужен "Linux x64".
Скопируйте ссылку, которая приведет вас к нужной вам загрузке. Не забудьте принять лицензионное соглашение. В моем случае (Linux x64) мне нужно: http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
.
Для целей данного руководства нам нужен только путь ссылки: http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/
. Держать его в безопасности; это понадобится нам позже.
Теперь найдите ссылку на контрольную сумму на странице и щелкните по ней.
Это должно привести вас к простой странице таблицы HTML. Просто найдите sha256
который подходит вашей машине.
Опять же, моя машина "Linux x64", поэтому мне нужно 1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3
, как на картинке. Скопируйте значение и сохраните его в безопасности; нам это тоже понадобится позже.
Теперь откройте терминал на вашем компьютере и введите папку, в которой находится файл установщика Java:
cd /var/lib/dpkg/info
Отлично, теперь выполните это:
sudo grep --color -P "JAVA_VERSION=[a-z0-9]+" oracle-java8-installer.config
Вывод должен выглядеть примерно так:
Это говорит нам, что является версией Java, которую установщик настроил для установки. Таким образом, чтобы легко изменить эти значения, мы бы запустили что-то вроде этого:
sudo sed -i 's|JAVA_VERSION=<INSTALLER CURRENT JAVA VERSION HERE>|JAVA_VERSION=<NEW VERSION HERE>|' oracle-java8-installer.*
В нашем случае мы обновляем с 8u171
до 8u181
, поэтому мы должны выполнить:
sudo sed -i 's|JAVA_VERSION=8u171|JAVA_VERSION=8u181|' oracle-java8-installer.*
Хорошо, теперь нам нужно обновить URL-адрес загрузки.
sudo grep --color -P "PARTNER_URL=[^ ]+" oracle-java8-installer.config
Чтобы обновить его, мы должны выполнить такую команду:
sudo sed -i 's|PARTNER_URL=<INSTALLER CURRENT JAVA URL HERE>|PARTNER_URL=<NEW URL HERE>|' oracle-java8-installer.*
Помните тот URL, который я сказал вам сохранить в начале? Ну, нам это нужно сейчас. Поместите это как ваш новый URL, вот так:
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/|' oracle-java8-installer.*
После этого нам нужно обновить контрольную сумму. Поэтому, пожалуйста, выполните эту команду:
sudo grep --color -P '[^#]SHA256SUM_TGZ="[^"]+"' oracle-java8-installer.config
Это распечатывает пару различных SHA256:
Обратите внимание, что они все разные. Мы вернемся к этому через секунду. Итак, чтобы обновить SHA256, нам нужно выполнить эту команду:
sudo sed -i 's|SHA256SUM_TGZ="<INSTALLER CURRENT JAVA HASH HERE>"|SHA256SUM_TGZ="<NEW JAVA HASH>"|' oracle-java8-installer.*
Но как мы узнаем, какой из текущих Java-хэшей заменить? Что ж, нам нужно выяснить архитектуру нашего процессора:
dpkg --print-architecture
В моем случае это выдаст amd64
. Это означает, что я должен взять вторую ссылку. Откуда я это знаю? Хорошо, я прочитал исходный код (sudo gedit oracle-java8-installer.config
), так что поверьте мне в этом:
- Если ваша архитектура
i386
,i586
илиi686
, возьмите первую. - Если
amd64
, возьми второй. - Если
armv7l
илиarmv6l
, возьмите третий. - Если
armv8l
,arm64
илиaarch64
, возьмите четвертый. - Если ничего из вышеперечисленного вам не повезло...
Итак, поскольку у меня amd64
, используя новый хеш, полученный с сайта Java, я бы выполнил:
sudo sed -i 's|SHA256SUM_TGZ="b6dd2837efaaec4109b36cfbb94a774db100029f98b0d78be68c27bec0275982"|SHA256SUM_TGZ="1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3"|' oracle-java8-installer.*
Наконец, нам нужно изменить имя каталога установщика JDK, поэтому выполните это, чтобы найти текущее:
sudo grep --color -P "J_DIR=[^ ]+" oracle-java8-installer.config
В моем случае это напечатано:
Таким образом, мы выполнили бы что-то вроде этого:
sudo sed -i 's|J_DIR=<INSTALLER CURRENT JDK VERSION HERE>|J_DIR=<NEW JDK VERSION>|' oracle-java8-installer.*
Будучи моей текущей версией jdk1.8.0_171
, я выполняю:
sudo sed -i 's|J_DIR=jdk1.8.0_171|J_DIR=jdk1.8.0_181|' oracle-java8-installer.*
И... это оно. Мы готовы вызвать установщик Java, ура. (уф... это заняло больше времени, чтобы набрать то, что я думал сначала).
Edit5 @MinneapolisCoder9 - более старая версия команд, используемая с 8u181
по 8u191
(на случай, если она кому-нибудь пригодится, хотя и должна была быть удалена с новыми файлами сборки)
cd /var/lib/dpkg/info
sudo sed -i 's|JAVA_VERSION=8u181|JAVA_VERSION=8u191|' oracle-java8-installer.*
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/|' oracle-java8-installer.*
sudo sed -i 's|SHA256SUM_TGZ="1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3"|SHA256SUM_TGZ="53c29507e2405a7ffdbba627e6d64856089b094867479edc5ede4105c1da0d65"|' oracle-java8-installer.*
sudo sed -i 's|J_DIR=jdk1.8.0_181|J_DIR=jdk1.8.0_191|' oracle-java8-installer.*
Edit4 @Glenn Smith - более старая версия команд, используемая с 8u171
по 8u181
(на случай, если она кому-нибудь пригодится, хотя и должна была быть удалена с новыми файлами сборки)
cd /var/lib/dpkg/info
sudo sed -i 's|JAVA_VERSION=8u171|JAVA_VERSION=8u181|' oracle-java8-installer.*
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/|' oracle-java8-installer.*
sudo sed -i 's|SHA256SUM_TGZ="b6dd2837efaaec4109b36cfbb94a774db100029f98b0d78be68c27bec0275982"|SHA256SUM_TGZ="1845567095bfbfebd42ed0d09397939796d05456290fb20a83c476ba09f991d3"|' oracle-java8-installer.*
sudo sed -i 's|J_DIR=jdk1.8.0_171|J_DIR=jdk1.8.0_181|' oracle-java8-installer.*
Edit3 @Kenny Hung более старая версия команд, используемая от 8u161
до 8u171
(на случай, если она кому-нибудь пригодится, хотя и должна была быть удалена с новыми файлами сборки)
cd /var/lib/dpkg/info
sudo sed -i 's|JAVA_VERSION=8u161|JAVA_VERSION=8u171|' oracle-java8-installer.*
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/|' oracle-java8-installer.*
sudo sed -i 's|SHA256SUM_TGZ="6dbc56a0e3310b69e91bb64db63a485bd7b6a8083f08e48047276380a0e2021e"|SHA256SUM_TGZ="b6dd2837efaaec4109b36cfbb94a774db100029f98b0d78be68c27bec0275982"|' oracle-java8-installer.*
sudo sed -i 's|J_DIR=jdk1.8.0_161|J_DIR=jdk1.8.0_171|' oracle-java8-installer.*
Edit2 @Martin Šuráb/@Albert Zhong/p-ansell более старая версия команд, используемая с 8u151
по 8u162
(на случай, если она кому-нибудь пригодится, хотя и должна была быть удалена с новыми файлами сборки)
cd /var/lib/dpkg/info
sudo sed -i 's|JAVA_VERSION=8u151|JAVA_VERSION=8u162|' oracle-java8-installer.*
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/|' oracle-java8-installer.*
sudo sed -i 's|SHA256SUM_TGZ="c78200ce409367b296ec39be4427f020e2c585470c4eed01021feada576f027f"|SHA256SUM_TGZ="68ec82d47fd9c2b8eb84225b6db398a72008285fafc98631b1ff8d2229680257"|' oracle-java8-installer.*
sudo sed -i 's|J_DIR=jdk1.8.0_151|J_DIR=jdk1.8.0_162|' oracle-java8-installer.*
Edit1 G1zmo2 - более старая версия команд, используемая с 8u144
по 8u152
(на случай, если она кому-нибудь пригодится, хотя она должна была быть удалена с новыми файлами сборки):
cd /var/lib/dpkg/info
sudo sed -i 's|JAVA_VERSION=8u144|JAVA_VERSION=8u152|' oracle-java8-installer.*
sudo sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u152-b16/aa0333dd3019491ca4f6ddbe78cdb6d0/|' oracle-java8-installer.*
sudo sed -i 's|SHA256SUM_TGZ="e8a341ce566f32c3d06f6d0f0eeea9a0f434f538d22af949ae58bc86f2eeaae4"|SHA256SUM_TGZ="218b3b340c3f6d05d940b817d0270dfe0cfd657a636bad074dcabe0c111961bf"|' oracle-java8-installer.*
sudo sed -i 's|J_DIR=jdk1.8.0_144|J_DIR=jdk1.8.0_152|' oracle-java8-installer.*