首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用docker运行Java 9应用程序不起作用- UnsupportedClassVersionError

使用docker运行Java 9应用程序不起作用- UnsupportedClassVersionError
EN

Stack Overflow用户
提问于 2017-10-30 15:31:12
回答 1查看 3.3K关注 0票数 3

我将我的应用程序从Java 8改为Java9,将Windows环境变量(path)和JAVA_HOME更改为Java9 (jdk-9.0.1)。

在IDE (IntelliJ)中运行应用程序时,它工作得很好。它还编译没有问题的sbt。只使用docker运行应用程序是行不通的。

这个应用程序似乎是用Java 9成功编译的,但是docker试图用Java 8运行它(这就是我从异常消息中读取的)。

命令:

代码语言:javascript
复制
sbt docker:publish

docker run --rm -p 9000:9000 eu.gcr.io/the-repository-name/the-image-name:1.0

我得到以下错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.UnsupportedClassVersionError: 
    Module has been compiled by a more recent version of the 
    Java Runtime (class file version 53.0), this version of the 
    Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at play.api.inject.Modules$.locate(Module.scala:119)
        at play.api.inject.guice.GuiceableModule$.loadModules(GuiceInjectorBuilder.scala:276)
        at play.api.inject.guice.GuiceApplicationBuilder$.$anonfun$$lessinit$greater$default$9$1(GuiceApplicationBuilder.scala:30)
        at play.api.inject.guice.GuiceApplicationBuilder.applicationModule(GuiceApplicationBuilder.scala:102)
        at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:185)
        at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:137)
        at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
        at play.core.server.ProdServerStart$.start(ProdServerStart.scala:51)
        at play.core.server.ProdServerStart$.main(ProdServerStart.scala:25)
        at play.core.server.ProdServerStart.main(ProdServerStart.scala)

我要做什么,那个码头工人使用Java 9?

代码语言:javascript
复制
java --version
java 9.0.1
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

docker version
Client:
 Version:      17.10.0-ce
 API version:  1.33
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:00:02 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.10.0-ce
 API version:  1.33 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:05:23 2017
 OS/Arch:      linux/amd64
 Experimental: true
  • 播放版本: 2.6.7
  • Scala版本2.12.4
  • SBT版本: 1.0.2
  • sbt-本机-包装机: 1.3.1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-17 18:04:23

此错误意味着您试图在Java的较旧版本(类版本为52.0)中使用Java的更新版本(9版本具有类版本53.0)来运行编译的代码。所以,您的坞映像可能已经安装了Java 8。我们去做些侦探工作吧。:-)

如果我正确理解,您正在使用sbt-本机包程序来生成您的Docker映像。如果是这样的话,sbt本机包程序正在使用openjdk:latest映像作为基本映像,如下所示:

https://github.com/sbt/sbt-native-packager/blob/v1.3.1/src/main/scala/com/typesafe/sbt/packager/docker/DockerPlugin.scala#L69

Version1.3.1是Play 2.6.7使用的版本,您还可以在这里看到:

https://github.com/playframework/playframework/blob/2.6.7/framework/project/plugins.sbt#L8

问题是openjdk:latest映像使用Java8,您可以通过查看latest代码链接到图像页来确认这一点。以下是代码:

https://github.com/docker-library/openjdk/blob/a893fe3cd82757e7bccc0948c88bfee09bd916c3/8-jdk/Dockerfile#L38-L43

考虑到这一点,您可能希望将dockerBaseImage更改为使用使用Java9的基本映像,例如:

代码语言:javascript
复制
dockerBaseImage := "9-jdk"

您可以在这里看到图像版本的完整列表:/openjdk/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47018976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档