2012-09-11 23 views
17

私はPlay Framework 2.0(2.0.3)を使用します。 私はJavaプロジェクトを持っており、Build.scalaで定義されたアプリケーションのバージョン(appVersion)を読みたいと思っています。Play Framework 2:Build.scalaで定義されたアプリケーションのバージョンを読む

私がすでに見たのは、Global.javaに提供されているApplicationオブジェクトから特定の構成の詳細を読み取ることは可能ですが、appVersionなどのキーは見つかりませんでした。

答えて

22

をあなたはapplication.confでバージョンを定義し、値を読み取るBuild.scalaさせることができます。私はバージョン番号とアプリケーション名でこれを行いました。 Play 2.0では次のように動作します。solution for Play 2.1が更新されています。 project/Build.scala

、コンフィギュレーションをロードし、プロパティを取得:conf/application.conf

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") 

は、プロパティを定義します。

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} 
} 
+0

ありがとうございます、それは動作します!あなたはおそらくBuild.scalaを意味し、build.confを意味しませんでしたか? – peter

+0

もちろん、ありがとうございました! – Kapep

+1

Play 2.1でこの問題を解決する方法はありますか?この人物と同じエラーが発生しています。http: //stackoverflow.com/questions/14430088/play-framework-2-1-use-play-api-configuration-in-build-scala – takteek

10

あなたは使用してプレイの現在のバージョンを取得することができます:

play.core.PlayVersion.current(); 
+0

SBTネイティブパッケージャを使用するこんにちは、私は私のアプリケーションではなくプレイのバージョンのバージョンを知りたいです。 – peter

+0

申し訳ありませんが、私は誤解しました: - (( –

+0

AFAIK、Build.scalaファイルはビルドにのみ使用され、実行時ではないので使用できません) –

15

私は、この目的のためにSBT BuildInfo pluginを使用します。

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.version 

:あなたは、ソースコードから呼び出すことができますorg.foo.bar.BuildInfoオブジェクトキーをビルドに追加してbuildInfoKeysに追加します。ビルドが複雑になる場合は非常に便利です。

3

これはPlayアプリケーションのバージョンとあなたのbuild.sbt

name := "myApp" 
version :="1.0.4" 

お知らせPRODモードでのみ動作で定義されているアプリケーション名を取得する方法です。 devモードでは、SBTはアプリケーションとJVMインスタンスを共有し、それらの呼び出しは異なる何かを返します。

Application.class.getPackage().getImplementationTitle());  // returns "myApp" 
Application.class.getPackage().getImplementationVersion()); // returns "1.0.4" 

この場合、アプリケーションクラスはプロジェクトで定義されたクラスです。プロジェクトのどのクラスでも構いません。

UPDATE

私は、このメソッドはビルドにこれを追加し問題を解決するにはプレイ> = 2.4.xのために箱から出して

機能しないことに気づきました。SBT

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

二つの性質がそうパッケージのタイトルとバージョンは、コードから読み取ることができ、あなたのビルドにMANIFEST.FMファイルに追加されます。

はFYI:私は

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.3") 
+2

これは私のために2.4.6(再生版)を返しました。 – FrEaKmAn

+0

PRODモード 'sbt start'を使用していることを確認してください。パッケージを入手するために使用しているクラスがあなたのコードにあります。 – maestr0

関連する問題