java - Gradle 和 Spring Boot : choose dependency with implementation

标签 java spring-boot gradle architecture devops

我有:

  • 具有纯接口(interface)的库 X
  • X1, X2, X3, ..., XN 实现了来自 的接口(interface)X
  • SpringBoot 项目 Y 使用 Gradle 4 构建并使用 X

X 的实现取决于我们为其准备构建的客户端。

我想到的选项:

  • 有条件的 Gradle build gradle 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/

相关文章:

java - 如何调用以 String 形式形成的 Java 函数

debugging - Gradle/IntelliJ 沟通不畅导致 "Unable to start daemon process"

gradle - sonarcloud.io 支持 Groovy 吗?

java - 使用 Jackson 解压缩时出现 json 解析器异常

java - 使用正则表达式的 java 模式匹配

gradle - Gradle构建Spring Boot应用程序与有效配置文件进行 war

gradle - 如何将Gradle安装更新到最新版本?

java - 检查哈希集是否包含具有特定哈希值的元素

java - 有没有办法在 Ubuntu 下改进 JFileChooser 的外观?

maven - 在 Maven 中使用 bootRepackage=false