Добавление /etc/<application> в путь к классам в sbt-native-packager для debian:package-bin

Поэтому я использую packageArchetype.java_server и настраиваю свои отображения так, чтобы файлы из "src / main / resources" помещались в мою папку "/ etc /" в пакете debian. Я использую "sbt debian:package-bin" для создания пакета

Проблема в том, что когда я использую "sbt run", он получает src / main / resources из classpath. Как правильно заставить 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"   
)

....

1 ответ

Решение

Я выбрал немного другой подход. Поскольку sbt-native-packager хранит эти два файла (application.conf и logback.xml) в моем jar-файле распространения пакета, я действительно просто хотел перезаписать (или объединить) эти файлы из / etc. Я сохранил два сопоставления выше и просто добавил следующее:

SRC / главная / шаблоны / и т.д. по умолчанию:

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

Затем в моем коде (используя библиотеки Typesafe Config):

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.

Другие вопросы по тегам