Apache storm 风暴拉进陈旧的依赖
我们正在尝试从Storm 0.10.0升级到1.0.2,我们的项目使用 在版本之间,storm社区将Apache storm 风暴拉进陈旧的依赖,apache-storm,Apache Storm,我们正在尝试从Storm 0.10.0升级到1.0.2,我们的项目使用 在版本之间,storm社区将backtype.storm包名更改为org.apache.storm包名 作为我们自己升级的一部分,我们不得不将暴风卡夫卡的版本也改为1.0.2 但是,当我在storm上运行拓扑时,我得到了关于旧版本中缺少类的错误: apache-storm-1.0.2/bin/storm \ jar \ $jarFile \ org.apache.storm.flux.Flux \ $yamlFile \
backtype.storm
包名更改为org.apache.storm
包名
作为我们自己升级的一部分,我们不得不将暴风卡夫卡的版本也改为1.0.2
但是,当我在storm上运行拓扑时,我得到了关于旧版本中缺少类的错误:
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
我不确定backtype是从哪里来的。storm正在潜入我的代码库
我已经在代码库(以及mvn依赖项:tree
)中查找了0.10.0
和backtype.storm
,但是这些旧版本的东西找不到
我甚至从我的子依赖项中排除了所有的storm kafka
版本,然后在storm kafka
上添加了一个显式依赖项,但它没有改变任何事情
Maven似乎没有错,因为我在我的~/.m2/存储库中没有看到任何0.10*
版本:
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
显然,storm在这里做错了什么。检查您的拓扑配置.yaml
,从yaml文件中选择类名后,将动态加载类。检查您的拓扑配置.yaml
,类在从yaml文件中选取类名后动态加载。因此问题是因为在代码中使用着色jar文件作为依赖项。
其中一个着色jar文件使用了较旧版本的storm依赖项,但在mvn dependency:tree
从着色jar依赖项中排除storm依赖项后,上述错误消失了
TL;DR:我实际分解了最终的jar文件(使用jar-xvf final.jar
),在backtype/storm
和org/apache/storm
包中看到了重复的类,backtype/storm
中的类可能是因为backtype
在org
之前出现的?(在这个问题上不确定,因为我希望在这种情况下包名优先)。所以问题是因为在我们的代码中使用着色jar文件作为依赖项。
其中一个着色jar文件使用了较旧版本的storm依赖项,但在mvn dependency:tree
从着色jar依赖项中排除storm依赖项后,上述错误消失了
TL;DR:我实际分解了最终的jar文件(使用jar-xvf final.jar
),在backtype/storm
和org/apache/storm
包中看到了重复的类,backtype/storm
中的类可能是因为backtype
在org
之前出现的?(这个不确定,因为我希望在这种情况下包名优先)。我在所有代码中搜索了backtype.storm
,也在topology config.yaml
文件中搜索了。任何地方都没有bactype.storm
。我已经在所有代码中搜索了backtype.storm
,也在topology config.yaml
文件中进行了显式搜索。任何地方都没有bactype.storm
。