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
これは、バージョン番号とアプリケーション名を使用して行いました。以下はPlay2.0で動作し、Play2.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}
}
私はこの目的のためにSBTBuildInfoプラグインを使用します:
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
)
2つのプロパティがビルドのMANIFEST.FMファイルに追加されるため、パッケージのタイトルとバージョンをコードから読み取ることができます。
fyi:SBTネイティブパッケージャーを使用しています
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.3")