在Storm官方docker 1.2.1上运行拓扑时出现错误 - “无法找到或加载主类”

时间:2018-03-05 04:15:41

标签: java maven docker runtime-error apache-storm

我从Docker Hub为Storm 1.2.1提取了最新的docker镜像。根据项目下的README文档打包Storm源代码1.2.1中的storm-starter示例项目,并将该软件包重命名为“topology.jar”。但是当我使用

将jar文件提交到Storm docker时

$ docker run -it -v $(pwd)/topology.jar:/topology.jar storm storm jar /topology.jar org.apache.storm.starter.ExclamationTopology

发生错误:

  

正在运行:/usr/lib/jvm/java-1.8-openjdk/jre/bin/java -client -Ddaemon.name = -Dstorm.options = -Dstorm.home = / apache-storm-1.2.1 -Dstorm .log.dir = / logs -Djava.library.path = / usr / local / lib:/ opt / local / lib:/ usr / lib -Dstorm.conf.file = -cp /apache-storm-1.2.1/ :/ Apache的风暴-1.2.1 / LIB / :/阿帕奇风暴-1.2.1 / EXTLIB / *:/ topology.jar:/ CONF:/apache-storm-1.2.1/ bin -Dstorm.jar = / topology.jar -Dstorm.dependency.jars = -Dstorm.dependency.artifacts = {} org.apache.storm.starter.ExclamationTopology
  错误:无法找到或加载主类org.apache.storm.starter.ExclamationTopology

我在ExclamationTopology的同一个包下添加了一个HelloWorld类,只打印“Hello world!”在主要方法中:

public static void main (String[] args) { System.out.println("Hello world!"); } 当我用$ docker run -it -v $(pwd)/topology.jar:/topology.jar storm storm jar /topology.jar org.apache.storm.starter.HelloWorld提交这个新包时,它打印出“Hello world!”如预期的那样。

那么问题是什么?任何帮助表示赞赏。

PS。

    拓扑中的
  • /META-INFO/MANIFEST.MF

    Manifest-Version: 1.0
    Implementation-Title: storm-starter
    Implementation-Version: 2.0.0-SNAPSHOT
    Archiver-Version: Plexus Archiver
    Built-By: leo
    Specification-Vendor: The Apache Software Foundation
    Specification-Title: storm-starter
    Implementation-Vendor-Id: org.apache.storm
    Implementation-Vendor: The Apache Software Foundation
    Created-By: Apache Maven 3.3.9
    Build-Jdk: 1.8.0_121
    Specification-Version: 2.0
    Implementation-URL: http://storm.apache.org/examples/storm-starter
    
  • 执行jar -tvf topology.jar | grep ExclamationTopology时。控制台打印
  

2060 Mon Mar 05 11:40:08 CST 2018 org / apache / storm / starter / ExclamationTopology.class     2242 Mon Mar 05 11:40:08 CST 2018 org / apache / storm / starter / ExclamationTopology $ ExclamationBolt.class

    当发生错误时,
  • 类路径按照-cp关键字打印。风暴启动器的项目结构与Github中的官方主分支相同。此外,HelloWorld类与ExclamationTopology共享相同的包,即org.apache.storm.starter。您可以在此处参考源代码storm-starter

1 个答案:

答案 0 :(得分:0)

最后,我明白了。 Docker Hub for Storm 1.2.1上的官方docker镜像错过了名为ConfigurableTopology的类。将它从storm-client复制为本地,然后重新编译包。您可以成功提交。