sbt docker配置bashScriptExtraDefines报-Xmx2G命令未找到如何解决
报错根因
-Xmx2G: command not found的报错来自对bashScriptExtraDefines配置的用法错误:
- 该配置项接收的内容是直接插入启动脚本的可执行bash代码,并非JVM参数的直接传值入口
- 直接传入
-Xmx2G这类纯参数值时,脚本运行到对应行会将其识别为独立shell命令执行,自然触发命令不存在的错误
正确配置方法
sbt-native-packager生成的启动脚本内置了addJava工具函数,专门用于安全追加JVM启动参数,会自动处理参数拼接、转义逻辑,完全避免参数被误识别为命令的问题。修改后的build.sbt配置如下:
.settings(dockerEntrypoint := Seq("/opt/docker/bin/service-main")) .settings(bashScriptExtraDefines ++= serviceJavaOpts.map(opt => s"""addJava "$opt"""")) lazy val serviceJavaOpts = List( "-Xmx2G" )
扩展说明
后续如果需要新增其他JVM参数,比如堆初始大小、GC策略、元空间配置等,只需要把参数值追加到serviceJavaOpts列表即可,不需要调整其他配置逻辑。即使参数包含空格、特殊字符,addJava函数也会自动处理转义,不会出现解析异常。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

