Je construis une application avec SBT (0.11.0) à l'aide d'un Scala Construire une définition comme suit:
object MyAppBuild extends Build {
import Dependencies._
lazy val basicSettings = Seq[Setting[_]](
organization := "com.my",
version := "0.1",
description := "Blah",
scalaVersion := "2.9.1",
scalacOptions := Seq("-deprecation", "-encoding", "utf8"),
resolvers ++= Dependencies.resolutionRepos
)
lazy val myAppProject = Project("my-app-name", file("."))
.settings(basicSettings: _*)
[...]
Je suis en train d'emballer un .jar à la fin du processus.
Ma question est une solution simple: existe-t-il un moyen d'accéder à la noms de l'application ("nom mon-application") et de la version ("0,1") à partir de mon Scala=== Don ' Je veux les répéter à deux endroits si je peux l'aider.
Toute directive grandement appréciée!
Je viens d'écrire sbt-buildinfo . Après avoir installé le plugin:
lazy val root = (project in file(".")).
enablePlugins(BuildInfoPlugin).
settings(
buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),
buildInfoPackage := "foo"
)
Edit: L'extrait ci-dessus a été mis à jour pour refléter une version plus récente de SBT-BuildInfo.
Il génère foo.BuildInfo
Objet avec n'importe quel paramètre que vous voulez en personnalisant buildInfoKeys
.
J'ai eu le sens de faire un plugin pour cela, (Je l'ai écrit) mais voici un script rapide pour générer un fichier:
sourceGenerators in Compile <+= (sourceManaged in Compile, version, name) map { (d, v, n) =>
val file = d / "info.scala"
IO.write(file, """package foo
|object Info {
| val version = "%s"
| val name = "%s"
|}
|""".stripMargin.format(v, n))
Seq(file)
}
Vous pouvez obtenir votre version comme foo.Info.version
.
Le nom et la version sont insérés dans Manifest. Vous pouvez y accéder en utilisant Java réflexion de package classe.
val p = getClass.getPackage
val name = p.getImplementationTitle
val version = p.getImplementationVersion