Alpine Linux Docker 带有 jre-8 的容器没有 Nashorn 引擎
Alpine Linux Docker Container with jre-8 does not have Nashorn Engine
我有一个基于 FROM anapsix/alpine-java:8_server-jre_unlimited
的 docker 图像。但是,当我尝试
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");
scriptEngine
是 null
。我尝试使用 :
获取默认引擎
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("js");
还有 returns null
,因为它是 java8,我的理解是,它应该 return jdk.nashorn.api.scripting.NashornScriptEngine
这是因为这里的jre-8是Alpine的轻量级版本吗?我应该安装完整的 JDK 来解决这个问题吗?
The project maintainer explicitly removes Nashorn script engine, see the source。在 Github 提交问题并询问维护者原因是什么是有意义的。
Image anapsix/alpine-java
不使用 Alpine 的官方 Java 包,而是使用 Oracle JDK(仅作为针对 glibc 编译的二进制文件分发)和 glibc hack 来制作它以某种方式 运行 在基于 musl 的系统上。 Alpine 不 支持它,我强烈建议您不要使用它。
您可以改用普通的 Alpine 映像并简单地安装 openjdk8 包,其中包括 Nashorn:
echo "http://dl-cdn.alpinelinux.org/alpine/v3.4/community" >> /etc/apk/repositories
apk update
apk add openjdk8
Oracle JDK 只是 OpenJDK(即开源)的品牌(专有)发行版,代码库几乎相同。这意味着 运行 在 Oracle JDK 8 运行 上的几乎所有 Java 应用程序也在 OpenJDK 8.
上
虽然安装openjdk8可以解决问题,但这不是正确的做法。使用 Alpine 的优点是创建最小(大小)docker 图像,这意味着它只有最少的 Java 组件。这就是脚本 API (Nashorn) 已从映像中删除的原因。因此,如果我们需要特定的 Java 功能,例如脚本 API,我们必须切换到完整的 JDK 版本而不使用 Alpine,或者创建一个类似于 Alpine 的自定义基础镜像,但使用编写 API 个组件的脚本(对于这种情况)。
我有一个基于 FROM anapsix/alpine-java:8_server-jre_unlimited
的 docker 图像。但是,当我尝试
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");
scriptEngine
是 null
。我尝试使用 :
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("js");
还有 returns null
,因为它是 java8,我的理解是,它应该 return jdk.nashorn.api.scripting.NashornScriptEngine
这是因为这里的jre-8是Alpine的轻量级版本吗?我应该安装完整的 JDK 来解决这个问题吗?
The project maintainer explicitly removes Nashorn script engine, see the source。在 Github 提交问题并询问维护者原因是什么是有意义的。
Image anapsix/alpine-java
不使用 Alpine 的官方 Java 包,而是使用 Oracle JDK(仅作为针对 glibc 编译的二进制文件分发)和 glibc hack 来制作它以某种方式 运行 在基于 musl 的系统上。 Alpine 不 支持它,我强烈建议您不要使用它。
您可以改用普通的 Alpine 映像并简单地安装 openjdk8 包,其中包括 Nashorn:
echo "http://dl-cdn.alpinelinux.org/alpine/v3.4/community" >> /etc/apk/repositories
apk update
apk add openjdk8
Oracle JDK 只是 OpenJDK(即开源)的品牌(专有)发行版,代码库几乎相同。这意味着 运行 在 Oracle JDK 8 运行 上的几乎所有 Java 应用程序也在 OpenJDK 8.
上虽然安装openjdk8可以解决问题,但这不是正确的做法。使用 Alpine 的优点是创建最小(大小)docker 图像,这意味着它只有最少的 Java 组件。这就是脚本 API (Nashorn) 已从映像中删除的原因。因此,如果我们需要特定的 Java 功能,例如脚本 API,我们必须切换到完整的 JDK 版本而不使用 Alpine,或者创建一个类似于 Alpine 的自定义基础镜像,但使用编写 API 个组件的脚本(对于这种情况)。