在 Docker 文件中添加 --add-opens java.base/java.lang=ALL-UNNAMED

问题描述 投票:0回答:1

我有这个 Docker 配置:

# Use a Java runtime as the base image
FROM openjdk:21-slim-buster

VOLUME /tmp

# Copy the built JAR file into the container
ADD build/libs/engine.jar engine.jar

# Expose the default port for the app
EXPOSE 8080

# Start the app when the container launches
ENTRYPOINT ["java", "-jar", "engine.jar", "--spring.config.additional-location=file:/engine-configuration.yml", "--add-opens java.base/java.lang=ALL-UNNAMED"]

我尝试添加

--add-opens java.base/java.lang=ALL-UNNAMED
作为 Java VM 参数,但配置未应用。你知道我如何将此配置添加为 Java VM 参数吗?

docker dockerfile
1个回答
0
投票

扩大回答,特别是因为我遗漏了一个相关点。

--add-opens
是 JVM 选项,JVM 选项必须位于类名、模块名或 jarname 的左侧(如果适用)。 该区域中的参数将传递到 JVM 并解释为选项;类/模块/jarname 右侧的参数将传递给 Java 程序的
main
方法以供 it 进行解释,并且不是 JVM 选项。有些人喜欢将
-jar jarname
-m modulename
保持相邻,在这种情况下,将像这样的其他选项放在
-jar
-m
之前。

此外,您还可以使用单个参数 等号,如

"--add-opens=blah"
,或两个参数,如
"--add-opens","blah"
,但不能使用带有空格的单个参数,如
"--add-opens blah"

因此:

ENTRYPOINT ["java", "-jar", "--add-opens=java.base/java.lang=ALL-UNNAMED", "engine.jar", "--spring.config.additional-location=file:/engine-configuration.yml"]
ENTRYPOINT ["java", "-jar", "--add-opens","java.base/java.lang=ALL-UNNAMED", "engine.jar", "--spring.config.additional-location=file:/engine-configuration.yml"]
ENTRYPOINT ["java", "--add-opens=java.base/java.lang=ALL-UNNAMED", "-jar", "engine.jar", "--spring.config.additional-location=file:/engine-configuration.yml"]
ENTRYPOINT ["java", "--add-opens","java.base/java.lang=ALL-UNNAMED", "-jar", "engine.jar", "--spring.config.additional-location=file:/engine-configuration.yml"]

有效欺骗
尝试部署可执行 JAR 时 java.library.path 上缺少库
Apache Tika 解析器无法在 fat jar 中工作
Java 如何设置 jar 文件的库路径和本机路径
对于不同的 JVM 选项 (

-D
)。

© www.soinside.com 2019 - 2024. All rights reserved.