一、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文件的創建順序
- 使用File → New Project → Maven (此處不用使用Maven內置模板創建) → Next … → 完成
- 在
src/main/java
下新建項目的包信息,例如cn.com.superengine
- 在
cn.com.superengine
目錄下新建Topology主文件 - 在
cn.com.superengine
目錄下新建topology文件夾 - 在topology文件夾內新建對應的Class,實現Spout和相應Bolts
- 如有外部鏈接需要,可以建立service文件夾,編寫相應的外部接口服務類
三、本地資源文件的加載
- 使用
ClassLoader.getSystemResourceAsStream("baidutop.txt")
就能加載src/main/java/resource
下的資源文件。 - 同時注意Spout實現中的
outputCollector
消息的傳遞