Play框架:从Build.sbt中读取版本

5
我看到了很多关于如何从build.sbt读取版本的问题,并且已经提供了许多解决方法,例如将build.sbt指向conf/application.conf并在其中指定版本。
我有一个需要获取版本的配置对象。我目前已经按照此链接中的方式(How get application version in play framework and build.sbt)设置了application.conf中的配置对象。但是,我仍然希望直接从build.sbt获取版本。我该如何做?也许我应该在build.sbt文件上运行bash命令以从那里获取版本?有什么建议吗?
谢谢!

2
看一下 sbt-buildinfo,它可能会对你有所帮助。 - ahjohannessen
1
我尝试使用它,但是当我导入包时出现了奇怪的错误(我记不清是什么了,那是几个小时前的事了)。编辑:这个错误是"sbt.ResolveException: unresolved dependency: com.eed3si9n#sbt-buildinfo;0.5.0: not found"。 - Keren
我使用 MyClass.class.getPackage().getImplementationVersion() 来实现这个功能。但是它只在发布时有效,而在开发过程中无法使用。 - Kris
2个回答

7
我们通过build-info获取了信息,以下是一些详细配置。
  1. Add plugins (we also include sbt-git since we want git version as well) into project/plugins.sbt

    addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "0.8.4")
    addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.5.0")
    
  2. Configure plugins in build.sbt

    enablePlugins(BuildInfoPlugin)
    
    enablePlugins(GitVersioning)
    
    buildInfoKeys := Seq[BuildInfoKey](organization, name, version, BuildInfoKey.action("gitVersion") {       
       git.formattedShaVersion.?.value.getOrElse(Some("Unknown")).getOrElse("Unknown") +"@"+ git.formattedDateVersion.?.value.getOrElse("")        
    })
    
    buildInfoPackage := "version"
    
  3. Within views (*.html.scala), display those info simply by

    Version @version.BuildInfo.version - build @version.BuildInfo.gitVersion
    
  4. Or you can just using all values from BuildInfo in your java or scala code, by calling version.BuildInfo.XX


所以我没有更新,但上周我成功让这个工作起来了。基本上,我必须将所有插件内部化到项目中。问题是将构建信息内部映射到应用程序。一旦它被正确地引入并且所有路径都正确地映射出来(耗时且需要处理路径),那么就能够快速让它工作了。 - Keren
plugins.sbt的更新版本: addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0"); addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.2")build.sbt的代码:lazy val root = (project in file(".")) .enablePlugins(PlayScala) .enablePlugins(BuildInfoPlugin) .enablePlugins(GitVersioning) .settings( buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, BuildInfoKey.action("gitVersion") { ...从上面省略... }), buildInfoPackage := "buildInfoArticle" ) - undefined

1
也许不完全符合您的要求,但我曾经使用过这种解决方法(我需要版本用于其他部署步骤):我在主应用程序目录中创建了一个名为app-version.cfg的文件,因此我可以在build.sbt中使用它,例如:
version := scala.io.Source.fromFile("app-version.cfg").mkString

在Unix的bash中:
version=`cat app-version.cfg`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接