/ / Storm wyciąga przestarzałe zależności - apache-storm

Burza ciągnie w nieświeże zależności - burza apache

Staramy się uaktualnić z wersji Storm 0.10.0 do 1.0.2 i nasz projekt wykorzystuje wylewka kafka

Między wersjami backtype.storm nazwy pakietów zostały zmienione na org.apache.storm nazwa-pakietu przez społeczność Storm.

W ramach naszej własnej aktualizacji musieliśmy się zmienić storm-kafkaw wersji 1.0.2

Ale kiedy uruchamiam topologię na burzy, pojawia się błąd dotyczący brakujących klas ze starszej wersji:

apache-storm-1.0.2/bin/storm 
jar 
$jarFile 
org.apache.storm.flux.Flux 
$yamlFile 
--remote



+-         Apache Storm        -+
+-  data FLow User eXperience  -+
Version: 1.0.2
Parsing file: topology-config.yaml
333  [main] INFO  o.a.s.f.p.FluxParser - loading YAML from input stream...
335  [main] INFO  o.a.s.f.p.FluxParser - Not performing property substitution.
335  [main] INFO  o.a.s.f.p.FluxParser - Not performing environment variable substitution.
Exception in thread "main" java.lang.NoClassDefFoundError: backtype/storm/spout/MultiScheme
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.storm.flux.FluxBuilder.buildObject(FluxBuilder.java:291)
at org.apache.storm.flux.FluxBuilder.buildComponents(FluxBuilder.java:350)
at org.apache.storm.flux.FluxBuilder.buildTopology(FluxBuilder.java:75)
at org.apache.storm.flux.Flux.runCli(Flux.java:153)
at org.apache.storm.flux.Flux.main(Flux.java:98)
Caused by: java.lang.ClassNotFoundException: backtype.storm.spout.MultiScheme
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

Nie jestem pewien skąd backtype.storm wkrada się do mojej bazy kodu.

Przejrzałem całą bazę kodu (i mvn dependency:tree) dla 0.10.0 i backtype.storm ale nie można znaleźć tych ze starszej wersji.

Wykluczyłem nawet wszystko storm-kafka wersje z moich zależności zależnych od dziecka, a następnie dodałem wyraźną zależność od storm-kafka ale nic nie zmieniło.

Wydaje się, że Maven nie ponosi winy, ponieważ nie widzę żadnych 0.10* wersje w moim ~/.m2/repository:

ls ~/.m2/repository/org/apache/storm/*
~/.m2/repository/org/apache/storm/flux:
1.0.2

~/.m2/repository/org/apache/storm/flux-core:
1.0.2

~/.m2/repository/org/apache/storm/storm:
1.0.2

~/.m2/repository/org/apache/storm/storm-kafka:
1.0.2

Najwyraźniej burza robi tutaj coś złego.

Odpowiedzi:

0 dla odpowiedzi № 1

Sprawdź swój topology-config.yaml, Klasa jest ładowana dynamicznie po wybraniu nazwy klasy z pliku yaml.


0 dla odpowiedzi nr 2

Problem polegał na użyciu zacienionych plików jar jako zależności w naszym kodzie. Jeden z zacienionych plików jar używał starszej wersji zależności od burzy i jakoś tego nie pokazano w mvn dependency:tree

Po wykluczeniu zależności burzy od zależności zacienionego słoika powyższy błąd zniknął.

TL; DR: Faktycznie rozbiłem plik jar (używając jar -xvf final.jar) i widział duplikaty klas w backtype/storm i org/apache/storm pakiety i klasy w backtype/storm byli odbierani, być może dlatego backtype nadchodzi wcześniej org leksykograficznie? (Nie jestem pewien w tej sprawie, ponieważ w takich przypadkach spodziewałbym się, że nazwa pakietu będzie miała pierwszeństwo).