java - Twitter Storm 的测试 API 不会初始化

标签 java unit-testing clojure apache-storm

我在阅读 this SO question 时发现了 backtype.storm.Testing我很兴奋,但我无法让它工作,因为当我实际去运行测试(从 Java)时,测试类不会加载。

我想使用 xumingming's TestingApiDemo 中展示的测试功能,但是当我实际运行测试时,我收到一个 ExceptionInInitializerError ,后面跟着一堆 NoClassDefFoundErrors ,因为它无法初始化 backtype.storm.Testing 。

测试出了什么问题?编译时没有问题。我最好的猜测是它需要 Clojure 中的一些东西,这些东西在运行时动态加载。还有其他人看过这个吗?

以下是大部分相关堆栈跟踪:

java.lang.ExceptionInInitializerError: null
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:171)
        at backtype.storm.zookeeper$loading__4784__auto__.invoke(zookeeper.clj:1
)
        at backtype.storm.zookeeper__init.load(Unknown Source)
        at backtype.storm.zookeeper__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:249)
        at clojure.lang.RT.loadClassForName(RT.java:2056)
        at clojure.lang.RT.load(RT.java:419)
        at clojure.lang.RT.load(RT.java:400)
        at clojure.core$load$fn__4890.invoke(core.clj:5415)
        at clojure.core$load.doInvoke(core.clj:5414)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5227)
        at clojure.core$load_lib.doInvoke(core.clj:5264)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:603)
        at clojure.core$load_libs.doInvoke(core.clj:5302)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:603)
        at clojure.core$require.doInvoke(core.clj:5381)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at backtype.storm.cluster$loading__4784__auto__.invoke(cluster.clj:1)
        at backtype.storm.cluster__init.load(Unknown Source)
        at backtype.storm.cluster__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:249)
        at clojure.lang.RT.loadClassForName(RT.java:2056)
        at clojure.lang.RT.load(RT.java:419)
        at clojure.lang.RT.load(RT.java:400)
        at clojure.core$load$fn__4890.invoke(core.clj:5415)
        at clojure.core$load.doInvoke(core.clj:5414)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5227)
        at clojure.core$load_lib.doInvoke(core.clj:5264)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:603)
        at clojure.core$load_libs.doInvoke(core.clj:5302)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:603)
        at clojure.core$require.doInvoke(core.clj:5381)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at backtype.storm.daemon.nimbus__init.load(Unknown Source)
        at backtype.storm.daemon.nimbus__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:249)
        at clojure.lang.RT.loadClassForName(RT.java:2056)
        at clojure.lang.RT.load(RT.java:419)
        at clojure.lang.RT.load(RT.java:400)
        at clojure.core$load$fn__4890.invoke(core.clj:5415)
        at clojure.core$load.doInvoke(core.clj:5414)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5227)
        at clojure.core$load_lib.doInvoke(core.clj:5264)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:603)
        at clojure.core$load_libs.doInvoke(core.clj:5302)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:603)
        at clojure.core$require.doInvoke(core.clj:5381)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at backtype.storm.testing$loading__4784__auto__.invoke(testing.clj:1)
        at backtype.storm.testing__init.load(Unknown Source)
        at backtype.storm.testing__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:249)
        at clojure.lang.RT.loadClassForName(RT.java:2056)
        at clojure.lang.RT.load(RT.java:419)
        at clojure.lang.RT.load(RT.java:400)
        at clojure.core$load$fn__4890.invoke(core.clj:5415)
        at clojure.core$load.doInvoke(core.clj:5414)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5227)
        at clojure.core$load_lib.doInvoke(core.clj:5264)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:603)
        at clojure.core$load_libs.doInvoke(core.clj:5302)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:605)
        at clojure.core$use.doInvoke(core.clj:5392)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at backtype.storm.LocalCluster$loading__4784__auto__.invoke(LocalCluster
.clj:1)
        at backtype.storm.LocalCluster__init.load(Unknown Source)
        at backtype.storm.LocalCluster__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:249)
        at clojure.lang.RT.loadClassForName(RT.java:2056)
        at clojure.lang.RT.load(RT.java:419)
        at clojure.lang.RT.load(RT.java:400)
        at clojure.core$load$fn__4890.invoke(core.clj:5415)
        at clojure.core$load.doInvoke(core.clj:5414)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.lang.Var.invoke(Var.java:415)
        at backtype.storm.LocalCluster.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:171)
        at backtype.storm.testing4j$loading__4784__auto__.invoke(testing4j.clj:1
)
        at backtype.storm.testing4j__init.load(Unknown Source)
        at backtype.storm.testing4j__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:249)
        at clojure.lang.RT.loadClassForName(RT.java:2056)
        at clojure.lang.RT.load(RT.java:419)
        at clojure.lang.RT.load(RT.java:400)
        at clojure.core$load$fn__4890.invoke(core.clj:5415)
        at clojure.core$load.doInvoke(core.clj:5414)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.lang.Var.invoke(Var.java:415)
        at backtype.storm.Testing.<clinit>(Unknown Source)
        at my.package.storm.bolts.MockTupleHelpers.testTuple(MockTupleHelpers.ja
va:69)

更新:I found the place我认为测试类是使用 Clojure 生成的。也许我的项目使用的 Clojure 库的版本(1.4)没有在这里提供一些必要的类型?我正在使用 Storm 0.8.2。

谢谢

-丹尼尔

最佳答案

当您看到 NoClassDefFoundErrors 时,您可能在类路径中缺少某些 jar 文件,或者由于缺少某些依赖项而导致该类未初始化。检查哪些 jar 文件包含引发 NoClassDefFoundError 的类并将其添加到类路径中。

关于java - Twitter Storm 的测试 API 不会初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19010191/

相关文章:

javascript - 使导入的函数使用新变量

clojure - 具有 -ve 值的 Core.logic 有限域

带类型提示的动态函数

java - java中使用DTO对象时的线程安全

java - ObjectMapper - 如何将 Map 转换为 POJO

c++ - 如果私有(private)变量已更改,如何进行单元测试

android - Jest testing::测试失败并且错误路由到\react-native-vector-icons

emacs - 为什么 clojure-mode 用一些 curl 的 f 字符替换 fn?

Java 如何按我的预期使用 Regex mask numberic

c# - 使用异常而不是冗长的空检查是否可以接受?