2016-02-02 24 views
12

Durante la creazione di Elasticsearch Client, sto ricevendo l'eccezione java.lang.NoSuchMethodError: com.google.common.util.concurrent. MoreExecutors.directExecutor() Ljava/util/simultanea/esecutore; Dopo alcune ricerche, le giunzioni come Guava-18 vengono sovrascritte da una versione precedente in fase di esecuzione e Guava-18 funziona solo durante l'attività di compilazione.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor conflittualità su jar Elastic Search

configurazione Il Maven è la seguente:

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

Come posso forzare la versione Guava-18 in fase di esecuzione?

risposta

16

Si dovrebbe cercare di trovare da dove viene estratta la "vecchia" versione di guava e di escluderla una volta per tutte.

Trova la dipendenza:

mvn dependency:tree | grep guava

escluderlo:

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

Vedi https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html per più informazioni l'esclusione dipendenza.

+1

Grazie per aver risposto, ma non posso rimuovere la versione precedente di guava, non appartiene al mio codice. –

+0

In realtà lo risolvo con quella soluzione, quindi grazie! –

+0

Quando rimuovo la versione precedente, si genera comunque un'eccezione, perché la vecchia libreria lib non può usare guava.18, come posso risolvere questo problema. – Jack

0

Aggiungere un blocco dependencyManagement risolve questo problema:

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

Riferimento:

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

2

aggiungo la corretta dipendenza elasticsearch risolvere il problema

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

Ho avuto un problema simile. Ho creato un file .jar (sorgente Java), quindi ho voluto caricare quel file nella Spark Shell . Si scopre che Spark Shell carica i vasi da qualcosa di simile a questo scintilla: [versione] -bin-Hadoop [versione]/barattoli /".

Questo elenco ha avuto una versione precedente del guava che causa l'errore Ho avuto la versione corretta nel mio pom.xml. Ho persino aggiunto le esclusioni e tutte le risposte suggerite.In conclusione, si tratta in effetti di una versione errata di guava.Io copiavo la versione che corrisponde a il mio file pom.xml. Cordiali saluti,

0

RISOLTO: Ho aggiornato la dipendenza Guava all'ultima versione e ho risolto il

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