sbt.版本=0.13.1
In build.sbt
我通过调用一段项目依赖项代码来分配一个设置键,该代码又通过 Typesafe Config 进行自身配置ConfigFactory
。我的依赖有一个reference.conf
在 jar 的根目录中,我的项目本身包含一个压倒一切的application.conf
in src/main/resources
.
顺便说一句,lib/依赖项也是我的代码。
import com.mylib.Finders
import com.myproj.sbt.Keys._
projKeyColorSetting in Compile := Finders.findColor // this calls ConfigFactory.load
seq(projSettings:_*)
构建甚至无法加载,因为它找不到我尝试在库代码中引用的第一个conf密钥。
我在构建文件中尝试了多种范围界定和类路径操作的组合,但无济于事。我以为罐子的reference.conf
本来会在Compile
范围的类路径,但它没有按我的预期工作。
昨天我花了大部分时间仔细研究有关类路径、范围、键、任务和资源生成器的 SBT 文档 - 我的目的是执行一个依赖于projKeyColorSetting
设置在build.sbt
如下:
lazy val projSettings = inConfig(Compile) {
Seq(
resourceGenerators in Compile <+= Def.task {
val fileCreated = createColorFile(projKeyColorSetting.value)
Seq(fileCreated)
}
)
}
如果您从 foo.jar 获取一个类,那么ConfigFactory.load()
应该得到在同一个jar 中找到的reference.conf。如果没有,那么就有问题了,但很难猜测到底是什么问题。可能是reference.conf 中有一些无效的语法;可能是引用.conf 不在 jar 中;可能是 reference.conf 位于子目录中而不是 jar 的根目录中;很难猜测。我会尝试-Dconfig.trace=loads
查找其中的问题(例如,它应该告诉您配置是否尝试加载reference.conf)。你也可以自己做classLoader.getResources
看看是否可以找到不涉及配置的文件。
你也可以尝试ConfigFactory.parseResourcesAnySyntax("reference")
并查看您的参考设置是否在那里,然后尝试致电ConfigFactory.load
直接查看您的设置是否在那里。一般来说,仔细检查所有假设并看看哪里出了问题。
至于如何添加 src/main/resources,两个基本策略是 1) 以某种方式将其放在类路径上(在这种情况下可能很困难;在启动 sbt 之前你需要它,或者需要做一些事情)自定义 ClassLoader 的乐趣)或者可能更实用 2)手动加载ConfigFactory.parseFile()
.
我可能会抓住resourceDirectory
key 作为任务的依赖项,然后执行类似的操作(未经测试):
myTask := {
val resourceDir = (resourceDirectory in Compile).value
val appConfig = ConfigFactory.parseFile(resourceDir / "application.conf")
val config = ConfigFactory.load(appConfig) // puts reference.conf underneath
Finders.findColor(config)
}
请注意,这涉及更改 findColor 以获取Config
参数,或者您可能更愿意使 Finders 成为一个非单例,可以使用Config
;请参阅示例https://github.com/typesafehub/config/blob/master/examples/scala/simple-lib/src/main/scala/simplelib/SimpleLib.scala#L22 https://github.com/typesafehub/config/blob/master/examples/scala/simple-lib/src/main/scala/simplelib/SimpleLib.scala#L22我试图说明当使用Config
通常一个库应该默认为ConfigFactory.load
而且还有一个允许自定义的构造函数Config
对于这样的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)