Storm在我自己的jar中找不到jar类路径

时间:2016-10-28 11:18:42

标签: maven jar apache-storm

在尝试学习如何使用风暴时。我决定编译我自己的着名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应该不是问题,对吧?

2 个答案:

答案 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)

  1. storm jar需要两个参数;第一个:罐子;第二个:要运行的主类的完全限定名称。
  2. 如果要排除风暴依赖,则错误应该不同;虽然pom.xml比你的更复杂。见this answer
  3. 有时,您必须指定jar的完整路径。
  4. 总结:

    storm jar /full/path/to/your/jar com.foo.bar.MainClass