没有声明依赖导致的错误

Errors caused by not having declared a dependency

有没有人成功地让 Spring Boot、Spring Data Elasticsearch 和 Elasticsearch 5.x 正常工作?

我更新了我的 pom 以使用 spring-data-elasticsearch 3.0.0.RELEASE(刚刚发布)在 Github 中有提交说明说它支持 ES 5.

我遇到了一些错误,这些错误是由于没有声明对 spring-data-common 的依赖而导致的。在没有版本的情况下添加后,我注意到它显然是由 Spring Boot 管理并引入 1.13.7.RELEASE

这导致:java.lang.NoClassDefFoundError: org/springframework/data/mapping/model/Property

然后我将 spring-data-common 升级到 2.0。0.RELEASE 认为最新版本的所有内容都应该兼容。当连接存储库时,这会导致 AbstractMethodError 异常。

有人可以给点提示吗?这是我的 POM

中的依赖项
Managed versions from Parent POM:
    <spring-boot.version>1.5.7.RELEASE</spring-boot.version>
    <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>

From POM from the child module where things don't work

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
<!--            <version>2.0.0.RELEASE</version> -->
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.0.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.5.0</version>
        </dependency>

        <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>transport</artifactId>
             <version>5.5.0</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>

    </dependencies>

我曾将 spring-data-elasticsearch(使用 ES 2.x)项目迁移到使用 ES 5.x。

我失去了来源,但我还有罐子here

你们让我走上了正确的轨道。我升级如下:

Spring 核心(及相关):5.0.0.RELEASE Spring引导:2.0.0.M4 Spring云:Finchley.M2

有了这些,托管版本将更新如下:

spring-data-commons:2.0.0.RC3(来自发布列车 KAY-RC3) spring-data-elasticsearch:3.0.0.RC3(来自发布火车 KAY-RC3) 弹性搜索和传输:5.5.2(满足我的 5.x 要求)

我们在父 pom 中为其他子模块管理了 Jackson 的版本,这导致引入了不兼容的版本。我将 Spring 引导项目中的那些版本覆盖到版本 ${jackson.version } 在Spring中定义如下:

    spring-jackson-version=2.9.1

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${spring-jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${spring-jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${spring-jackson.version}</version>
    </dependency>

我的存储库出现另一个错误,我认为这是我自己造成的数据模型错误。所有类路径错误似乎都消失了。如果我有进一步的发现,我会再次更新。什么比照!

感谢您的提示。

编辑标题的人描述不准确。如最初所述,问题是 "dependency hell"。没有缺少依赖项,而是大量的传递依赖项,所有需要的版本都以神奇的 nonobvious/undocumented 方式进行协调。 – JvmSd121