开发指南#
日志抽象#
Apache Arrow Java 使用 SLF4J API,因此请配置 SLF4J 以查看日志(例如,通过 Logback/Apache Log4j)
如果用户没有通过 Logback 或 Apache Log4j 添加任何 jar 依赖项,则 SLF4J 将默认进行无操作 (NOP) 日志记录。
如果用户通过 Logback 或 Apache Log4j 添加了任何依赖项但未配置/添加/定义 logback.xml/log4j2.xml,则日志将默认为 DEBUG 模式。
要禁用调试日志,用户必须在其 logback.xml/log4j2.xml 中定义自己的规则并定义自己的记录器。
单元测试#
单元测试在构建期间由 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 上查看性能测试,请配置(可选)
安装 Conbench
让我们执行基准测试
$ 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 主页
UI 运行
UI 基准测试
集成测试#
集成测试可以通过 Archery 运行。例如,假设您只构建了 Arrow Java 并想运行 IPC 集成测试,您可以这样做
$ archery integration --run-ipc --with-java 1
代码风格#
当前的 Java 代码遵循 Google Java Style 并带有 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 应该被禁用。