web-dev-qa-db-ja.com

Play Framework 2:Build.scalaで定義されているアプリケーションバージョンを読む

Play Framework 2.0(2.0.3)を使用しています。 Javaプロジェクトがあり、Build.scalaで定義されているアプリケーションバージョン(appVersion)を読みたいです。

私がすでに見たのは、Global.Javaに提供されたApplicationオブジェクトから特定の構成の詳細を読み取ることができるが、appVersionなどと呼ばれるキーが見つからなかったことです。

19
peter

application.confでバージョンを定義し、Build.scalaに値を読み取らせることができます。これは、バージョン番号とアプリケーション名を使用して行いました。以下はPlay2.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}
}
23
kapex

私はこの目的のために 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に追加することもできます。これは、ビルドがより複雑になる場合に非常に便利です。

18

以下を使用して、Playの現在のバージョンを取得できます。

play.core.PlayVersion.current();
9
ndeverge

これは、Playアプリケーションのバージョンとアプリケーション名を取得する方法ですbuild.sbt

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
)

2つのプロパティがビルドのMANIFEST.FMファイルに追加されるため、パッケージのタイトルとバージョンをコードから読み取ることができます。

fyi:SBTネイティブパッケージャーを使用しています

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