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

pet*_*ter 19 java version playframework-2.0

我使用Play Framework 2.0(2.0.3).我有一个Java项目,想要读取appVersionBuild.scala中定义的应用程序版本().

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

kap*_*pex 24

您可以定义版本application.confBuild.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")
Run Code Online (Sandbox Code Playgroud)

conf/application.conf定义属性时:

app.version = 1.0
app.name = My Application
Run Code Online (Sandbox Code Playgroud)

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

 Play.application().configuration().getString("app.version")
Run Code Online (Sandbox Code Playgroud)

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

app {
  major    = 1
  minor    = 2
  revision = 3
  version = ${app.major}.${app.minor}.${app.revision}
  name = My Application ${app.major}.${app.minor}
}
Run Code Online (Sandbox Code Playgroud)


Man*_*rdt 18

我为此目的使用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",

  ...

)
Run Code Online (Sandbox Code Playgroud)

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

org.foo.bar.BuildInfo.version
Run Code Online (Sandbox Code Playgroud)

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


nde*_*rge 9

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

play.core.PlayVersion.current();
Run Code Online (Sandbox Code Playgroud)


mae*_*tr0 5

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

name := "myApp"
version :="1.0.4" 
Run Code Online (Sandbox Code Playgroud)

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

Application.class.getPackage().getImplementationTitle());     // returns "myApp"
Application.class.getPackage().getImplementationVersion());    // returns "1.0.4"
Run Code Online (Sandbox Code Playgroud)

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

更新

我注意到,对于Play> = 2.4.x,此方法无法立即使用

要解决该问题,请将其添加到您的build.sbt

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

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

仅供参考:我使用SBT本机打包程序

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.3")
Run Code Online (Sandbox Code Playgroud)

  • 这为我返回了2.4.6(播放版本)。 (2认同)