java - 任何在 gradle 文件中制作 `exclude` 的方法在构建时都不适用,但在运行代码时适用
问题描述
我正在尝试为我的 Java Spark 代码编写一些单元测试。以下是我的第一个简单尝试
public class SparkHelperTest {
private JavaSparkContext sparkCtx;
@Before
public void setUp() throws IllegalArgumentException, IOException {
SparkConf conf = new SparkConf();
conf.setMaster("local[2]");
conf.setAppName("sparkHelperTest");
sparkCtx = new JavaSparkContext(conf);
}
@Test
public void test() {
final List<Integer> nums = new ArrayList<Integer>();
nums.add(3);
nums.add(4);
nums.add(2);
JavaRDD<Integer> rdd = sparkCtx.parallelize(nums,1);
assertEquals(3, rdd.count());
}
}
但是我收到了这个错误
java.lang.NoClassDefFoundError: com/sun/jersey/spi/container/servlet/ServletContainer
at org.apache.spark.status.api.v1.ApiRootResource$.getServletHandler(ApiRootResource.scala:187)
at org.apache.spark.ui.SparkUI.initialize(SparkUI.scala:70)
at org.apache.spark.ui.SparkUI.<init>(SparkUI.scala:76)
at org.apache.spark.ui.SparkUI$.create(SparkUI.scala:195)
at org.apache.spark.ui.SparkUI$.createLiveUI(SparkUI.scala:146)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:473)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
at com.firsttry.spark.SparkHelperTest.setUp(SparkHelperTest.java:29)
......
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 30 more
我在网上搜索了一下,基本上是因为需要球衣版本 1。但是,我发现 jersey v1 在我们的 build.gradle 中被注释如下
compile (
'io.dropwizard:dropwizard-core:' + dropwizardVersion,
......
)
compile('org.apache.spark:spark-core_2.10:' + sparkVersion) {
exclude group: 'org.apache.hadoop', module: 'hadoop-common'
}
configurations.all {
// all v1 versions of jersey should be excluded. Spark has some of these dependencies
exclude group: 'com.sun.jersey', module: 'jersey-server'
......
}
如果我评论了这个“ exclude group: 'com.sun.jersey', module: 'jersey-server'
”,这个错误将在单元测试中消失。但是,在我构建任务并运行 spark 作业后,我会收到另一个错误(请注意,使用此“排除”,spark 作业运行良好,所以我想人们将这个排除放在那里是有原因的)。
所以我的问题是,是否有任何方法可以在构建 shadowJar 时使其exclude group: 'com.sun.jersey', module: 'jersey-server'
不适用,但是在运行 spark 作业时,此排除将适用吗?
解决方案
推荐阅读
- linux - 如何在bash编程中的循环内对文件使用stat
- swift - 我可以将 Swift 包管理器限制在特定平台上吗?
- postgresql - 如何从其他服务器的 dblink 连接?
- json - 使用下拉列表中的数据在 Node-red 上的 SNMP-set 中设置值
- css - 如何在 ant-design 组件中使用 css-in-js?
- vb.net - vb.net My.Settings 类类别和描述
- node.js - Heroku 应用程序错误 Node.js 请如果有人解决他们所说的话?
- ios - 是否有必要从付费开发者帐户创建配置文件以在真实设备中测试应用程序?
- ruby-on-rails - 创建(rails)后如何保持在同一个选项卡(引导程序)上?
- python-3.x - 硒元素要求