我目前正在尝试在 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
- 箭头-avro-0.17.1.jar
- 飞行-grpc-0.17.1.jar
- 飞行核心0.17.1.jar
- 箭头等离子0.17.1.jar
- 箭头-jdbc-0.17.1.jar
- 箭头工具-0.17.1.jar
- 箭头矢量0.17.1.jar
- 箭头内存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())
它在上面的消息之后打印该字段。