2015-02-06 9 views
7

Mam dwie następujące zależności w moim projekcie:Stosować wersje wielokrotne Guava w projekcie same maven

<dependency> 
    <groupId>com.google.javascript</groupId> 
    <artifactId>closure-compiler</artifactId> 
    <version>v20141215</version> 
    <exclusions> 
     <exclusion> 
      <groupId>com.google.protobuf</groupId> 
      <artifactId>protobuf-java</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-common</artifactId> 
    <version>2.4.0</version> 
</dependency> 

Jak widać w drzewie zależności oboje zawierać inną wersję Guava:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ extraction --- 

[INFO] +- com.google.javascript:closure-compiler:jar:v20141215:compile 
[INFO] | +- com.google.javascript:closure-compiler-externs:jar:v20141215:compile 
[INFO] | +- args4j:args4j:jar:2.0.26:compile 
[INFO] | +- com.google.guava:guava:jar:18.0:compile 
[INFO] | +- com.google.code.gson:gson:jar:2.2.4:compile 
[INFO] | \- com.google.code.findbugs:jsr305:jar:1.3.9:compile 
[INFO] +- org.apache.hadoop:hadoop-common:jar:2.4.0:compile 
[INFO] | +- org.apache.hadoop:hadoop-annotations:jar:2.4.0:compile 
[INFO] | | \- jdk.tools:jdk.tools:jar:1.7:system 
[INFO] | +- (com.google.guava:guava:jar:11.0.2:compile - omitted for conflict with 18.0) 
[INFO] | +- ... 

Dobrze znanym problemem jest to, że Guava nie jest kompatybilny wstecz. Dlatego potrzebuję obu słoików.

Błąd - mam - jest następujący:

Error: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapreduce.lib.input.FileInputFormat 

To już zgłaszane tutaj: https://issues.apache.org/jira/browse/HADOOP-10961

Ponadto sugerują one obsługiwać go za pomocą wtyczki cieniowania Maven: https://groups.google.com/a/cloudera.org/forum/#!topic/cdh-user/d5_HqUSvVl4

Które próbowałem tutaj:

<build> 
<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <source>1.6</source> <!-- If you want to use Java 8, change this to "1.8" --> 
      <target>1.6</target> <!-- If you want to use Java 8, change this to "1.8" --> 
     </configuration> 
    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.3</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
       <configuration> 
        <relocations> 
         <relocation> 
          <pattern>com.google</pattern> 
          <shadedPattern>project.shaded.com.google</shadedPattern> 
         </relocation> 
        </relocations> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 
</build> 

Ale wciąż mam ten sam błąd.

Czy ktoś może mi pomóc w tym wydaniu Mavena?

Dziękuję Felix

+0

Czy to rozwiązałeś? – MFARID

Odpowiedz

0

Być może należy szukać w otrzymanej JAR i zobaczyć czy jest zbudowany prawidłowo. Czyszczenie lokalnego repozytorium może rozwiązać problem.

+0

Oczyściłem lokalne repozytorium maven i mogę również znaleźć klasy Guava w odpowiednim folderze jar ^^ – Felix

1

Proponuję znaleźć najnowszą wersję Guava, która działa z Hadoopem 2.4 i zawiera ją jako wyraźną zależność. Następnie wykluczyć Guava z pobierania tymczasowo z kompilatora zamknięcia i Hadoop deps.

Sugeruję V16 jako że wciąż ma konstruktor zero args na klasy stoper: patrz Guava 16

Oczywiście rozwiązanie to zależy od Guava 16 działa z kompilatora zamknięcia.

+0

To jest problem. Pakiet zamknięcia wymaga Guava 18 – Felix

+0

v20140303 wymaga tylko Guava 16. Nawet jeśli określona jest wersja, niekoniecznie musi być bezwzględnym wymogiem. – Will

+0

Naprawdę chcę użyć najnowszej wersji :( – Felix

Powiązane problemy