Установите OpenJDK 9 на Ubuntu 16 для всех пользователей

Чего я хочу:

Я хочу установить openjdk 9 на свой компьютер ubuntu (сервер), и он должен быть доступен для всех пользователей.

Что я сделал:

  1. Попробуйте установить с sudo apt-get install openjdk-9-jdk

Версия Java: openjdk version "9-internal" OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src) OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode)

Эта версия выдает исключения при использовании tomcat.

  1. Использование sdkman (http://sdkman.io/) Версия Java: openjdk version "9.0.4" OpenJDK Runtime Environment (build 9.0.4+11) OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)

Эта версия работает хорошо, но доступна только для одного пользователя, и в документе не сказано, как установить / настроить ее в масштабе всей системы для всех пользователей. Это также не работает, когда я запускаю приложение как службу systemd.

У меня нет большого опыта работы с Linux, и я просто ищу самый простой способ установить работающую версию Java 9. Пожалуйста помоги.

Изменить:

Исключение, которое я получил при использовании jdk в 1.:

java.lang.IllegalAccessException: class org.apache.tomcat.util.buf.ByteBufferUtils cannot access class jdk.internal.ref.Cleaner (in module java.base) because module java.base does not export jdk.internal.ref to unnamed module @14d7c1f2
    at sun.reflect.Reflection.throwIllegalAccessException(java.base@9-internal/Reflection.java:411) ~[na:na]
    at sun.reflect.Reflection.throwIllegalAccessException(java.base@9-internal/Reflection.java:402) ~[na:na]
    at sun.reflect.Reflection.ensureMemberAccess(java.base@9-internal/Reflection.java:99) ~[na:na]
    at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(java.base@9-internal/AccessibleObject.java:355) ~[na:na]
    at java.lang.reflect.AccessibleObject.checkAccess(java.base@9-internal/AccessibleObject.java:347) ~[na:na]
    at java.lang.reflect.Method.invoke(java.base@9-internal/Method.java:525) ~[na:na]
    at org.apache.tomcat.util.buf.ByteBufferUtils.<clinit>(ByteBufferUtils.java:67) ~[tomcat-embed-core-8.5.29.jar!/:8.5.29]
    at org.apache.tomcat.util.net.SocketBufferHandler.expand(SocketBufferHandler.java:155) [tomcat-embed-core-8.5.29.jar!/:8.5.29]
    at org.apache.tomcat.util.net.SecureNioChannel.processSNI(SecureNioChannel.java:334) [tomcat-embed-core-8.5.29.jar!/:8.5.29]
    at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:175) [tomcat-embed-core-8.5.29.jar!/:8.5.29]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1436) [tomcat-embed-core-8.5.29.jar!/:8.5.29]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.29.jar!/:8.5.29]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@9-internal/ThreadPoolExecutor.java:1158) [na:na]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@9-internal/ThreadPoolExecutor.java:632) [na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.29.jar!/:8.5.29]
    at java.lang.Thread.run(java.base@9-internal/Thread.java:804) [na:na]

Кажется, что tomcat не замечает, что он работает на Java 9. Когда я использую версию sdkman, я не получаю этого исключения. И это исключение приводит к тому, что рукопожатие SSL больше не работает.

Я использую встроенный tomcat из весенней загрузки 2.0.1.RELEASE


person Peter Lustig    schedule 02.05.2018    source источник
comment
Какие исключения выбрасываются? - Я плохо умею читать мысли.   -  person stdunbar    schedule 02.05.2018
comment
Я обновил свой вопрос и включил полученное исключение   -  person Peter Lustig    schedule 02.05.2018
comment
А какую версию Tomcat вы используете?   -  person stdunbar    schedule 02.05.2018
comment
Я использую встроенный Tomcat из Spring Boot 2.0.1.RELEASE. Я почти уверен, что проблема не в Spring.   -  person Peter Lustig    schedule 02.05.2018


Ответы (1)


В итоге я установил Oracle JDK 10, и он работает как версия sdkman OpenJDK 9 для моего приложения.

sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer

До сих пор не понимаю, почему OpenJDK9, который я установил через aptitude, не работает ...

person Peter Lustig    schedule 02.05.2018
comment
Что касается документации, то в 2020 году. Эта проблема все еще сохраняется в Ubuntu 16.04. Версия aptitude установит внутреннюю версию. - person James Wong; 06.02.2020
comment
Я где-то читал, что более новая версия openjdk будет добавлена ​​только в ubuntu 18+. В итоге я установил openjdk из версии 11 вручную. - person Peter Lustig; 07.02.2020