我有一个项目有两个模块,A
和B
。每个都有一个application.conf
和一个local.conf
,其中包括前者。我的项目的build.sbt
文件指定:
B.dependsOn(A % "compile->compile")
似乎模块B
的local.conf
包括模块A
的application.conf
,因为在尝试运行模块B
时,我在模块A
的application.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
具有更高的优先级。
在您的例子中,A
和B
都依赖于公共代码。为了保持关注点的分离,最好将这个公共代码重构到它自己的库模块中,并让 A
和B
都引用该代码。通过这种方式,您可以确保它们所依赖的属性都在C
中,而由A
或B
正确设置的属性仅在它们的域中。