Play Framework 2:阅读Build.scala中定义的应用程序版本

我使用Play Framework 2.0(2.0.3)。 我有一个Java项目,想要阅读appVersion定义的应用程序版本( appVersion )。

我已经看到的是,可以从提供给Global.java的Application对象中读取某些配置细节,但是没有找到名为appVersion或类似的键。

您可以在application.conf定义版本,并让Build.scala读取值。 我用版本号和应用程序名称做了这个。 以下适用于Play 2.0,有一个Play 2.1的更新解决方案 。

project/Build.scala ,加载配置并获取属性:

 val conf = play.api.Configuration.load(new File(".")) val appName = conf.getString("app.name").getOrElse("unnamed application") val appVersion = conf.getString("app.version").getOrElse("0.0.0") 

conf/application.conf定义属性:

 app.version = 1.0 app.name = My Application 

最后在您的应用程序中,它将可以访问

  Play.application().configuration().getString("app.version") 

配置语法有很多function,所以你甚至可以对你的版本或应用程序名称更加疯狂:

 app { major = 1 minor = 2 revision = 3 version = ${app.major}.${app.minor}.${app.revision} name = My Application ${app.major}.${app.minor} } 

我为此目的使用SBT BuildInfo插件 :

 import sbtbuildinfo.Plugin._ val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA, settings = Defaults.defaultSettings ++ buildInfoSettings).settings( buildInfoKeys := Seq[Scoped](name, appVersion, scalaVersion, sbtVersion), buildInfoPackage := "org.foo.bar", ... ) 

这会生成一个org.foo.bar.BuildInfo对象,然后您可以从源代码中调用它:

 org.foo.bar.BuildInfo.version 

您还可以在构建中定义自定义键并将它们添加到buildInfoKeys,如果构建变得更复杂,这非常有用。

您可以使用以下方式获取当前版本的Play:

 play.core.PlayVersion.current(); 

这是您可以获得build.sbt中定义的Play应用程序版本和应用程序名称的方法

 name := "myApp" version :="1.0.4" 

请注意,这仅适用于PROD模式。 在开发模式下,SBT与应用程序共享一个JVM实例,这些调用返回不同的内容。

 Application.class.getPackage().getImplementationTitle()); // returns "myApp" Application.class.getPackage().getImplementationVersion()); // returns "1.0.4" 

在这种情况下,Application类是项目中定义的类。 它可以是您项目中的任何类。

UPDATE

我注意到这个方法对Play> = 2.4.x开箱即用

要解决此问题,请将此添加到build.sbt

 packageOptions += Package.ManifestAttributes( "Implementation-Version" -> (version in ThisBuild).value, "Implementation-Title" -> name.value ) 

这两个属性将附加到构建中的MANIFEST.FM文件中,因此可以从代码中读取包标题和版本。

fyi:我使用SBT原生包装

 addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.3")