2

我目前正在尝试在 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())

它在上面的消息之后打印该字段。

4

1 回答 1

1

您收到的消息是因为您没有 log4j2 配置文件,并且记录器正在警告您,所以它将使用默认的,如果您想摆脱该消息,您可以创建一个 log4j2 src/main/resources 文件夹中的 .xml 文件,其中包含以下内容

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

您可以在此处阅读有关配置 log4j的更多信息

于 2020-05-22T01:10:18.023 回答