1

我以前没有使用过 Storm 或 Maven 的经验,我正在开发我的入门项目。当我使用那里给出的命令编译上传到 git 网站上的启动项目时,即:

mvn compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=storm.starter.ExclamationTopology

我可以运行 Exclamation 拓扑类,但是当我使用这个命令时:

java -cp ./target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.ExclamationTopology

我无法运行它。

顺便说一句,我从 apache 网站上的 maven 教程中得到了第二个命令有人能指出我在这里做错了什么吗?

PS:这是错误http://pastebin.com/A1PQbB3r

4

3 回答 3

2

由于风暴罐不在您的类路径中,因此您遇到了 java.lang.NoClassDefFoundError 。对于您的第二个命令,将storm jar 和storm/lib 放在您的类路径中,它应该可以按预期工作。

于 2013-06-03T19:24:12.140 回答
1

您的 pom 可能具有风暴依赖项的“已提供”范围,这意味着它将位于运行时类路径中,但不在 jar-with-dependencies 中。尝试将范围更改为“编译”

于 2013-06-03T20:13:42.660 回答
0

Storm 依赖项的范围应该不同,具体取决于您是在本地模式下运行还是在集群中运行。

对于本地模式,您需要将范围设置为“编译”或将标签留空,因为范围默认为“编译”。

为了将您的拓扑提交到集群,您需要将范围设置为“提供”,否则 Storm jar 将被打包在您的拓扑 jar 中,并且当部署到集群时,类路径中将有 2 个 Storm jar:里面的一个您的拓扑结构和 Storm 安装目录中的拓扑结构。

于 2013-06-13T18:20:28.300 回答