在 sbt-native-packager for debian:package-bin 的类路径中添加 /etc/<application>
Posted
技术标签:
【中文标题】在 sbt-native-packager for debian:package-bin 的类路径中添加 /etc/<application>【英文标题】:Adding /etc/<application> to the classpath in sbt-native-packager for debian:package-bin 【发布时间】:2014-04-23 09:39:05 【问题描述】:所以我正在使用 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"
)
....
【问题讨论】:
【参考方案1】:我采取了稍微不同的方法。由于 sbt-native-packager 将这两个文件(application.conf 和 logback.xml)保存在我的包分发 jar 文件中,我真的只是想要一种从 /etc 覆盖(或合并)这些文件的方法。我保留了上面的两个映射,只是添加了以下内容:
src/main/templates/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 使用的系统属性。
【讨论】:
代码中的系统环境检查可以省略,因为根据当前的 Typesafe 配置 documentation: > 对于使用 application.conf,json,properties 的应用程序,系统属性可用于强制使用不同的配置源 [...] 这些系统属性指定了 application.conf,json,properties 的替换,而不是添加。它们只影响使用默认 ConfigFactory.load() 配置的应用程序。以上是关于在 sbt-native-packager for debian:package-bin 的类路径中添加 /etc/<application>的主要内容,如果未能解决你的问题,请参考以下文章
在 sbt-native-packager 中配置“动态”命令行参数
如何在多个项目中使用 sbt-native-packager
在 sbt-native-packager 的通用包中更改名称
新贵的 daemonUser 在 sbt-native-packager 中不起作用