0

我在阅读这个 SO 问题时发现了 backtype.storm.Testing并感到很兴奋,但我无法让它工作,因为当我真正去运行测试(来自 Java)时,测试类不会加载。

我想使用xumingming 的 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)

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

谢谢,

-丹尼尔

4

2 回答 2

3

当您看到 NoClassDefFoundErrors 时,您要么在类路径中缺少某些 jar 文件,要么由于缺少某些依赖项而未初始化该类。检查哪些 jar 文件包含抛出 NoClassDefFoundError 的类并将其添加到类路径中。

于 2013-09-25T16:22:21.197 回答
0

我使用 apache-storm-0.9.1-incubating 遇到了同样的问题。我相信对我们来说问题是我们在引入 zookeeper 3.4.5 时遇到的编译问题,而storm <= 0.9.1 使用的是zookeeper 3.3.3,它们之间有一个非被动的变化。使用 master 的快照(0.9.2-incubating-SNAPSHOT)为​​我们解决了这个问题。

于 2014-04-15T21:45:48.493 回答