開發指南#

Logger 抽象化#

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://127.0.0.1:5000/api/login/ 0.14911699295043945
Time to POST https://127.0.0.1:5000/api/benchmarks/ 0.06116318702697754

然後前往: http://127.0.0.1:5000/ 以查看報告

使用者介面首頁

../../_images/conbench_ui.png

使用者介面執行

../../_images/conbench_runs.png

使用者介面基準測試

../../_images/conbench_benchmark.png

整合測試#

整合測試可以透過 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。