【发布时间】:2020-09-08 08:12:52
【问题描述】:
我目前正在尝试在 Eclipse 中安装 Apache Arrow for Java,但遇到了一些麻烦。
我在 https://search.maven.org/search?q=g:org.apache.arrow%20AND%20v:0.17.1 上找到了 Java 包
因为没有找到安装的相关信息,所以只下载了所有的jar文件:
- 箭头性能-0.17.1.jar
- 箭头算法-0.17.1.jar
- arrow-avro-0.17.1.jar
- flight-grpc-0.17.1.jar
- flight-core-0.17.1.jar
- arrow-plasma-0.17.1.jar
- arrow-jdbc-0.17.1.jar
- 箭头工具-0.17.1.jar
- arrow-vector-0.17.1.jar
- arrow-memory-0.17.1.jar
- 箭头格式-0.17.1.jar
然后我在 Eclipse 中创建了一个新的 Java 项目,并将所有 jar 文件复制到所述项目中的文件夹“lib”中。然后,我将它们添加到Project -> Properties -> Java Build Path -> Libraries -> Add JARs 下,并选择了我的“lib”文件夹中的所有 jar 并应用。
之后,我尝试运行我在https://github.com/animeshtrivedi/blog/blob/master/post/2017-12-26-arrow.md 上找到的以下 java 代码:
import org.apache.arrow.vector.types.pojo.*;
public class FieldTesting {
public static void main(String[] args) {
Field intField = new Field("int", FieldType.nullable(new ArrowType.Int(32, true)), null);
}
}
我收到以下错误消息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.apache.arrow.vector.types.pojo.Field.<clinit>(Field.java:55)
at FieldTesting.main(FieldTesting.java:6)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more
当我转到Referenced Libraries -> arrow-vector-0.17.1.jar -> org.apache.arrow.vector.types.pojo -> Field.class 时,它显示“找不到源”,如下所示。我需要手动附加源吗?
在我下载 jar 文件的 Apache Arrow 网站上,我还可以下载“...sources.jar”文件。我还需要下载这些并将它们添加到“Java Build Path”吗? (这似乎需要做很多工作)。
还有一个“arrow-java-root”zip 文件夹,我可以用它来添加库吗?
我不熟悉向 Java 添加库,所以我不知道如何解决这个问题。任何帮助表示赞赏。
(我使用的是 Windows 10,Java 8)
解决方案:
我将我的项目转换为 Maven 项目 (Configure -> Convert to Maven Project) 并添加了依赖项 "arrow-java-root"。 (https://stackoverflow.com/a/26350902) 感谢 andrewjames 指出这一点。
但是,我现在在运行程序时收到以下消息:
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
但程序仍然正确终止,因为如果我添加:
System.out.println(intField.toString())
它打印上面消息之后的字段。
【问题讨论】:
-
该异常与没有源无关 - 您不需要源即可在 jar 中运行已编译的代码。看起来 Apache Arrow 需要 slf4j 日志记录 jar。
-
我建议使用 Maven(与 Eclipse 捆绑)来为您处理项目依赖项。请参阅here 获取一些提示。
-
@andrewjames 谢谢,我将我的项目转换为 Maven 项目并添加了依赖项“arrow-java-root”。它现在似乎正在工作:)
标签: java windows eclipse jar apache-arrow