typesafe配置文件合并了application.conf



我有一个项目有两个模块,AB。每个都有一个application.conf和一个local.conf,其中包括前者。我的项目的build.sbt文件指定:

B.dependsOn(A % "compile->compile")

似乎模块Blocal.conf包括模块Aapplication.conf,因为在尝试运行模块B时,我在模块Aapplication.conf中获得UnresolvedSubstitution异常替换值。

我认为它正在合并application.conf文件。有什么办法能阻止它这样做吗?特别是,我可以通过build.sbt文件做到这一点吗?

当你这样做的时候:

B.dependsOn(A % "compile->compile")

发生的是,当B被编译时,它执行A编译并使B可用。这意味着A中的配置文件将对B可用,因为Type-Safe配置将这些配置放入类路径中。

最简单的解决方案可能是命名您的属性,以便模块B只使用它自己的配置中的属性,而从不使用A的属性(这是一个最佳实践,以保持关注点分离清楚。)如果目的是让B的配置覆盖 A的"默认"配置,并假设A本质上是B使用的库,请遵循此处的最佳实践指南,将resource.conf文件放在A中,将application.conf文件放在B中,因为application.conf具有更高的优先级。

在您的例子中,AB都依赖于公共代码。为了保持关注点的分离,最好将这个公共代码重构到它自己的库模块中,并让 AB都引用该代码。通过这种方式,您可以确保它们所依赖的属性都在C中,而由AB正确设置的属性仅在它们的域中。

最新更新