Storm在IntelliJ IDEA下開發的注意事項

一、Maven工程文件pom.xml的編寫

Maven通過pom.xml進行代碼文件搜尋、包依賴處理,需要注意的是:

  • 設置項目的文件編碼和所使用的JDK版本

      <properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    

    ?

  • 設置編譯采用的插件工具,這里推薦采用maven-assembly-plugin

          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
              <archive>
                <manifest>
                  <mainClass>cn.com.superengine.AppMainTopologyRunner</mainClass>
                </manifest>
              </archive>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
    

    如果采用的是 maven-jar-plugin 編譯生成的jar不帶依賴包

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
              <archive>
                <manifest>
                  <mainClass>cn.com.superengine.AppMainTopologyRunner</mainClass>
                </manifest>
              </archive>
            </configuration>
          </plugin>
    

    執行出現以下結果:

    Error: Unable to initialize main class cn.com.superengine.AppMainTopologyRunner
    Caused by: java.lang.NoClassDefFoundError: org/apache/storm/topology/IRichSpout`
    

    ?

  • 需要指定依賴的storm插件版本,不同的版本引用方式不同:

    • storm 最新正式版

      import org.apache.storm.*;
      
          <dependency>
            <groupId>org.apache.storm</groupId>
            <artifactId>storm-core</artifactId>
            <version>1.1.1</version>
          </dependency>
      

      ?

    • storm兼容版

      import backtype.storm.*;
      
          <dependency>
            <groupId>org.apache.storm</groupId>
            <artifactId>storm-core</artifactId>
            <version>0.9.3</version>
          </dependency>
      

      ?

二、項目中Package和Class文件的創建順序

  1. 使用File → New Project → Maven (此處不用使用Maven內置模板創建) → Next … → 完成
  2. src/main/java下新建項目的包信息,例如cn.com.superengine
  3. cn.com.superengine目錄下新建Topology主文件
  4. cn.com.superengine目錄下新建topology文件夾
  5. 在topology文件夾內新建對應的Class,實現Spout和相應Bolts
  6. 如有外部鏈接需要,可以建立service文件夾,編寫相應的外部接口服務類

三、本地資源文件的加載

  1. 使用ClassLoader.getSystemResourceAsStream("baidutop.txt")就能加載src/main/java/resource下的資源文件。
  2. 同時注意Spout實現中的outputCollector消息的傳遞
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容