1

我有一个基于FROM anapsix/alpine-java:8_server-jre_unlimited. 但是,当我尝试

ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");

scriptEnginenull。我尝试使用以下命令获取默认引擎:

ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("js");

它也返回null,因为它是 java8,我的理解是,它应该返回jdk.nashorn.api.scripting.NashornScriptEngine

这是因为这里的 jre-8 是 Alpine 的较轻版本吗?我应该安装完整的JDK来解决这个问题吗?

参考:http ://blog.takipi.com/lean-mean-java-virtual-machine-making-your-docker-7x-lighter-with-alpine-linux/

4

3 回答 3

2

项目维护者明确删除了 Nashorn 脚本引擎,请参阅源代码。在 Github 上提出问题并询问维护者是什么原因是有意义的。

于 2016-08-21T11:38:36.063 回答
2

Imageanapsix/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 上运行。

于 2016-08-21T15:14:26.920 回答
1

虽然安装 openjdk8 可以解决问题,但这不是正确的方法。使用 Alpine 的优势是创建一个最小(大小)的 docker 镜像,这意味着它只有最少的 Java 组件。这就是为什么 Scripting API (Nashorn) 已从图像中移除的原因。因此,如果我们需要特定的 Java 功能,例如 Scripting API,我们必须切换到不使用 Alpine 的完整 JDK 版本,或者创建一个类似于 Alpine 的自定义基础映像,但使用 Scripting API 组件(在这种情况下)。

于 2016-08-21T19:25:49.490 回答