scala – 使用Typesafe Config的ConfigFactory设置build.sbt中的
sbt.version = 0.13.1
在build.sbt中,我通过调用一个我的项目依赖关系的代码来分配一个设置键,然后通过Typesafe Config的ConfigFactory配置自己的代码.我的依赖项在jar的根目录中有一个reference.conf,我的项目本身包含src / main / resources中的一个覆盖的application.conf. lib /依赖也是我的代码,btw. import com.mylib.Finders import com.myproj.sbt.Keys._ projKeyColorSetting in Compile := Finders.findColor // this calls ConfigFactory.load seq(projSettings:_*) 该构建甚至不加载,因为它找不到我的lib代码中尝试引用的第一个conf键. 我在我的构建文件中尝试了一些范围和类路径操作的组合,但是没有效果.我假设jar的reference.conf将在Compile范围的classpath中,但是它不能像我预期的那样工作. 我花了大部分时间在Classpath,Scopes,Keys,Tasks和ResourceGenerators上处理SBT文档 – 我的目的是执行一个依赖于build.sbt中projKeyColorSetting设置的自定义插件,如下所示: 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中有一些无效的语法;可能是reference.conf不在jar中;可能是reference.conf在一个子目录而不是jar的根目录中;很难猜到我会尝试-Dconfig.trace =加载来查找那里的问题(应该告诉你,config是否尝试加载reference.conf).你也可以自己做一个classLoader.getResources,看看你是否可以找到没有配置文件的文件.
您也可以尝试使用ConfigFactory.parseResourcesAnySyntax(“reference”),并查看您的参考设置是否在那里,并尝试直接调用ConfigFactory.load,看看您的设置是否在那里.一般来说,仔细检查所有的假设,看看哪里出错了. 至于如何添加src / main / resources,这两个基本策略将是1)以某种方式将它放在类路径上(在这种情况下可能很困难),甚至在启动sbt之前需要它,或者需要做某种事情的自定义ClassLoader乐趣)或者可能更实用2)使用ConfigFactory.parseFile()手动加载它. 我可能会抓住resourceDirectory键作为任务的依赖,然后执行类似(未测试)的操作: 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) } 请注意,这涉及到更改find??Color以获取Config参数,或者您可能希望使Finders成为可以使用Config构造的非单例;请参阅https://github.com/typesafehub/config/blob/master/examples/scala/simple-lib/src/main/scala/simplelib/SimpleLib.scala#L22的示例,其中我试图说明当使用Config时,通常库应该默认为ConfigFactory.load,但也有一个构造函数允许自定义Config为这样的情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |