Hi, Right now, I have my storm cluster setting up (three machines respectively for zookeeper, nimbus, supervisor). Before submitting the topology to the storm cluster, I usually test storm program in local model with Eclipse. And then I use Eclipse to package the storm project and send to nimbus machine to submit. But whatever I package from Eclipse (the entire project or the target folder..), it shows error that cannot find class.... The following experments are what I did on Storm :
Getting-Started.jar is the entire project jar packaged from Eclipse. I use "jar -tf Getting-Started.jar" to extract, you can see the path: Getting-Started/.classpath Getting-Started/.gitignore Getting-Started/.project Getting-Started/.settings/org.eclipse.jdt.core.prefs Getting-Started/.settings/org.eclipse.m2e.core.prefs Getting-Started/.settings/org.maven.ide.eclipse.prefs Getting-Started/Readme.txt Getting-Started/bin/data/ Getting-Started/bin/src/main/java/dataApi/ Getting-Started/bin/src/main/java/topology/bolts/ Getting-Started/bin/src/main/java/topology/data/ Getting-Started/bin/src/main/java/topology/spouts/ Getting-Started/bin/src/main/resources/ Getting-Started/bin/src/test/java/ Getting-Started/bin/target/classes/META-INF/maven/storm.book/ Getting-Started/bin/target/classes/dataApi/ Getting-Started/bin/target/classes/topology/bolts/ Getting-Started/bin/target/classes/topology/data/ Getting-Started/bin/target/classes/topology/spouts/ Getting-Started/data/ Getting-Started/pom.html Getting-Started/pom.xml Getting-Started/src/main/java/dataApi/DataConnector.java Getting-Started/src/main/java/dataApi/DataOutputController.java Getting-Started/src/main/java/dataApi/FinancialDataStream.java Getting-Started/src/main/java/dataApi/QuoteInterface.java Getting-Started/src/main/java/topology/FinancialDataOperationTopology.java Getting-Started/src/main/java/topology/RandomFinancialDataTopology.java Getting-Started/src/main/java/topology/bolts/DataNormalizerBolt.java Getting-Started/src/main/java/topology/bolts/QuoteAveragerBolt.java Getting-Started/src/main/java/topology/data/FinancialData.java Getting-Started/src/main/java/topology/data/Symbol.java Getting-Started/src/main/java/topology/spouts/FinancialDataSpout.java Getting-Started/src/main/java/topology/spouts/RandomFinancialDataSpout.java Getting-Started/src/main/resources/financialdata.txt Getting-Started/src/test/java/ Getting-Started/target/classes/META-INF/MANIFEST.MF Getting-Started/target/classes/META-INF/maven/storm.book/Getting-Started/pom.properties Getting-Started/target/classes/META-INF/maven/storm.book/Getting-Started/pom.xml Getting-Started/target/classes/dataApi/DataConnector.class Getting-Started/target/classes/dataApi/DataOutputController.class Getting-Started/target/classes/dataApi/FinancialDataStream.class Getting-Started/target/classes/dataApi/QuoteInterface.class Getting-Started/target/classes/financialdata.txt Getting-Started/target/classes/topology/FinancialDataOperationTopology.class Getting-Started/target/classes/topology/RandomFinancialDataTopology.class Getting-Started/target/classes/topology/bolts/DataNormalizerBolt.class Getting-Started/target/classes/topology/bolts/QuoteAveragerBolt.class Getting-Started/target/classes/topology/data/FinancialData.class Getting-Started/target/classes/topology/data/Symbol.class Getting-Started/target/classes/topology/spouts/FinancialDataSpout.class Getting-Started/target/classes/topology/spouts/RandomFinancialDataSpout.class Getting-Started/target/get.jar Getting-Started/target/test-classes/ I see the topology path in this jar is : Getting-Started/target/classes/topology/RandomFinancialDataTopology.class Then I use "storm jar" command: /usr/local/storm/bin/storm jar Getting-Started.jar topology.RandomFinancialDataTopology datatopology It shows this error: Exception in thread "main" java.lang.NoClassDefFoundError: Getting-Started/target/classes/topology/RandomFinancialDataTopology (wrong name: topology/RandomFinancialDataTopology) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:643) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:323) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:268) Could not find the main class: Getting-Started.target.classes.topology.RandomFinancialDataTopology. Program will exit. Then I try to use maven command "mvn package" to package on the nimbus command line and submit the topology, it works. When I extract the jar using maven I see it only packages the files in the "Getting-Started/target/classes". Then I manually package this folder and try to submit again. Unfortunately it shows the same error as I showed above. I want to ask whether there is a way to handle this situation if I want to first use Eclipse to package and send the jar to nimbus machine for submitting. Thanks, Cui Qin