我之前没有使用过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
答案 0 :(得分:2)
您正在访问java.lang.NoClassDefFoundError,因为风暴jar不在您的类路径中。对于你的第二个命令,将风暴jar和storm / lib放在你的类路径中,它应该按预期工作。
答案 1 :(得分:1)
你的pom可能有风暴依赖的范围为“提供”,这意味着它将在运行时类路径中,但不在jar-with-dependencies中。尝试将范围更改为“编译”
答案 2 :(得分:0)
Storm依赖的范围应该不同,具体取决于您是以本地模式还是群集运行。
对于本地模式,您需要将范围设置为“编译”或将标记保留为空,因为范围默认为“编译”。
为了将拓扑提交到集群,您需要将范围设置为“已提供”,否则Storm jar将打包在拓扑jar中,当部署到集群时,类路径中将有2个Storm jar:拓扑中的一个和Storm安装目录中的一个。