我有这个 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 参数吗?
扩大回答,特别是因为我遗漏了一个相关点。
--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
)。