@@ -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
5556Building 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
9394First, we need to build the `C++ shared libraries `_ that the JNI bindings will use.
9495We 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
100104Maven
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
0 commit comments