2016-02-02 10 views
12

Beim Erstellen von Elasticsearch Client erhalte ich die Ausnahme java.lang.NoSuchMethodError: com.google.common.util.concurrent. MoreExecutors.directExecutor() Ljava/util/concurrent/Executor; Nach einigen Nachschlagen werden Nähte wie die Guava-18 zur Laufzeit von einer älteren Version überschrieben, und Guava-18 funktioniert nur während der Kompilierungsaufgabe.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor konfliert auf Elastic Search jar

Mein Maven-Konfiguration ist der Nachfolger:

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

Wie kann ich die Guave-18-Version zur Ausführungszeit erzwingen?

Antwort

16

Sie sollten versuchen zu finden, wo die "alte" Version von Guava genommen wird und es für immer ausschließen.

die Abhängigkeit finden:

mvn dependency:tree | grep guava

es ausschließen:

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

Siehe für weitere Informationen über die Abhängigkeit Ausschluss https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html.

+1

Vielen Dank für die Antwort, aber ich kann nicht die ältere Guava-Version entfernen, gehört nicht zu meinem Code. –

+0

Eigentlich löse ich es mit dieser Lösung, also danke! –

+0

Wenn ich die alte Version entferne, löst es immer noch eine Ausnahme aus, weil die alte lib guava.18 nicht benutzen kann, wie kann ich das beheben. – Jack

2

ich die richtige Abhängigkeit von hinzufügen Elasticsearch lösen das Problem

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

Ich hatte ein ähnliches Problem. Ich erstellte eine .jar Datei (Java-Quelle), dann wollte ich diese Datei in die Spark Shell laden. Es stellt sich heraus, dass die Funken Shell lädt Gläser von etwas ähnlich wie diese Funken- [Version] -bin-hadoop [Version]/Gläser /“.

Das Verzeichnis eine ältere Version des Guave hatte, die den Fehler verursacht Ich hatte die korrekte Version in meinem pom.xml. Ich fügte sogar Ausschlüsse und alle vorgeschlagenen Antworten hinzu. Zusammenfassend ist es in der Tat eine falsche Version von Guava. Ich kopierte die Version entspricht meine pom.xml-Datei dies hilft. Grüße.

0

Gelöst: Ich aktualisierte die Guava Abhängigkeit der neuesten Version und es löste die

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