4

そのため、packageArchetype.java_server を使用してマッピングをセットアップし、「src/main/resources」のファイルが debian パッケージの「/etc/」フォルダーに移動するようにします。「sbt debian:package-bin」を使用してパッケージを作成しています

問題は、「sbt run」を使用すると、クラスパスから src/main/resources が取得されることです。sbt-native-packager に構成ファイルとログ ファイルのリソース クラスパスとして /etc/ を与える正しい方法は何ですか?

plugins.sbt:

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.0-M2")

build.sbt

...

packageArchetype.java_server

packageDescription := "Some Description"

packageSummary := "My App Daemon"

maintainer := "Me<me@example.org>"

mappings in Universal ++= Seq(
   file("src/main/resources/application.conf") -> "conf/application.conf",
   file("src/main/resources/logback.xml") -> "conf/logback.xml"   
)

....
4

1 に答える 1

4

私は少し違うアプローチを取りました。sbt-native-packager はこれら 2 つのファイル (application.conf と logback.xml) をパッケージ配布の jar ファイルに保持するので、/etc からこれらのファイルを上書き (またはマージ) する方法が本当に必要でした。上記の 2 つのマッピングを保持し、以下を追加しました。

ソース/メイン/テンプレート/etc-default:

 -Dmyapplication.config=/etc/${{app_name}}/application.conf
 -Dlogback.configurationFile=/etc/${{app_name}}/logback.xml

次に、コード内で (Typesafe Config Libraries を使用):

lazy val baseConfig = ConfigFactory.load //defaults from src/resources

//For use in Debain packaging script. (see etc-default)
val systemConfig = Option(System.getProperty("myapplication.config")) match {
  case Some(cfile) => ConfigFactory.parseFile(new File(cfile)).withFallback(baseConfig)
  case None => baseConfig
}

そしてもちろん -Dlogback.configuration は Logback によって使用されるシステム プロパティです。

于 2014-03-18T19:37:02.890 に答える