使用sbt native packager为Scala Play应用构建RPM包遇疑问
首先明确回答你:那个生成的.jar文件绝对不是RPM构建的目标产物,你说得没错,正常使用sbt rpm:packageBin命令应该得到后缀为.rpm的包。
你遇到的关键问题是构建过程中抛出的错误:
[error] rpmVendor in Rpm is empty. Please provide a valid vendor for the rpm SPEC.
这个错误直接导致RPM打包流程中断了,而你看到的[info] Done packaging.其实是sbt默认的package任务(生成普通应用JAR)完成的提示,和RPM打包任务无关——也就是说RPM任务失败了,但基础的JAR打包还是正常执行了,所以你只拿到了JAR文件。
解决步骤:
补充RPM必填配置
在你的项目build.sbt文件中添加rpmVendor配置,这是RPM SPEC文件要求的必填项,示例:rpmVendor := "Your Organization Name" // 替换成你的公司/组织名称为了避免后续可能出现的其他配置缺失问题,还可以补充一些常用的RPM配置项:
rpmSummary := "Scala Play Application" rpmDescription := "Production-ready Scala Play application packaged as RPM" rpmRelease := "1"重新执行RPM打包命令
保存配置后,再次运行:sbt rpm:packageBin这次如果没有其他错误,你会在项目的
target/rpm/RPMS/[your-arch]/目录下找到生成的.rpm文件(比如target/rpm/RPMS/noarch/your-app-name-1.0-1.noarch.rpm)。
额外说明:
sbt Native Packager的RPM任务依赖于完整的SPEC文件配置,必填项缺失时会直接终止RPM构建流程,但不会影响sbt的基础打包任务。所以下次遇到类似情况,优先看错误日志里的提示,而不是只看最后的成功提示哦。
内容的提问来源于stack exchange,提问作者Jenny

