2016-10-28 75 views
0

嘗試學習如何使用風暴。我決定編譯我自己的衆所周知的WordCount拓撲實例,看看它是如何完成的。該代碼與例子的代碼完全相同。 (https://github.com/apache/storm/blob/master/examples/storm-starter/src/jvm/org/apache/storm/starter/WordCountTopology.java風暴無法在我自己的jar中找到jar類路徑

但是,無論何時我嘗試運行jar,都會收到錯誤消息,說我無法找到或加載主類。我可以運行默認的示例jar,它與storm捆綁在一起,沒有問題(如下圖所示),所以它不應該是調用語法問題。

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

Maven的,沒有問題創造了罐子,起初我以爲我沒有正確排除風暴依賴性在POM文件,但它應該是這樣的吧?

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

這也許是一個模糊的問題,但說實話,不知道在哪裏,以解決它,因爲代碼是一樣的,所以產生一個成功的罐子不應該是一個問題,對不對?

回答

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來完成。

+0

像你說的,但我仍然得到同樣的錯誤,我做到了。雖然我打開了Manifest.mf文件,但現在有主要的類路徑,這是以前沒有的。 – user697110

0
  1. storm jar需要兩個參數;第一個:罐子;第二個:要運行的主類的全限定名。
  2. 如果你想排除風暴依賴,錯誤應該是不同的;雖然pom.xml比你有更復雜的。請參閱this answer
  3. 有時候,你必須指定jar的完整路徑。

總結:

storm jar /full/path/to/your/jar com.foo.bar.MainClass 
相關問題