java.lang.NoSuchMethodError:org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder.setSource

问题描述 投票:0回答:1

我正在尝试运行使用子项目的spring boot父项目,该子项目又使用具有弹性搜索依赖项和用于运输客户端的elasticsearch config bean的项目(ES项目)。子项目使用Spring Data ES存储库,这些存储库由项目中的相应注释启用。这些是子级中使用的配置注释:

@Configuration
@ComponentScan("package")
@EntityScan("package3")
@EnableJpaRepositories("package2")
// enables only es repos for current project, ESProject has this annotation for its packages respectively
@EnableElasticsearchRepositories("package1")

父项目在ES项目和子项目的所有软件包上都只有唯一的@SPringBootApplication。

父母pom:

<dependencies>
        <dependency>
            <groupId>org.groupid</groupId>
            <artifactId>ChildProject</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
        </dependency>
   <!-- ... -->
</dependencies>

儿童pom:

<dependencies>
        <dependency>
            <groupId>org.groupid</groupId>
            <artifactId>ESProject </artifactId>
            <version>1.1-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <!-- exclusions -->
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
        </dependency>
</dependencies>

ESProject Pom:

   <dependencies>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>6.4.1</version>                    
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.1.1.RELEASE</version>            
        </dependency>
   </dependencies> 

父项目是pom的模块,它使用Spring Boot 2.0.5.RELEASE。

当我运行一个父项目时,我得到了这个。显然有一些依赖冲突,但是我不太清楚它们。

nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.elasticsearch.repository.support.NumberKeyedRepository]: Constructor threw exception; 

  nested exception is java.lang.NoSuchMethodError: org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder.setSource(Ljava/lang/String;)Lorg/elasticsearch/action/admin/indices/mapping/put/PutMappingRequestBuilder;

另外,值得注意的是,如果我在其他项目中使用ESProject,我没有得到此异常,但在那些项目中没有Spring Data ES Repos。

elasticsearch pom.xml spring-data-elasticsearch parent-pom
1个回答
0
投票

您在设置中将Spring Data Elasticsearch和Elasticsearch库版本混合在一起。让我尝试形象化我们所得到的:

Spring Boot 2.0.5 
  +- Elasticsearch                  5.6.11
  +- Data Kay.SR10
    +- Spring Data Elasticsearch    3.0.10
      +- Elasticsearch              5.5.0   

Boot 2.0.5引入了ES 5.6.11,但同时通过ES的Spring Data Kay releasetrain版本5.5.0和SDES的3.0.10(虽然不错,但应该可以)。

Spring Data Elasticsearch   3.1.1
  +- Elasticsearch          6.2.2

您定义依赖于ES 6.2.2的SDES 3.1.1

Elasticsearch               6.4.1

最终将ES版本定义为6.4.1

关于所看到的错误:您的应用程序使用的代码期望ES客户端库中提供以下功能(类型使用完全限定的名称:]

org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder.setSource(java.lang.String)

此方法存在于ES 5.5中,但在那里已不推荐使用(摘自代码):

    /**
     * The mapping source definition.
     * @deprecated use {@link #setSource(String, XContentType)}
     */
    @Deprecated
    public PutMappingRequestBuilder setSource(String mappingSource) {
        request.source(mappingSource);
        return this;
    }

在ES6中,此方法已删除,只有带有附加XContentType参数的方法存在-SDES为此版本使用。

因此,您的应用程序将SDES 3.0与无法工作的ES 6库一起加载。

因此,您应该使用Boot 2.1或2.2 check the version matrix here将依赖关系更新为一致的版本>

© www.soinside.com 2019 - 2024. All rights reserved.