2016-02-02 11 views
12

Trong khi tạo Elasticsearch Client, tôi nhận được ngoại lệ java.lang.NoSuchMethodError: com.google.common.util.concurrent. MoreExecutors.directExecutor() Ljava/util/đồng thời/Executor; Sau khi tra cứu, các đường nối như Guava-18 đang được ghi đè bởi một phiên bản cũ hơn trong thời gian chạy, và Guava-18 chỉ hoạt động trong khi thực hiện nhiệm vụ biên dịch.NoSuchMethodError: conflits com.google.common.util.concurrent.MoreExecutors.directExecutor trên Elastic Tìm jar

cấu hình của tôi Maven là sau:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.1</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Làm thế nào tôi có thể buộc các phiên bản Ổi-18 ở thời gian thực hiện?

Trả lời

16

Bạn nên cố gắng tìm phiên bản "cũ" của ổi được lấy từ và loại trừ nó một lần cho tất cả.

Tìm sự phụ thuộc:

mvn dependency:tree | grep guava

Loại trừ nó:

<dependency> 
    <groupId>org.whatever</groupId> 
    <artifactId>the_lib_that_includes_guava</artifactId> 
    <version>0.97</version> 
    <exclusions> 
    <exclusion> 
     <artifactId>com.google</artifactId> 
     <groupId>guava</groupId> 
    </exclusion> 
    </exclusions> 
</dependency> 

Xem https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html để biết thêm về việc loại trừ sự phụ thuộc.

+1

Cảm ơn bạn đã trả lời, nhưng tôi không thể xóa phiên bản ổi cũ hơn, không thuộc mã của tôi. –

+0

Thực ra tôi giải quyết nó với giải pháp đó, vì vậy cảm ơn bạn! –

+0

Khi tôi xóa phiên bản cũ, nó vẫn còn ném ngoại lệ, vì lib cũ không thể sử dụng ổi.18, làm thế nào tôi có thể sửa lỗi này. – Jack

0

Thêm một khối dependencyManagement giải quyết vấn đề này:

<dependencyManagement> 
    <!-- enforce dependency guava version 20.0 --> 
    <dependencies> 
     <dependency> 
      <groupId>com.google.guava</groupId> 
      <artifactId>guava</artifactId> 
      <version>20.0</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

tham khảo:

http://techidiocy.com/maven-dependency-version-conflict-problem-and-resolution/

2

tôi thêm các phụ thuộc đúng elasticsearch giải quyết vấn đề

<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>18.0</version> 
</dependency> 
0

Tôi gặp vấn đề tương tự. Tôi đã tạo một tệp .jar (nguồn Java), sau đó tôi muốn tải tệp đó vào Spark Shell. Nó chỉ ra rằng Spark Shell tải lọ từ một cái gì đó tương tự như spark- [version] này -bin-hadoop [version]/lọ /".

Đó thư mục đã có một phiên bản cũ của ổi mà gây ra lỗi Tôi đã có phiên bản chính xác trong pom.xml của tôi. Tôi thậm chí đã thêm vào các loại trừ và tất cả các câu trả lời được đề xuất.Trong kết luận, nó thực sự là một phiên bản sai của ổi.Đã sao chép phiên bản phù hợp với tệp pom.xml của tôi. điều này giúp. Kính trọng

0

GIẢI PHÁP: Tôi đã cập nhật phụ thuộc Ổi cho phiên bản mới nhất và giải quyết được

<!-- https://mvnrepository.com/artifact/com.google.guava/guava --> 
<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>latest</version> 
</dependency> 
Các vấn đề liên quan