3

Java/Gradle スタックから Scala/SBT に移行しています。私たちの gradle ビルドは、processResources というタスクと ReplaceTokens という名前の Ant フィルターを利用して、.properties ファイルを実際に変更することなく (出力を変更するだけで)、チェックインされた .properties ファイル内のトークンを動的に置き換えていました。Gradle タスクは次のようになります。

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
      ]
}

このタスクは、src/main/resources ディレクトリ内のすべてのテンプレート ファイルを検索し、必要な置換を実行して、build/resources/main に結果を出力します。つまり、src/main/resources/buildsig.properties を ... から変換します。

buildsig.version=@buildsig.version@
buildsig.classifier=@buildsig.classifier@
buildsig.timestamp=@buildsig.timestamp@
buildsig.user=@buildsig.user@
buildsig.system=@buildsig.system@
buildsig.tag=@buildsig.tag@

...ビルド/resources/main/buildsig.properties...

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

最終的に、これは WEB-INF/classes/buildsig.properties の WAR ファイルに入ります。これは、実行時にクラスパスからロードされるプロパティ ファイルにビルド固有の情報を記録するチャンピオンのように機能します。

このようなことを行うには、SBT で何をすればよいでしょうか? 私は Scala / SBT を初めて使用するので、これがばかげた質問のように思われる場合はご容赦ください。結局のところ、私が必要としているのは、ビルドした環境から情報を取得し、その情報を実行時にクラスパスをロードできるプロパティ ファイルに配置する手段です。私がこれを成し遂げるのを助けるためにあなたが与えることができるどんな洞察も大歓迎です.

4

2 に答える 2

7

sbt-buildinfo良いオプションです。READMEには、カスタム マッピングと各コンパイルで実行する必要があるマッピングを定義する方法の例が示されています。そこに示されているような通常の設定の単純な追加に加えて、version次のようなセクションが必要です。

buildInfoKeys ++= Seq[BuildInfoKey](
    "hostname" -> java.net.InetAddress.getLocalHost().getHostName(),
    "whoami" -> System.getProperty("user.name"),
    BuildInfoKey.action("buildTimestamp") {
        java.text.DateFormat.getDateTimeInstance.format(new java.util.Date())
    }
)
于 2013-05-16T20:17:57.003 に答える
2

あなたが探しているのは次のようなものでしょうか。

sbt-editsource: ファイル編集用の SBT プラグイン

sbt-editsource は、SBT 0.11.x 以降のテキスト置換プラグインです。ある意味では、SBT にとっては貧乏人の sed(1) です。ソース テキスト ファイルに行ごとの置換を適用して、編集済みの出力ファイルを生成する機能を提供します。次の 2 種類の編集がサポートされています。

${var} が値に置き換えられる変数置換。sed のような正規表現置換。

これはCommunity Pluginsからのものです。

于 2013-05-15T14:47:02.400 に答える