开发指南

日志抽象

Apache Arrow Java 使用 SLF4J API,因此请配置 SLF4J 以查看日志(例如通过 Logback 或 Apache Log4j)

  1. 如果用户未通过 Logback 或 Apache Log4j 添加 jar 依赖项,则 SLF4J 将默认为无操作 (NOP) 日志记录。

  2. 如果用户添加了任何通过 Logback 或 Apache Log4j 的依赖项,但未配置/添加/定义 logback.xml/log4j2.xml,则日志将默认为 DEBUG 模式。

  3. 要禁用调试日志,用户必须在自己的 logback.xml/log4j2.xml 中定义自己的规则并定义自己的记录器 (logger)。

单元测试

单元测试由 Maven 在构建过程中运行。

为了加快构建速度,可以通过传递 -DskipTests 参数来跳过它们。

$ cd arrow/java
$ mvn \
    -Darrow.cpp.build.dir=../java-dist/lib -Parrow-jni \
    -Darrow.c.jni.dist.dir=../java-dist/lib -Parrow-c-data \
    clean install

性能测试

arrow-performance 模块包含性能基准测试。

让我们配置环境以运行性能测试

如果您需要在 UI 上查看性能测试结果,请进行配置(可选)

让我们执行基准测试

$ cd benchmarks
$ conbench java-micro --help
$ conbench java-micro
    --iterations=1
    --commit=e90472e35b40f58b17d408438bb8de1641bfe6ef
    --java-home=<absolute path to your java home>
    --src=<absolute path to your arrow project>
    --benchmark-filter=org.apache.arrow.adapter.AvroAdapterBenchmarks.testAvroToArrow
Benchmark                              Mode  Cnt       Score   Error  Units
AvroAdapterBenchmarks.testAvroToArrow  avgt       725545.783          ns/op
Time to POST https://:5000/api/login/ 0.14911699295043945
Time to POST https://:5000/api/benchmarks/ 0.06116318702697754

然后访问:http://127.0.0.1:5000/ 查看报告

UI 主页

../_images/conbench_ui.png

UI 运行记录

../_images/conbench_runs.png

UI 基准测试

../_images/conbench_benchmark.png

集成测试

集成测试可以 通过 Archery 运行。例如,假设您只构建了 Arrow Java 并想运行 IPC 集成测试,您可以执行

$ archery integration --run-ipc --with-java 1

代码样式

当前的 Java 代码遵循 Google Java 样式 并带有 Apache 许可证头。

Java 代码样式在构建期间由 Spotless 进行检查,持续集成构建将验证更改是否符合样式指南。

自动修复代码样式问题

  • 您无需构建项目即可使用 mvn spotless:check 检查样式。

  • 您可以使用 mvn spotless:apply 自动格式化源代码。

示例

The following files had format violations:
    src/main/java/org/apache/arrow/algorithm/rank/VectorRank.java
        @@ -15,7 +15,6 @@
        ·*·limitations·under·the·License.
        ·*/

        -
        package·org.apache.arrow.algorithm.rank;

        import·java.util.stream.IntStream;
Run 'mvn spotless:apply' to fix these violations.

IntelliJ IDEA 和 Eclipse 的代码格式化程序

按照说明为以下软件设置 google-java-format

Checkstyle

Checkstyle 也用于通用代码检查。配置位于 checkstyle。您也可以在不构建项目的情况下检查样式。这将检查当前目录下或单个模块内的所有源代码的代码样式。

$ mvn checkstyle:check

Maven pom.xml 样式由 Spotless 根据 Apache Maven pom.xml 指南 强制执行。您也可以在不构建项目的情况下检查样式。这将检查当前目录下或单个模块内的所有 pom.xml 文件。

$ mvn spotless:check

这将把样式应用到当前目录下或单个模块内的所有 pom.xml 文件。

$ mvn spotless:apply

构建缓存

构建缓存通过 Develocity(前身为 Maven Enterprise)实现。要强制进行不带缓存的构建,请运行

mvn clean install -Ddevelocity.cache.local.enabled=false -Ddevelocity.cache.remote.enabled=false

例如,这对于确保您看到 ErrorProne 的所有警告很有用。

ErrorProne

对于生成的代码,应禁用 ErrorProne。