Hi,

Just following up on my previous email, I found a similar problem on "stack 
overflow" ( 
http://stackoverflow.com/questions/29917158/apache-storm-java-lang-noclassdeffounderror-com-google-gson-gson
 ), this one gives a solution with the maven-shade-plugin .

I tried this solution and that partially works but I had the next error :

java.lang.RuntimeException: Found multiple defaults.yaml resources. You're 
probably bundling the Storm jars with your topology jar


I someone can help me, i would appreciate it.

Charlie


________________________________
De : charlie quillard
Envoyé : vendredi 10 juillet 2015 16:04
À : [email protected]
Objet : Problem to submit a topology to my storm cluster



Hello,



I want to execute a C++ lib on Storm and to implement this native lib in a bolt 
thought Swig. It doesn't work : I have a problem to submit a storm topology to 
my storm cluster.



First, I generated a c++ library. I want to use it in Java with Swig (an 
evolved wrapper based on JNI). The swig wrapper generate a java library (.jar) 
and a shared library (.so).



Then, I create the jar of the Storm application with Maven. This jar file 
contain : my java classes, my swig jar and my shared library (.so).



I include the Swig jar library  in the pom.xml with theses following lines :


      <dependency>
          <groupId>com.example</groupId>
          <artifactId>JavaEncoder</artifactId>
          <scope>system</scope>
          <version>1.0</version>
          
<systemPath>${project}/src/main/resources/JavaNativeEncoder.jar</systemPath>
      </dependency>



I enable the jar generation plug-in in the pom.xml with these following lines :


<build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <mainClass>com.example.JavaEncoder.PerfTopology</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>

  </plugins>

</build>





When I submit my topology to my cluster, I have the following Error  :



Exception in thread "main" java.lang.NoClassDefFoundError: 
com/example/JavaEncoder/NativeEncoder
    at com.example.JavaEncoder.PerfTopology.main(PerfTopology.java:59)
Caused by: java.lang.ClassNotFoundException: 
com.example.JavaEncoder.NativeEncoder
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)



I checked that if I unzipped the generated file, the swig class and the .so 
file is well contained in the Storm jar file.



To conclude, I don't understand why that does not works if someone have an 
idea, i would appreciate it.


Thanks in advance,


Charlie QUILLARD

Reply via email to