java-11 - 使用 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```
解决方案
添加到 Joachim 的评论中,看起来需要 Clojure 1.8 才能运行 Java 11。Storm 1.2.3 与 Clojure 1.7 一起提供。
您可以覆盖 StormCrawler 项目的 POM 中的依赖项,但这仅适用于本地模式。在部署模式下,您还需要更改安装 Storm 的依赖项。
使用 StormCrawler 2.x 和最新的 Apache Storm 可能更容易,它根本不依赖于 Clojure,或者只是用 Java 8 运行它。
推荐阅读
- r - R webscraping“SSL证书问题:证书已过期”但在浏览器中有效。需要将 HTML 解析为 JSON
- jquery - jquery 在 wordpress 中不起作用并引发错误
- python-3.x - 如何重新格式化时间序列以用 NaN 填充缺失的条目?
- java - 在 JSP 上“提交”时未实例化 Servlet 类 --- Servlet 实例化错误 - HTTP 500 - Eclipse
- mysql - 如何在一个 SQL 查询中获得各种总和?
- python - Locust - 在 LoadTestShape 的 __init__ 中访问 CLI 参数
- scikit-learn - Voronoi 图说明
- .net-core - Docker Compose 复制一个文件夹但不复制另一个
- react-native - Expo Camera FaceDetector 地标点
- pandas - 合并列并将其分配给 pandas 中的列