java.lang.ClassNotFoundException: org.apache.storm.topology.IRichSpout

java.lang.NoClassDefFoundError: org/apache/storm/topology/IRichSpout

at java.lang.Class.getDeclaredMethods0(Native Method)

at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)

at java.lang.Class.privateGetMethodRecursive(Class.java:3048)

at java.lang.Class.getMethod0(Class.java:3018)

at java.lang.Class.getMethod(Class.java:1784)

at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)

at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)

Caused by: java.lang.ClassNotFoundException: org.apache.storm.topology.IRichSpout

at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

... 7 more

Error: A JNI error has occurred, please check your installation and try again

Exception in thread "main"

jar的常见依赖范围有compile、provided、runtime、test四种,IDEA中的运行环境和storm集群上运行的环境不一致,所以打包时选择好jar包的依赖范围,storm集群会提供storm的jar,所以这里改为provided

<dependencies>

<dependency>

<groupId>org.apache.storm</groupId>

<artifactId>storm-core</artifactId>

<version>1.1.1</version>

<!-- 目前<scope>可以使用5个值:

* compile,缺省值,适用于所有阶段,会随着项目一起发布。

* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。

* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。

* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。

* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。 -->

<scope>provided</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.7.0</version>

<configuration>

<source>1.8</source>

<target>1.8</target>

</configuration>

</plugin>

</plugins>

</build>