如何从命令行读取Play!应用版本及Typesafe配置值?
在SBT中读取Play应用application.conf里的版本号
你完全不用自己手动解析application.conf文件,SBT本身就有办法帮你读取Typesafe配置里的值,操作起来不复杂,刚好能满足你从命令行获取版本号、用来命名文件或者做自动Git提交的需求。
方法一:直接加载配置文件读取
你可以在build.sbt里添加一段代码,把application.conf中的app.version值加载出来,再暴露成一个可从命令行调用的任务:
import com.typesafe.config.ConfigFactory lazy val appVersionFromConf = taskKey[String]("读取application.conf中的app.version值") appVersionFromConf := { val config = ConfigFactory.parseFile(new File("conf/application.conf")) config.getString("app.version") }
添加完成后,在命令行直接运行:
sbt appVersionFromConf
就能看到输出的版本号了。如果是多模块项目,记得调整conf/application.conf的路径,确保指向正确的文件位置。
方法二:借助Play插件的内置配置
如果你用的是Play官方的SBT插件,其实Play已经帮你加载好了配置,直接从Play的配置对象里读取会更简洁:
lazy val appVersionFromConf = taskKey[String]("读取application.conf中的app.version值") appVersionFromConf := { play.PlayImport.PlayKeys.configuration.value.getString("app.version") }
同样运行sbt appVersionFromConf就能拿到版本号。要是需要把这个值用到其他任务里(比如自定义打包文件名),可以这么写:
assemblyJarName := s"my-app-${appVersionFromConf.value}.jar"
适配脚本调用的小技巧
你提到已经创建了临时脚本,其实可以直接在脚本里调用SBT命令来获取纯版本号输出——用show命令能过滤掉多余日志,只返回版本值本身:
APP_VERSION=$(sbt 'show appVersionFromConf' | tail -n 1) echo $APP_VERSION
这样就能在shell脚本里直接拿到版本号来使用了。
内容的提问来源于stack exchange,提问作者kepa
相关产品推荐
相关产品推荐

