我以前没有使用storm或maven的经验,我正在做我的入门项目。当我使用git网站上给出的命令编译上传到git网站上的starter项目时,即:
mvn compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=storm.starter.ExclamationTopology
我可以运行感叹号拓扑类,但使用此命令时:
java -cp ./target/storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.ExclamationTopology
我跑不了。
顺便说一句,我从apache站点上的maven教程中得到了第二个命令,有人能指出我做错了什么吗?
ps:这是错误http://pastebin.com/a1pqbb3r
3条答案
按热度按时间fhg3lkii1#
pom可能将storm依赖项的作用域设置为“provided”,这意味着它将位于运行时类路径中,而不是位于具有依赖项的jar中。尝试将范围更改为“compile”
8hhllhi22#
storm依赖关系的作用域应该有所不同,具体取决于您的应用程序是在本地模式下运行还是在群集模式下运行。
对于本地模式,您需要将作用域设置为“compile”,或者将标记留空,因为作用域默认为“compile”。
为了将拓扑提交到集群,需要将作用域设置为“provided”,否则storm jar将打包在拓扑jar中,当部署到集群时,类路径中将有2个storm jar:拓扑中的一个和storm安装目录中的一个。
4bbkushb3#
您遇到了java.lang.noclassdeffounderror,因为storm jar不在您的类路径中。对于第二个命令,将storm jar和storm/lib放在类路径中,它应该可以正常工作。