Java17下_JAVA_OPTIONS传--add-opens报错,求Nexus IQ参数传递方案
Java 17下Nexus IQ扫描器的JVM参数传递问题解决
问题原因
用_JAVA_OPTIONS传递--add-opens参数失败,是因为这个环境变量仅支持传递JVM运行时参数(比如-Xmx、-Dxxx这类),而--add-opens属于JVM的启动级模块化参数,JVM不会从_JAVA_OPTIONS中读取这类参数,所以会抛出“Unrecognized option”错误。直接执行java --add-opens ...正常,是因为该参数直接作为启动参数传给JVM,符合它的读取逻辑。
可行的参数传递方式
1. 使用JAVA_TOOL_OPTIONS环境变量
这个环境变量专门用于传递JVM启动参数,包括模块化相关选项,JVM会自动读取其内容。设置方式:
# Linux/macOS export JAVA_TOOL_OPTIONS='--add-opens java.base/java.lang=ALL-UNNAMED' # Windows(PowerShell) $env:JAVA_TOOL_OPTIONS='--add-opens java.base/java.lang=ALL-UNNAMED'
设置后直接执行CI中原有的Nexus IQ启动命令即可,JVM会自动加载该参数。
2. 包装启动脚本
如果CI允许自定义执行脚本,把原启动命令包装成脚本文件,手动加入参数:
#!/bin/bash # 替换为CI中实际的nexus-iq-cli.jar路径和原有参数 java --add-opens java.base/java.lang=ALL-UNNAMED -jar nexus-iq-cli.jar [原命令的其他参数]
之后在CI中执行这个脚本,代替原来的java -jar命令。
3. 配置Nexus IQ专属配置文件
部分Java工具支持在专属配置文件中指定JVM参数,查看Nexus IQ扫描器的部署目录,是否存在类似nexus-iq-cli.conf或jvm.options的文件,在其中添加:
--add-opens java.base/java.lang=ALL-UNNAMED
保存后重新执行扫描命令即可生效。
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

