Kann ich auf meiner Scala app-Namen und-version (wie in SBT) von code?
Baue ich eine app mit SBT (0.11.0) mit einer Scala build-definition etwa so:
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: _*)
[...]
Ich bin Verpackung ein .jar am Ende des Prozesses.
Meine Frage ist einfach: gibt es eine Möglichkeit, den Zugriff auf die Anwendung ist der name"my-app-name") und die version ("0.1") programmgesteuert von mein Scala-code? Ich will nicht wiederholen Sie an zwei stellen, wenn ich helfen kann.
Jede Anleitung sehr dankbar!
- Sind Sie auf der Verpackung eine Dose?
- Sorry, ja - haben sich geklärt meine Frage, vielen Dank Jean-Philippe
- Ich denke, sbt speichert die version in der jar-manifest, Nein?
- Ich bin mir nicht sicher, Jean-Philippe - ich habe gesehen, code wie diesen:
val version = new BufferedReader(new InputStreamReader(getClass.getResourceAsStream("/version"))).readLine()
aber ich habe nicht in der Lage, um es arbeiten...
Du musst angemeldet sein, um einen Kommentar abzugeben.
sbt-buildinfo
Ich schrieb sbt-buildinfo.
Nach der Installation des plugins:
Edit: Das obige snippet wurde aktualisiert, um neuere version der sbt-buildinfo.
Erzeugt es
foo.BuildInfo
Objekt mit jeder Einstellung, die Sie möchten, anpassenbuildInfoKeys
.Ad-hoc-Ansatz
ich habe Sinn zu machen, ein plugin für diese,(ich schrieb es), aber hier ist eine schnelle Skript zum erstellen einer Datei:Können Sie Ihre version als
foo.Info.version
.Seq
und fügen esbasicSettings
als.settings(basicSettings ++ Seq(sourceGenerators in Compile <+= (...) map {...}): _*)
.build.sbt
und nicht sicher, wie kann ich den Zugriff auf diefoo.BuildInfo
aus meiner scala-Klasse? irgendwelche VorschlägeName und version eingefügt werden, manifestieren. Sie können Sie mit Hilfe der java reflection von Paket Klasse.