首页 > 解决方案 > 使用 Java 11 的风暴爬虫

问题描述

尝试将 Java 版本从 Java 8 更新到 Java 11 以编译和运行 StromCrawler。

我的问题 - Java 11 是否支持 Storm Crawler?.

当我们在我的 POM 中更新 java 版本并构建项目时,我成功构建了项目,但是当我尝试运行项目时,在运行 InjectorTopology 时出现以下错误-

560  [main] INFO  c.a.h.c.InjectorTopology - ####### The Injector Topology Started #######
563  [main] INFO  c.a.h.c.u.PropertyFileReader - Enter Load Properties File
564  [main] INFO  c.a.h.c.u.PropertyFileReader - Exit Load Properties File
Exception in thread "main" java.lang.ExceptionInInitializerError
        at java.base/java.lang.J9VMInternals.ensureError(J9VMInternals.java:186)
        at java.base/java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:175)
        at clojure.lang.Namespace.<init>(Namespace.java:34)
        at clojure.lang.Namespace.findOrCreate(Namespace.java:176)
        at clojure.lang.Var.internPrivate(Var.java:151)
        at org.apache.storm.LocalCluster.<clinit>(Unknown Source)
        at com.digitalpebble.stormcrawler.ConfigurableTopology.submit(ConfigurableTopology.java:75)
        at com.vinn.hel.crawler.InjectorTopology.run(InjectorTopology.java:57)
        at com.digitalpebble.stormcrawler.ConfigurableTopology.start(ConfigurableTopology.java:50)
        at com.vinn.hel.crawler.InjectorTopology.main(InjectorTopology.java:40)
Caused by: java.lang.IllegalArgumentException: Must hint overloaded method: toArray, compiling:(clojure/gvec.clj:131:1)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6730)
        at clojure.lang.Compiler.analyze(Compiler.java:6524)
        at clojure.lang.Compiler.analyze(Compiler.java:6485)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5861)
        at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6179)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6723)
        at clojure.lang.Compiler.analyze(Compiler.java:6524)
        at clojure.lang.Compiler.analyze(Compiler.java:6485)
        at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5861)
        at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5296)
        at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3925)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6721)
        at clojure.lang.Compiler.analyze(Compiler.java:6524)
        at clojure.lang.Compiler.eval(Compiler.java:6779)
        at clojure.lang.Compiler.load(Compiler.java:7227)
        at clojure.lang.RT.loadResourceScript(RT.java:371)
        at clojure.lang.RT.loadResourceScript(RT.java:362)
        at clojure.lang.RT.load(RT.java:446)
        at clojure.lang.RT.load(RT.java:412)
        at clojure.core$load$fn__1621.invoke(core.clj:5866)
        at clojure.core$load.doInvoke(core.clj:5865)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$eval2892.invoke(core.clj:6497)
        at clojure.lang.Compiler.eval(Compiler.java:6782)
        at clojure.lang.Compiler.load(Compiler.java:7227)
        at clojure.lang.RT.loadResourceScript(RT.java:371)
        at clojure.lang.RT.loadResourceScript(RT.java:362)
        at clojure.lang.RT.load(RT.java:446)
        at clojure.lang.RT.load(RT.java:412)
        at clojure.lang.RT.doInit(RT.java:454)
        at clojure.lang.RT.<clinit>(RT.java:330)
        ... 8 more
Caused by: java.lang.IllegalArgumentException: Must hint overloaded method: toArray
        at clojure.lang.Compiler$NewInstanceMethod.parse(Compiler.java:8050)
        at clojure.lang.Compiler$NewInstanceExpr.build(Compiler.java:7642)
        at clojure.lang.Compiler$NewInstanceExpr$DeftypeParser.parse(Compiler.java:7523)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6723)
        ... 38 more```

标签: java-11stormcrawler

解决方案


添加到 Joachim 的评论中,看起来需要 Clojure 1.8 才能运行 Java 11。Storm 1.2.3 与 Clojure 1.7 一起提供。

您可以覆盖 StormCrawler 项目的 POM 中的依赖项,但这仅适用于本地模式。在部署模式下,您还需要更改安装 Storm 的依赖项。

使用 StormCrawler 2.x 和最新的 Apache Storm 可能更容易,它根本不依赖于 Clojure,或者只是用 Java 8 运行它。


推荐阅读