加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用Typesafe Config的ConfigFactory设置build.sbt中的

发布时间:2020-12-16 09:10:17 所属栏目:安全 来源:网络整理
导读:sbt.version = 0.13.1 在build.sbt中,我通过调用一个我的项目依赖关系的代码来分配一个设置键,然后通过Typesafe Config的ConfigFactory配置自己的代码.我的依赖项在jar的根目录中有一个reference.conf,我的项目本身包含src / main / resources中的一个覆盖的
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为这样的情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读