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

t5zmwmid  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(394)

在尝试学习如何使用风暴。我决定编译我自己的著名wordcount拓扑示例,看看它是如何实现的。代码与示例完全相同(https://github.com/apache/storm/blob/master/examples/storm-starter/src/jvm/org/apache/storm/starter/wordcounttopology.java)
但是,每当我尝试运行jar时,我都会得到一个错误,即找不到或无法加载主类。我可以运行与storm捆绑在一起的默认示例jar,没有任何问题(如在bellow中),因此它不应该是调用语法问题。

bin/storm jar lib/"name".jar "classpath"

maven创建jar没有任何问题,最初我假设我没有在pom文件中正确地排除storm依赖,但应该是这样的,对吗?

<dependencies>
    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-core</artifactId>
        <version>1.0.2</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

这也许是一个模糊的问题,但老实说,由于代码是相同的,所以不确定在哪里解决它,所以生成一个成功的jar不应该是一个问题,对吧?

tpgth1q7

tpgth1q71#

storm jar 需要两个参数;第一个:jar;第二个:要运行的主类的完整限定名。
如果要排除storm依赖项,则错误应该不同;虽然 pom.xml 比你所拥有的更复杂。看看这个答案。
有时,必须指定jar的完整路径。
总而言之:

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

w1jd8yoj2#

首先,删除 <scope>provided</scope> 从你的依赖中解脱出来。
其次,这里需要的是一个可执行jar。默认情况下,maven不生成可执行jar。因此,在构建jar时,必须指定main类。这可以使用maven汇编插件来完成

<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。

相关问题