Hat sbt so etwas wie die processResources-Task von gradle mit ReplaceTokens-Unterstützung?

Wir wechseln von einem Java / Gradle-Stack nach Scala / SBT. Unsere Gradle-Builds verwendeten eine Task namens processResources und einen Ant-Filter namens ReplaceTokens, um Token in einer eingecheckten .properties-Datei dynamisch zu ersetzen, ohne die .properties-Datei tatsächlich zu ändern (nur die Ausgabe zu ändern). Die Gradle-Aufgabe sieht folgendermaßen aus:

processResources {
  def whoami = System.getProperty( 'user.name' );
  def hostname = InetAddress.getLocalHost().getHostName()
  def buildTimestamp = new Date().format('yyyy-MM-dd HH:mm:ss z')

  filter ReplaceTokens, tokens: [
          "buildsig.version" : project.version,
          "buildsig.classifier" : project.classifier,
          "buildsig.timestamp" : buildTimestamp,
          "buildsig.user" : whoami,
          "buildsig.system" : hostname,
          "buildsig.tag" : buildTag
      ]
}

Diese Task sucht alle Vorlagendateien im Verzeichnis src / main / resources, führt die erforderlichen Ersetzungen durch und gibt die Ergebnisse unter build / resources / main aus. Mit anderen Worten, es transformiert src / main / resources / buildsig.properties von ...

[email protected]@
[email protected]@
[email protected]@
[email protected]@
[email protected]@
[email protected]@

... um / resources / main / buildsig.properties zu erstellen ...

buildsig.version=1.6.5
buildsig.classifier=RELEASE
buildsig.timestamp=2013-05-06 09:46:52 PDT
buildsig.user=jenkins
buildsig.system=bobk-mbp.local
buildsig.tag=dev

Das findet schließlich seinen Weg in die WAR-Datei unter WEB-INF / classes / buildsig.properties. Dies funktioniert wie ein Champion, der Build-spezifische Informationen in einer Eigenschaftendatei aufzeichnet, die zur Laufzeit aus dem Klassenpfad geladen wird.

Was mache ich in SBT, um so etwas zu erledigen? Ich bin neu in Scala / SBT, bitte verzeihen Sie mir, wenn dies eine dumme Frage ist. Letztendlich brauche ich ein Mittel, um einige Informationen aus der Umgebung, auf der ich aufbaue, abzurufen und diese Informationen in eine Eigenschaftendatei zu platzieren, deren Klassenpfad zur Laufzeit geladen werden kann. Alle Einblicke, die Sie mir geben können, um dies zu erreichen, sind sehr dankbar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage