Play Framework 2.0(2.0.3)を使用しています。 Javaプロジェクトがあり、Build.scalaで定義されているアプリケーションバージョン(appVersion
)を読みたいです。
私がすでに見たのは、Global.Javaに提供されたApplication
オブジェクトから特定の構成の詳細を読み取ることができるが、appVersionなどと呼ばれるキーが見つからなかったことです。
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}
}
私はこの目的のために 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();
これは、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")