为什么OpenJDK 8在使用Docker时没有拔出正确的JavaFX库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么OpenJDK 8在使用Docker时没有拔出正确的JavaFX库?相关的知识,希望对你有一定的参考价值。

我有一个我编写的java程序。主要包括OpenJDK8,Maven和JavaFX。该程序自行构建和运行。我想把它放在一个Docker容器中,但是我无法让它构建。

这是我的Dockerfile:

FROM openjdk:8-jdk
FROM maven:3.3-jdk-8-onbuild
RUN apt-get update && apt-get install -y --no-install-recommends openjfx && rm -rf /var/lib/apt/lists/*
CMD ["java","-jar","target/"CodeDemo-1.0-SNAPSHOT.jar"]

以下是我为构建容器而运行的内容:

sudo docker build -t java-maven-code-demo .

这是我一直抱怨没有javafxpackager的错误:

无法在项目CodeDemo上执行目标org.codehaus.mojo:exec-maven-plugin:1.2.1:exec(unpack-dependencies):命令执行失败。无法运行程序“/usr/lib/jvm/java-8-openjdk-amd64/jre/../bin/javafxpackager”(在目录“/ usr / src / app”中):error = 2,没有这样的文件或目录 - > [帮助1]

我有CodeDemo目录中的所有文件。在顶层,我有src,target,Dockerfile,pom.xml。在目标中,我有编译的jar。

我对错误感到困惑,因为我认为Java 8 OpenJDK附带了JavaFX。所以,如果我拉动OpenJDK,我应该得到我需要的JavaFX(similar question on GitHub - 解决方案仍然给出了错误)。

任何人都可以指出我可能做错的方向吗?我还应该做些什么来获得合适的库?

答案

你有多个FROM线。根据您的Dockerfile,将只使用maven基本映像。也许在安装openjfx之前尝试通过另一个RUN语句安装openjdk?

我也没有在你的Dockerfile中看到任何COPY语句。我最初假设CodeDemo-1.0-SNAPSHOT.jar默认存在于maven图像上,但我只是尝试构建图像并且它不存在。如果这是来自Java程序的jar文件,请不要忘记通过Dockerfile中的COPY语句添加它。

以上是关于为什么OpenJDK 8在使用Docker时没有拔出正确的JavaFX库?的主要内容,如果未能解决你的问题,请参考以下文章

ARM64架构下,OpenJDK的官方Docker镜像为何没有8版本?

为 Spring Boot 应用程序基于“openjdk:8-jdk-alpine”构建 docker 映像时无法运行“./mvnw clean install”

从“openjdk:8-jdk-alpine”为 Spring Boot 应用程序构建 docker 映像时无法运行“RUN ./mvnw dependency:go-offline -B”

Docker:java:openjdk-8-jdk-alpine 图像缺少 javac 和 tools.jar

修改,编译,GDB调试openjdk8源码(docker环境)

Docker openjdk-8-jdk-alpine 容器时间与jdk时区不同修改方法