使用 Typesafe Config 的 ConfigFactory 在 build.sbt 中设置密钥设置?

2023-12-25

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().

我可能会抓住resourceDirectorykey 作为任务的依赖项,然后执行类似的操作(未经测试):

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(使用前将#替换为@)

使用 Typesafe Config 的 ConfigFactory 在 build.sbt 中设置密钥设置? 的相关文章

随机推荐

  • Cython 中 numpy 数组掩码的性能

    作为这个问题的后续here https stackoverflow com questions 45882166 performance of updating multiple key value pairs in a dict 感谢 M
  • Git 更改基础分支

    我有一个名为 develop 的分支 并基于该分支我创建了另一个分支 TestFeature 然后我基于 TestFeature 制作了其他分支 NewFeature 并进行了一些更改并提交 问题是我不希望文本功能中的更改出现在我的新功能分
  • 当双方都被删除时,为什么 git 给我一个“删除合并冲突”?

    我正在合并更新版本master进入我的分支 在 master 中 一个文件已被删除 我也删除了 Git 给了我以下内容 Deleted merge conflict for Lib SharedBL WebServices WebAPI A
  • 如何加载 .mat 文件并将其转换为 numpy 二维数组?

    我在 mat 文件中有一个数据 观察结果和特征 我想将其加载到 numpy 2D 数组中 我不想先将其转换为 csv 然后将 csv 加载到 numpy 中 Use scipy 的 loadmat API 文档 https docs sci
  • Javascript 中哪个更有效:while 或 for 语句?

    我最近有机会在 javascript 中进行循环 但我很困惑是否使用 for 循环或 while 语句 var i foo length while i or for var i 0 i lt foo length i 我想从 javasc
  • Struts2 正则表达式配置

    我正在创建一个 Struts2 Web 应用程序 我想要一个像这样的网址www xyz com portal orgCode signin 这个组织代码是动态的 所以我使用正则表达式 我将 struts xml 配置为
  • 仅将唯一值添加到 python 中的列表中

    我正在努力学习Python 以下是练习的相关部分 对于每个单词 检查该单词是否已在列表中 如果 该单词不在列表中 请将其添加到列表中 这是我所拥有的 fhand open romeo txt output for line in fhand
  • 合并的资源字典可以访问 App.xaml 中的资源吗?

    Can 合并资源字典 https msdn microsoft com en us windows uwp controls and patterns resourcedictionary and xaml resource referen
  • 通过 PHP 实现浏览器之间的通信

    我正在为一个学校项目构建一个简单的ajax聊天客户端 并想到了一种实现它的方法 但在我看来very繁琐的做法 1 用户A发送消息 该消息被服务器端PHP脚本接受并保存到数据库 2 用户B的浏览器定期启动服务器端PHP脚本来检查数据库中是否有
  • 当数据类属性更改时,使 React 组件重新渲染

    在我的 Typescript 应用程序中 有一个代表一些数据的类 这个类是端到端共享的 前端和后端都使用它来构造数据 它有一个名为items这是一个数字数组 class Data constructor this items 0 addIt
  • Kafka Spring Cloud Stream 的多个 @EnableBinding

    我正在尝试设置一个侦听 Kafka 的 Spring Boot 应用程序 我正在使用 Kafka Streams Binder 用一个简单的 EnableBinding EnableBinding StreamExample StreamP
  • 尝试加载使用 browserify-shim 填充的模块时,karma-browserify 会抛出错误

    我知道有类似的问题 但没有一个解决我的问题 当我跑步时karma test每次尝试加载使用 browserify shim 填充的模块时 它都会抛出以下错误 TypeError undefined is not an object eval
  • 如何隐藏迷你分析器?

    我正在使用 MVC Mini 分析器来检查应用程序特定部分的速度 并希望将其保留在那里 以防以后发生某些情况并且我可能需要检查 出了什么问题 它不是完整的日志集 但它对于了解导致页面花费很长时间的原因非常方便 因此 我的目标是隐藏它并仅在请
  • 当数量选择更改时,WooCommerce 显示总价

    我需要在数量发生变化时在产品页面中显示总价 如果您在购物车中添加产品数量 则这与购物车中的行价格相同 我对 WooCommerce 还很陌生 所以我不知道从哪里开始 但如果有人能帮助我走向正确的方向 我想我可以自己应对 所以这是我应该如何做
  • 将单个 Google 日历事件导出到 ICS?

    我目前正在研究在网页上显示多个 Google 日历的事件列表的可能性 目前 我正在使用适用于 WordPress 的 Google 日历活动插件来显示网站上的活动 开发网站位于防火墙后面 因此我无法共享链接 但我想看看是否有任何简单的方法可
  • 请解释如何创建 PHP 的 Phar 存根

    我正在尝试创建一个非常简单的 PHP CLI 应用程序 可以作为phar http php net manual book phar php从命令行文件 php myProject phar 这是我到目前为止所尝试过的 我的项目 我的项目位
  • 从内容脚本启动时,chrome.downloads.erase 不起作用

    我正在尝试创建一个 Chrome 扩展程序 当进入某个网站时 我正在删除下载历史记录 我从后台页面使用这个 chrome downloads erase function item console log Erased item conso
  • 从同级目录导入模块以与 py.test 一起使用

    我在将任何内容导入我打算使用 py test 运行的测试文件时遇到问题 我的项目结构如下 ProjectName Title file1 py file2 py file3 py init py test test file1 py 我无法
  • Android Studio 2.1.1 运行旧的 .apk 文件

    首先 我尝试了 SO 中的所有建议 但没有一个对我有帮助 建议1 https stackoverflow com questions 25831082 android studio is installing old apk on devi
  • 使用 Typesafe Config 的 ConfigFactory 在 build.sbt 中设置密钥设置?

    sbt 版本 0 13 1 In build sbt我通过调用一段项目依赖项代码来分配一个设置键 该代码又通过 Typesafe Config 进行自身配置ConfigFactory 我的依赖有一个reference conf在 jar 的