2016-02-02 31 views
12

Podczas tworzenia klienta Elasticsearch otrzymuję wyjątek java.lang.NoSuchMethodError: com.google.common.util.concurrent. WięcejExecutors.directExecutor() Ljava/util/concurrent/Executor; Po pewnym wyszukiwaniu, szwy takie jak Guava-18 są nadpisywane przez starszą wersję w czasie wykonywania, a Guava-18 działa tylko podczas kompilacji.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor conflits na słoiku Elastic Search

konfiguracja My Maven jest kontynuacją:

<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> 

Jak mogę zmusić wersję w czasie wykonywania Guava-18?

Odpowiedz

16

Powinieneś spróbować znaleźć "starą" wersję guawy i raz wykluczyć ją dla wszystkich.

Znajdź zależność:

mvn dependency:tree | grep guava

wyklucza go:

<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> 

Zobacz https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html uzyskać więcej informacji na temat wykluczenia zależności.

+1

Dziękuję za odpowiedź, ale nie mogę usunąć starszej wersji guava, nie należy do mojego kodu. –

+0

W rzeczywistości rozwiązuję to za pomocą tego rozwiązania, więc dziękuję! –

+0

Kiedy usuwam starszą wersję, nadal generuję wyjątek, ponieważ stara biblioteka nie może używać guava.18, jak mogę to naprawić. – Jack

2

dodam prawidłową zależność elasticsearch rozwiązać problem

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

Miałem podobny problem. Stworzyłem plik .jar (źródło Java), a następnie chciałem załadować ten plik do powłoki Spark . Okazuje się, że Spark Shell ładunki słoi z czymś podobnym do tego spark- [Version] -bin-Hadoop [wersja]/słoiki /”.

tego katalogu miał starszą wersję guawa, który powoduje błąd Mam poprawną wersję w moim pom.xml. Dodałem nawet wyjątki i wszystkie sugerowane odpowiedzi, Podsumowując, jest to rzeczywiście błędna wersja guawy. Skopiowałem wersję, która pasuje do mojego pliku pom.xml. to pomaga. Pozdrowienia

0

ROZWIĄZANIE: zaktualizowałem zależność Guava do najnowszej wersji i rozwiązałem

<!-- https://mvnrepository.com/artifact/com.google.guava/guava --> 
<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>latest</version> 
</dependency>