添加依赖项

时间:2016-07-22 22:16:30

标签: java maven apache-spark

我从Spark发行版(v1.6.2)中的示例开始。我添加了自己的" Hello World"例子,这很好。尝试添加使用第三方依赖项的内容(com.google.cloud:gcloud-java-nio:0.2.5),会发生以下情况:

  

16/07/22 13:05:26错误SparkUncaughtExceptionHandler:未捕获   线程中的异常Thread [Executor task launch worker-7,5,main]   java.lang.NoClassDefFoundError:   org / spark-project / guava / base / MoreObjects at   com.google.cloud.ServiceOptions.activeGoogleCloudConfig(ServiceOptions.java:282)     在   com.google.cloud.ServiceOptions.googleCloudProjectId(ServiceOptions.java:294)     在   com.google.cloud.ServiceOptions.defaultProject(ServiceOptions.java:270)     在com.google.cloud.ServiceOptions。(ServiceOptions.java:206)     在   com.google.cloud.HttpServiceOptions。(HttpServiceOptions.java:153)     在   com.google.cloud.storage.StorageOptions。(StorageOptions.java:69)   (...)

我按如下方式运行了我的代码:

spark-1.6.2$ mvn -DskipTests clean package
(lots of time passes...)
spark-1.6.2$ ./bin/run-example JavaGcsTest

为了添加依赖项,我将这些行添加到examples/pom.xml

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>gcloud-java-nio</artifactId>
<version>0.2.5</version>
</dependency>

看起来根本原因是gcloud-java-nio和Spark都依赖于guava,也许它们依赖于它的不同版本。

我查看了相关问题,答案建议制作一个胖罐子。我不知道如何在这里应用它,因为示例已经捆绑在一个胖罐子里(examples/target/scala-2.10/spark-examples-1.6.2-hadoop2.2.0.jar)。

我尝试更改使用的番石榴版本,将其从14增加到19(最新版本),但当然编译失败(SparkEnv.scala:84:无法在com中访问MapMaker类中的方法softValues。 google.common.collect.MapMaker)。

希望有人就如何让Spark与第三方图书馆合作提出建议!

1 个答案:

答案 0 :(得分:0)

摆脱这个问题的一种方法是编译第三方库的着色版本并使用该jar作为依赖项。

对于gcloud-java-nio,项目已经包含一个阴影jar目标,所以在mvn package运行target/gcloud-java-nio-0.2.7-SNAPSHOT-shaded.jar之后。