在Ubuntu 16上为所有用户安装OpenJDK 9

时间:2018-05-02 01:30:36

标签: java ubuntu sdkman

我想要的是什么:

我想在我的ubuntu(服务器)计算机上安装openjdk 9,它应该适用于所有用户。

我做了什么:

  1. 尝试使用sudo apt-get install openjdk-9-jdk
  2. 进行安装

    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)
    2. 此版本运行良好,但它仅适用于一个用户,并且doc没有说明如何为所有用户在系统范围内安装/配置它。 当我将应用程序作为systemd服务启动时,它也无法正常工作。

      我对linux没有多少经验,只是寻找安装工作Java 9版本的最简单方法。请帮忙。

      修改

      在1中使用jdk时得到的例外是:

      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握手不再起作用。

      我正在使用spring boot 2.0.1.RELEASE

      的嵌入式tomcat

1 个答案:

答案 0 :(得分:1)

我最终安装了Oracle JDK 10,它的工作方式与sdkman OpenJDK 9版本相似。

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

仍然不知道为什么我通过aptitude安装的OpenJDK9无效...