在尝试学习如何使用风暴时。我决定编译我自己的着名WordCount拓扑的实例,看看它是如何完成的。代码与示例的代码完全相同。 (https://github.com/apache/storm/blob/master/examples/storm-starter/src/jvm/org/apache/storm/starter/WordCountTopology.java)
然而,每当我尝试运行jar时,我都会收到错误消息,说我无法找到或加载主类。我可以运行与storm捆绑在一起的默认示例jar,没有任何问题(如下图),因此它不应该是一个调用语法问题。
bin/storm jar lib/"name".jar "classpath"
Maven创建jar没有问题,最初我假设我没有在pom文件中正确排除风暴依赖,但它应该是这样的,对吧?
<dependencies>
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>1.0.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
这可能是一个模糊的问题,但说实话,不确定在哪里解决它,因为代码是相同的,所以生成一个成功的jar应该不是问题,对吧?
答案 0 :(得分:0)
首先,从您的依赖项中删除<scope>provided</scope>
其次,你需要的是一个可执行的jar。默认情况下,maven不会生成可执行jar。因此,在构建jar时,必须指定主类。
这可以使用Maven Assembly Plugin
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
[...]
<archive>
<manifest>
<mainClass>org.sample.App</mainClass> // specify your main class here.
</manifest>
</archive>
</configuration>
[...]
</plugin>
[...]
</project>
这将产生一个可执行的jar。
答案 1 :(得分:0)
storm jar
需要两个参数;第一个:罐子;第二个:要运行的主类的完全限定名称。pom.xml
比你的更复杂。见this answer。总结:
storm jar /full/path/to/your/jar com.foo.bar.MainClass