首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加依赖项时的Spark/Java NoClassDefFoundError

添加依赖项时的Spark/Java NoClassDefFoundError
EN

Stack Overflow用户
提问于 2016-07-22 22:16:30
回答 1查看 723关注 0票数 0

我从星火发行版(v1.6.2)中的示例开始。我添加了自己的"Hello“示例,效果很好。尝试添加一些使用第三方依赖项(com.google.Cloud:gcloud-java:0.2.5),结果如下:

16/07/22 13:05:26错误SparkUncaughtExceptionHandler:线程ThreadExecutor任务启动工作器中的未命名异常-7,5,com.google.cloud.ServiceOptions.activeGoogleCloudConfig(ServiceOptions.java:282) at com.google.cloud.ServiceOptions.googleCloudProjectId(ServiceOptions.java:294) at com.google.cloud.ServiceOptions.defaultProject(ServiceOptions.java:270) at com.google.cloud.ServiceOptions.(ServiceOptions.java:206) at com.google.cloud.HttpServiceOptions.(HttpServiceOptions.java:153) at com.google.cloud.storage.StorageOptions.(StorageOptions.java:69) (.)

我运行我的代码如下:

代码语言:javascript
复制
spark-1.6.2$ mvn -DskipTests clean package
(lots of time passes...)
spark-1.6.2$ ./bin/run-example JavaGcsTest

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

代码语言:javascript
复制
<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>gcloud-java-nio</artifactId>
<version>0.2.5</version>
</dependency>

看起来根本原因在于gcloud-java和Spark都依赖于番石榴,也许它们依赖于不同版本的番石榴。

我看了相关的问题,答案表明我做了一个胖罐子。不过,我不知道如何在这里应用这一点,因为示例已经打包到一个胖jar (examples/target/scala-2.10/spark-examples-1.6.2-hadoop2.2.0.jar)中。

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

希望有人对如何让火花与这个第三方图书馆工作的建议!

EN

回答 1

Stack Overflow用户

发布于 2016-07-25 19:29:43

解决这个问题的一种方法是编译第三方库的阴影版本,并使用该jar作为依赖项。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38536004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档