2012-09-11 10 views

Odpowiedz

22

Można zdefiniować wersję w application.conf i niech Build.scala odczytać wartość. Zrobiłem to z numerem wersji i nazwą aplikacji. Poniższe działa w Play 2.0, jest zaktualizowany solution for Play 2.1.

W project/Build.scala załadować konfigurację i inne właściwości:

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

W conf/application.conf określenie właściwości:

app.version = 1.0 
app.name = My Application 

Wreszcie w aplikacji będzie on dostępny z

Play.application().configuration().getString("app.version") 

Składnia konfiguracja ma sporo funkcji, więc można nawet pójść trochę bardziej szalone ze swoimi nazwami wersji lub aplikacji:

app { 
    major = 1 
    minor = 2 
    revision = 3 
    version = ${app.major}.${app.minor}.${app.revision} 
    name = My Application ${app.major}.${app.minor} 
} 
+0

Dzięki, Działa to prawdopodobnie: Build.scala, a nie build.conf? – peter

+0

Tak, oczywiście, dziękuję! Naprawiono to – Kapep

+1

Każdy pomysł, jak to zrobić w Play 2.1? Otrzymuję ten sam błąd, co ta osoba: http: //stackoverflow.com/questions/14430088/play-framework-2-1-use-play-api-configuration-in-build-scala – takteek

10

można uzyskać aktualną wersję zagraj za pomocą:

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

Witam, chcę znać wersję mojego wniosku, a nie wersję gry. – peter

+0

Przepraszam, źle zrozumiałem: - (( –

+0

AFAIK, nie jest to możliwe, ponieważ plik Build.scala jest używany tylko do kompilacji, nie w czasie wykonywania –

15

używam SBT BuildInfo plugin do tego celu:

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

    ... 

) 

generuje ten org.foo.bar.BuildInfo obiekt, który można następnie połączyć z kodu źródłowego:

org.foo.bar.BuildInfo.version 

można również zdefiniować niestandardowe klucze w kompilacji i dodaj je do instrukcji buildInfoKey, co jest bardzo przydatne, jeśli kompilacja staje się bardziej złożona.

3

W ten sposób można dostać wersję aplikacji Play oraz nazwę aplikacji zdefiniowanych w build.sbt

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

Zawiadomienie to działa tylko w trybie prod. W trybie deweloperskim SBT udostępnia instancję JVM z aplikacją, a te wywołania zwracają coś innego.

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

W tym przypadku klasa aplikacji jest klasą zdefiniowaną w projekcie. Może to być dowolna klasa z twojego projektu.

UPDATE

zauważyłem, że ta metoda nie działa po wyjęciu z pudełka do gry> = 2.4.x

Aby rozwiązać ten problem dodać do swojej kompilacji.SBT

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

dwóch właściwości zostanie dołączona do MANIFEST.FM plik w budowie więc tytuł i wersja pakietu można odczytać z kodu.

FYI: Używam SBT rodzimych pakującego

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

Zwróciło to dla mnie 2.4.6 (wersja Play). – FrEaKmAn

+0

Upewnij się, że używasz trybu PROD 'sbt start' i klasy, której używasz, aby otrzymać pakiet w swoim kodzie. – maestr0

Powiązane problemy