Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有jre-8的Alpine Linux Docker容器没有Nashorn引擎_Java_Docker_Rhino_Nashorn_Alpine - Fatal编程技术网

Java 带有jre-8的Alpine Linux Docker容器没有Nashorn引擎

Java 带有jre-8的Alpine Linux Docker容器没有Nashorn引擎,java,docker,rhino,nashorn,alpine,Java,Docker,Rhino,Nashorn,Alpine,我有一个docker镜像,基于anapsix/alpine java:8_server-jre_unlimited的。然而,当我尝试 ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn"); scriptEngine为null。我尝试使用以下工具获取默认引擎: ScriptEngine scriptEngine = new ScriptEngineManager().getEngineBy

我有一个docker镜像,基于anapsix/alpine java:8_server-jre_unlimited的
。然而,当我尝试

ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");
scriptEngine
null
。我尝试使用以下工具获取默认引擎:

ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("js");
它还返回
null
,因为它是java8,我的理解是,它应该返回
jdk.nashorn.api.scripting.NashornScriptEngine

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


参考资料:

维护人员显式删除Nashorn脚本引擎,请参阅。在Github上提交一个问题并询问维护人员原因是什么是有意义的。

维护人员明确删除Nashorn脚本引擎,请参阅。在Github上提交一个问题并询问维护人员是什么原因是有意义的。

Image
anapsix/alpine java
不使用alpine的官方java软件包,而是使用glibc hack在基于musl的系统上运行Oracle JDK(仅作为针对glibc编译的二进制文件分发)。阿尔卑斯山不支持它,我强烈建议您不要使用它

您可以改为使用普通的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上运行。

Image
anapsix/alpine Java
没有使用alpine的官方Java包,但Oracle JDK(仅作为针对glibc编译的二进制文件分发)使用glibc hack使其以某种方式在基于musl的系统上运行。阿尔卑斯山不支持它,我强烈建议您不要使用它

您可以改为使用普通的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上运行。

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

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

官方
java:8-jre
java:8-jre-alpine
图像都有
NashornScriptEngine
,因此我认为没有理由使用第三方替代方案。如果您出于某种原因需要它,请咨询维护人员。官方的
java:8-jre
java:8-jre-alpine
图像都有
NashornScriptEngine
,因此我认为没有理由使用第三方替代方案。如果您出于某种原因需要它,请咨询维护人员。您是否有理由建议构建自己的映像,而不是重用现有的
openjdk:8-alpine
。@AlexanderAzarov我不知道,我不使用Docker。你链接的图像使用了Alpine的openjdk8包,所以应该也可以。我通过安装openjdk8暂时解决了这个问题谢谢-在你发布它2年后,这帮了我一个忙。这是你建议创建自己的图像而不是重用现有的
openjdk:8-Alpine
的原因吗?@AlexanderAzarov I dunno,我不使用Docker。你链接的图片使用了Alpine的openjdk8包,所以应该也可以。我已经通过安装openjdk8暂时解决了这个问题谢谢你-在你发布它2年后,这有很多帮助。不久前,添加了一个Nashorn变体。即:
8u202b08_服务器-jre_-nashorn
8u202b08_-jdk_-nashorn
8_-jdk_-nashorn
8_服务器-jre_-nashorn
。。不过,由于Oracle的许可证变更,整个系统最近被弃用。不久前,添加了一个Nashorn变体。即:
8u202b08_服务器-jre_-nashorn
8u202b08_-jdk_-nashorn
8_-jdk_-nashorn
8_服务器-jre_-nashorn
。。不过,由于Oracle的许可证变更,整个系统最近遭到了抨击。