Skip to content

Commit 2a5e47c

Browse files
ARROW-17882: [Java][Doc] Adding building steps for Windows user to produce JNI DLL (apache#14379)
Authored-by: david dali susanibar arce <davi.sarces@gmail.com> Signed-off-by: David Li <li.davidm96@gmail.com>
1 parent d008c17 commit 2a5e47c

3 files changed

Lines changed: 233 additions & 39 deletions

File tree

‎docs/source/developers/java/building.rst‎

Lines changed: 107 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,10 @@ repository:
4848
$ git submodule update --init --recursive
4949
5050
These are the options available to compile Arrow Java modules with:
51-
- Maven build tool
52-
- Docker compose
53-
- Archery
51+
52+
* Maven build tool.
53+
* Docker Compose.
54+
* Archery.
5455

5556
Building Java Modules
5657
---------------------
@@ -87,67 +88,109 @@ Archery
8788
$ java --version
8889
$ archery docker run debian-java
8990
90-
Building JNI Libraries (.dylib / .so)
91-
-------------------------------------
91+
Building JNI Libraries (\*.dylib / \*.so / \*.dll)
92+
--------------------------------------------------
9293

9394
First, we need to build the `C++ shared libraries`_ that the JNI bindings will use.
9495
We can build these manually or we can use `Archery`_ to build them using a Docker container
9596
(This will require installing Docker, Docker Compose, and Archery).
9697

97-
Note: If you are building on Apple Silicon, be sure to use a JDK version that was compiled
98-
for that architecture. See, for example, the `Azul JDK <https://www.azul.com/downloads/?os=macos&architecture=arm-64-bit&package=jdk>`_.
98+
.. note::
99+
If you are building on Apple Silicon, be sure to use a JDK version that was compiled
100+
for that architecture. See, for example, the `Azul JDK <https://www.azul.com/downloads/?os=macos&architecture=arm-64-bit&package=jdk>`_.
101+
102+
If you are building on Windows OS, see :ref:`Developing on Windows <developers-cpp-windows>`.
99103

100104
Maven
101105
~~~~~
102106

103-
- To build only the JNI C Data Interface library:
107+
- To build only the JNI C Data Interface library (MacOS / Linux):
104108

105109
.. code-block::
106110
107111
$ cd arrow/java
108112
$ export JAVA_HOME=<absolute path to your java home>
109113
$ java --version
110-
$ mvn clean generate-resources -Pgenerate-cdata-dylib_so -N
114+
$ mvn generate-resources -Pgenerate-libs-cdata-all-os -N
111115
$ ls -latr ../java-dist/lib
112116
|__ libarrow_cdata_jni.dylib
117+
|__ libarrow_cdata_jni.so
118+
119+
- To build only the JNI C Data Interface library (Windows):
120+
121+
.. code-block::
122+
123+
$ cd arrow/java
124+
$ mvn generate-resources -Pgenerate-libs-cdata-all-os -N
125+
$ dir "../java-dist/bin"
126+
|__ arrow_cdata_jni.dll
113127
114-
- To build all JNI libraries except the JNI C Data Interface library:
128+
- To build all JNI libraries (MacOS / Linux) except the JNI C Data Interface library:
115129

116130
.. code-block::
117131
118132
$ cd arrow/java
119133
$ export JAVA_HOME=<absolute path to your java home>
120134
$ java --version
121-
$ mvn clean generate-resources -Pgenerate-jni-dylib_so -N
135+
$ mvn generate-resources -Pgenerate-libs-jni-macos-linux -N
122136
$ ls -latr java-dist/lib/*_{jni,java}.*
123137
|__ libarrow_dataset_jni.dylib
124138
|__ libarrow_orc_jni.dylib
125139
|__ libgandiva_jni.dylib
126140
|__ libplasma_java.dylib
127141
142+
- To build all JNI libraries (Windows) except the JNI C Data Interface library:
143+
144+
.. code-block::
145+
146+
$ cd arrow/java
147+
$ mvn generate-resources -Pgenerate-libs-jni-windows -N
148+
$ dir "../java-dist/bin"
149+
|__ arrow_dataset_jni.dll
150+
128151
CMake
129152
~~~~~
130153

131-
- To build only the JNI C Data Interface library:
154+
- To build only the JNI C Data Interface library (MacOS / Linux):
132155

133156
.. code-block::
134157
135158
$ cd arrow
136159
$ mkdir -p java-dist java-cdata
137160
$ cmake \
138161
-S java \
139-
-B java-jni \
162+
-B java-cdata \
140163
-DARROW_JAVA_JNI_ENABLE_C=ON \
141164
-DARROW_JAVA_JNI_ENABLE_DEFAULT=OFF \
142165
-DBUILD_TESTING=OFF \
143166
-DCMAKE_BUILD_TYPE=Release \
144167
-DCMAKE_INSTALL_LIBDIR=lib \
145168
-DCMAKE_INSTALL_PREFIX=java-dist
146-
$ cmake --build java-jni --target install --config Release
169+
$ cmake --build java-cdata --target install --config Release
147170
$ ls -latr java-dist/lib
148171
|__ libarrow_cdata_jni.dylib
172+
|__ libarrow_cdata_jni.so
149173
150-
- To build all JNI libraries except the JNI C Data Interface library:
174+
- To build only the JNI C Data Interface library (Windows):
175+
176+
.. code-block::
177+
178+
$ cd arrow
179+
$ mkdir java-dist, java-cdata
180+
$ cmake ^
181+
-S java ^
182+
-B java-cdata ^
183+
-DARROW_JAVA_JNI_ENABLE_C=ON ^
184+
-DARROW_JAVA_JNI_ENABLE_DEFAULT=OFF ^
185+
-DBUILD_TESTING=OFF ^
186+
-DCMAKE_BUILD_TYPE=Release ^
187+
-DCMAKE_INSTALL_LIBDIR=lib ^
188+
-DCMAKE_INSTALL_PREFIX=java-dist
189+
$ cmake --build java-cdata --target install --config Release
190+
$ dir "java-dist/bin"
191+
|__ arrow_cdata_jni.dll
192+
193+
- To build all JNI libraries (MacOS / Linux) except the JNI C Data Interface library:
151194

152195
.. code-block::
153196
@@ -197,6 +240,55 @@ CMake
197240
|__ libgandiva_jni.dylib
198241
|__ libplasma_java.dylib
199242
243+
- To build all JNI libraries (Windows) except the JNI C Data Interface library
244+
(Please note: Plasma and ORC are not available on Windows):
245+
246+
.. code-block::
247+
248+
$ cd arrow
249+
$ mkdir java-dist, cpp-jni
250+
$ cmake ^
251+
-S cpp ^
252+
-B cpp-jni ^
253+
-DARROW_BUILD_SHARED=OFF ^
254+
-DARROW_CSV=ON ^
255+
-DARROW_DATASET=ON ^
256+
-DARROW_DEPENDENCY_USE_SHARED=OFF ^
257+
-DARROW_FILESYSTEM=ON ^
258+
-DARROW_ORC=OFF ^
259+
-DARROW_PARQUET=ON ^
260+
-DARROW_S3=ON ^
261+
-DARROW_USE_CCACHE=ON ^
262+
-DARROW_WITH_BROTLI=ON ^
263+
-DARROW_WITH_LZ4=ON ^
264+
-DARROW_WITH_SNAPPY=ON ^
265+
-DARROW_WITH_ZLIB=ON ^
266+
-DARROW_WITH_ZSTD=ON ^
267+
-DCMAKE_BUILD_TYPE=Release ^
268+
-DCMAKE_INSTALL_LIBDIR=lib ^
269+
-DCMAKE_INSTALL_PREFIX=java-dist ^
270+
-DCMAKE_UNITY_BUILD=ON ^
271+
-GNinja
272+
$ cd cpp-jni
273+
$ ninja install
274+
$ cd ../
275+
$ cmake ^
276+
-S java ^
277+
-B java-jni ^
278+
-DARROW_JAVA_JNI_ENABLE_C=OFF ^
279+
-DARROW_JAVA_JNI_ENABLE_DEFAULT=ON ^
280+
-DARROW_JAVA_JNI_ENABLE_GANDIVA=OFF ^
281+
-DARROW_JAVA_JNI_ENABLE_ORC=OFF ^
282+
-DARROW_JAVA_JNI_ENABLE_PLASMA=OFF ^
283+
-DBUILD_TESTING=OFF ^
284+
-DCMAKE_BUILD_TYPE=Release ^
285+
-DCMAKE_INSTALL_LIBDIR=lib ^
286+
-DCMAKE_INSTALL_PREFIX=java-dist ^
287+
-DCMAKE_PREFIX_PATH=$PWD/java-dist
288+
$ cmake --build java-jni --target install --config Release
289+
$ dir "java-dist/bin"
290+
|__ arrow_dataset_jni.dll
291+
200292
Archery
201293
~~~~~~~
202294

‎docs/source/developers/java/development.rst‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ UI Benchmark:
8181

8282
.. image:: img/conbench_benchmark.png
8383

84+
Integration Testing
85+
===================
86+
87+
Integration tests can be run via Archery:
88+
89+
.. code-block::
90+
91+
$ archery integration --with-java true --with-cpp false --with-js false --with-csharp false --with-go false --with-rust false
92+
8493
Code Style
8594
==========
8695

0 commit comments

Comments
 (0)