当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot Gradle插件中切换Spring数据释放序列的正确方法

强宾白
2023-03-14

我正在尝试构建一个新的最新Spring Boot项目,但找不到切换Spring Data发布系列的方法。我们在6.8版中使用Elasticsearch,因此我不能只使用Spring Boot提供的默认依赖项。

Spring Data Elasticsearch参考页面告诉我,要使用6.8版,我需要使用Moore发布训练https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions.

我看过Maven的文档https://docs.spring.io/spring-boot/docs/2.1.10.RELEASE/reference/html/using-boot-build-systems.html#using-boot-maven-without-a-parent但Gradle的相同文档缺少释放列车开关示例https://docs.spring.io/spring-boot/docs/2.1.10.RELEASE/gradle-plugin/reference/html/#managing-独立使用的依赖项。

简而言之,我的构建中有以下几部分。格拉德尔:

plugins {
    id 'org.springframework.boot' version '2.3.5.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'java'
}

dependencyManagement {
    imports {
        mavenBom 'org.springframework.data:spring-data-releasetrain:Moore-SR11'
    }
}

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
}

在dependencyManagement部分切换BOM有助于从4.0.5版本切换spring data elasticsearch。释放至3.2.11。发布,但elasticsearch的版本仍然从某处被视为7.6.2(渐变依赖项输出):

+--- org.springframework.boot:spring-boot-starter-data-elasticsearch -> 2.3.5.RELEASE
|    +--- org.springframework.boot:spring-boot-starter:2.3.5.RELEASE (*)
|    \--- org.springframework.data:spring-data-elasticsearch:4.0.5.RELEASE -> 3.2.11.RELEASE
|         +--- org.springframework:spring-context:5.2.10.RELEASE (*)
|         +--- org.springframework:spring-tx:5.2.10.RELEASE (*)
|         +--- org.springframework.data:spring-data-commons:2.2.11.RELEASE
|         |    +--- org.springframework:spring-core:5.2.10.RELEASE (*)
|         |    +--- org.springframework:spring-beans:5.2.10.RELEASE (*)
|         |    \--- org.slf4j:slf4j-api:1.7.26 -> 1.7.30
|         +--- joda-time:joda-time:2.10.8
|         +--- org.elasticsearch.plugin:transport-netty4-client:6.8.13 -> 7.6.2
|         |    +--- io.netty:netty-buffer:4.1.43.Final -> 4.1.53.Final
|         |    +--- io.netty:netty-codec:4.1.43.Final -> 4.1.53.Final
|         |    +--- io.netty:netty-codec-http:4.1.43.Final -> 4.1.53.Final
|         |    +--- io.netty:netty-common:4.1.43.Final -> 4.1.53.Final
|         |    +--- io.netty:netty-handler:4.1.43.Final -> 4.1.53.Final
|         |    +--- io.netty:netty-resolver:4.1.43.Final -> 4.1.53.Final
|         |    \--- io.netty:netty-transport:4.1.43.Final -> 4.1.53.Final
|         +--- org.elasticsearch.client:elasticsearch-rest-high-level-client:6.8.13 -> 7.6.2
|         |    +--- org.elasticsearch:elasticsearch:7.6.2  

有没有一个好的例子或者我错过了什么?

更新:我找到了为什么将7.6.2版用于Elasticsearch。它来自spring boot dependencies项目https://github.com/spring-projects/spring-boot/blob/v2.3.5.RELEASE/spring-boot-project/spring-boot-dependencies/build.gradle#L274.仍在寻找覆盖它的方法。

共有1个答案

彭仲卿
2023-03-14

使用gradle和java平台插件,我们通过调整依赖项版本取得了一些成功,如https://docs.gradle.org/current/userguide/dependency_version_alignment.html#sec:align-未发布的版本

这将覆盖为所有org.elasticsearch*依赖项解析的版本到6.8.13

class ElasticSearchBomAlignmentRule implements ComponentMetadataRule {
  void execute(ComponentMetadataContext ctx) {
    ctx.details.with {
      // Force specific ES version
      if (id.group.startsWith("org.elasticsearch")) {
        // declare that Elastic Search modules all belong to the ES virtual platform
        belongsTo("org.elasticsearch:elasticsearch-virtual-platform:6.8.13")
      }
    }
  }
}

dependencies {
  components.all(ElasticSearchBomAlignmentRule)
  ...

根据我们的经验,还需要降级spring-data-elasticsearch,但这要容易得多,并且是在平台中的约束下完成的

ext {
  ...
  // Downgrade below the boot integration for compatibility with es 6.8.X
  springDataEsVersion = '3.2.12.RELEASE'
  ...
}

dependencies {
  ...
  constraints {
    api "org.springframework.data:spring-data-elasticsearch:$springDataEsVersion"
    ...
  }
}
 类似资料:
  • 我试图用时间序列创建一个简单的折线图。问题是androidplot没有正确显示数组中的时间值,即日期已关闭。日期应为: 2001年1月1日、2001年2月1日、2001年3月1日、2001年4月1日、2001年5月1日 但我得到了: 2001年1月1日、2001年1月30日、2001年3月1日、2001年3月31日、2001年5月1日 您可以从格式化的调试信息中看到androidplot解释了什么

  • 问题内容: 我想知道将jQuery插件集成到我的angular应用程序中的正确方法是什么。我发现了一些教程和屏幕录像,但是它们似乎适合特定的插件。 我应该像这样创建指令吗? 然后在html中调用脚本和指令? 提前谢谢 问题答案: 是的,你是对的。如果您使用的是jQuery插件,请不要将代码放在控制器中。而是创建一个指令,并将您通常具有的代码放入该指令的函数中。 您可以查看文档中的几点。您可以在这里

  • 问题内容: 我想编写一个接受参数的函数,该参数可以是序列或单个值。值的类型为str,int等,但我 不 希望将其限制为硬编码列表。换句话说,我想知道参数X是一个序列还是必须转换为序列的对象,以避免以后出现特殊情况。我可以做 但是可能还有我不知道的其他序列类型,也没有通用的基类。 -N。 编辑 :请参阅下面的“答案”,了解其中大多数答案对我没有帮助的原因。也许您有更好的建议。 问题答案: 上述所有方

  • 问题内容: 根据此Go Data Structures文章的介绍,在“ 字符串” 部分下,它声明获取字符串的一部分会将原始字符串保留在内存中。 “(顺便说一句,在Java和其他语言中,有一个众所周知的陷阱,当您对字符串进行切片以保存一小段时,对原始字符串的引用会将整个原始字符串保留在内存中,即使仍然很少Go也有这个陷阱。我们尝试并拒绝的替代方法是使字符串切片变得如此昂贵(分配和复制),以至于大多数

  • 我想在我的ASP.NET MVC应用程序中实现客户端国际化。所以我使用了这个jQuery插件jQuery i18n。 我的.properties文件位于一个名为的目录中,该目录位于我的根目录中,该目录还包含其他MVC文件夹,如和。 现在,在调用插件时,我执行以下操作: 是我的.properties文件中的一个键。 但是,当执行回调函数时,警报框显示键而不是值,像这样:。 所以我猜测插件找不到.pr

  • 因此,我们目前正在将基于MQTT的消息后端中的Netty3.x升级到Netty4.1。在我们的应用程序中,我们使用自定义MQTT消息解码器和编码器。 对于我们的解码器,我目前使用的是一个ByteToMessageDecoder,如下所示: 其中是我们的自定义对象,它被传递到下一个的。正如您所看到的,当我从传入的对象中的传入的对象。那么,既然在netty中是引用计数的,那么我需要在这里通过调用来释放