我使用 Play Framework 2.0 (2.0.3)。我有一个 Java 项目,想阅读appVersion
Build.scala 中定义的应用程序版本 ( )。
我已经看到的是,可以从Application
提供给 Global.java 的对象中读取某些配置详细信息,但没有找到名为 appVersion 或类似的键。
我使用 Play Framework 2.0 (2.0.3)。我有一个 Java 项目,想阅读appVersion
Build.scala 中定义的应用程序版本 ( )。
我已经看到的是,可以从Application
提供给 Global.java 的对象中读取某些配置详细信息,但没有找到名为 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")
配置语法有很多特性,所以你甚至可以更疯狂地使用你的版本或应用程序名称:
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 类是在您的项目中定义的类。它可以是您项目中的任何类。
更新
我注意到此方法不适用于 Play >=2.4.x
要解决此问题,请将其添加到您的 build.sbt
packageOptions += Package.ManifestAttributes(
"Implementation-Version" -> (version in ThisBuild).value,
"Implementation-Title" -> name.value
)
这两个属性将附加到构建中的 MANIFEST.FM 文件中,以便可以从代码中读取包标题和版本。
仅供参考:我使用 SBT 原生打包器
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.3")