2012-09-11 13 views

Respuesta

22

Usted puede definir la versión en application.conf y dejar Build.scala leer el valor. Hice esto con el número de versión y el nombre de la aplicación. Los siguientes trabajos en Play 2.0, hay un solution for Play 2.1 actualizado.

En project/Build.scala, cargar la configuración y obtener las propiedades:

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

En conf/application.conf definir las propiedades:

app.version = 1.0 
app.name = My Application 

último en su aplicación será accesible con

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

La sintaxis de configuración tiene bastantes características, por lo que incluso puede ir un poco más loca con tu versión de aplicación o nombres:

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

Gracias, funciona Probablemente se refirió a Build.scala y no build.conf? – peter

+0

Sí, por supuesto, gracias! Se corrigió – Kapep

+1

Alguna idea de cómo hacer que esto funcione en Play 2.1? Estoy obteniendo el mismo error que esta persona: http: //stackoverflow.com/questions/14430088/play-framework-2-1-use-play-api-configuration-in-build-scala – takteek

10

, usted puede obtener la versión actual del juego mediante el uso de:

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

Hola, quiero saber la versión de mi solicitud y no la versión del juego. – peter

+0

Lo siento, he entendido mal: - (( –

+0

AFAIK, no es posible, ya que el archivo Build.scala solo se usa para la compilación, no en tiempo de ejecución –

15

utilizo el SBT BuildInfo plugin para este propósito:

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

    ... 

) 

Esto genera org.foo.bar.BuildInfo un objeto que luego se puede llamar desde el código fuente:

org.foo.bar.BuildInfo.version 

también puede definir personalizada claves en la compilación y agréguelas a buildInfoKeys, que es bastante útil si su compilación se vuelve más compleja.

3

Así es como se puede obtener versión de la aplicación Play y nombre de la aplicación definidos en su build.sbt

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

Aviso esto sólo funciona en el modo PROD. En el modo de desarrollo, SBT comparte una instancia de JVM con la aplicación y esas llamadas devuelven algo diferente.

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

En este caso la clase de aplicación es una clase definida en el proyecto. Puede ser cualquier clase de tu proyecto.

ACTUALIZACIÓN

me di cuenta de que este método no funciona fuera de la caja de Juego> = 2.4.x

Para solucionar el problema de añadir esto a su acumulación.SBT

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

Las dos propiedades se anexará a MANIFEST.FM archivo en su construcción lo que el título del paquete y la versión se pueden leer desde el código.

FYI: Yo uso SBT empaquetador nativa

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

Esto me devolvió 2.4.6 (versión Play). – FrEaKmAn

+0

Asegúrese de utilizar el modo PROD 'sbt start' y la clase que está utilizando para obtener el paquete está en su código. – maestr0

Cuestiones relacionadas