My project has the following two dependencies:
<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>
As you can see in the dependency tree, they both contain a different version of 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] | +- ...
A well-known issue is that Guava is not backwards compatible. Therefore, I somehow need both banks.
The error - I get - the following:
Error: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapreduce.lib.input.FileInputFormat
This has already been reported: https://issues.apache.org/jira/browse/HADOOP-10961
In addition, they suggest processing it using the shading Maven plugin: https://groups.google.com/a/cloudera.org/forum/#!topic/cdh-user/d5_HqUSvVl4
What I tried here:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </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>
But I still get the same error.
Can someone help me with this Maven problem?
Thanks Felix
java maven guava hadoop
Felix
source share