我有:
- 具有纯接口(interface)的库
X
- 库
X1
,X2
,X3
, ...,XN
实现了来自的接口(interface)X
SpringBoot
项目Y
使用Gradle 4
构建并使用X
X
的实现取决于我们为其准备构建的客户端。
我想到的选项:
- 有条件的
Gradle
buildgradle build -Pclient=client1
将只包含一个特定的实现 - 将所有实现作为依赖项包括在内,并具有将在运行时发现并定义使用的实现的配置变量。
现在有一个问题,要遵循的最佳做法是什么?
最佳答案
处理所提出问题的两种机制或多或少是等效的。我发现仅包含单个依赖项(即 XN)不仅更容易使用此技术堆栈实现,而且更可靠:
- 可靠,因为在运行时只发现一个特定的依赖项——spring 不可能将 DI 搞砸
- 更简单,因为如果只包含一个实现,则无需手动处理 DI。
- 如果在运行时只使用单一实现 - 包含 else 的原因是什么?
这里有两件重要的事情:
- 提供详细的日志消息,不仅包括哪个实现(在构建期间),还提供使用哪个实现(在运行时)
- 可以在
war
级别或dependencies
block 中以两种不同的方式在 gradle 中完成。就个人而言,我会选择依赖 block - 它使war
更容易构建。
关于java - Gradle 和 Spring Boot : choose dependency with implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46268154/