| #!/usr/bin/env bash | |
| # | |
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| set -euo pipefail | |
| if [[ "${ARROW_JAVA_BUILD:-ON}" != "ON" ]]; then | |
| exit | |
| fi | |
| source_dir=${1} | |
| build_dir=${2} | |
| java_jni_dist_dir=${3} | |
| mvn="mvn -B -DskipTests -Drat.skip=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn" | |
| if [ "${ARROW_JAVA_SKIP_GIT_PLUGIN:-OFF}" = "ON" ]; then | |
| mvn="${mvn} -Dmaven.gitcommitid.skip=true" | |
| fi | |
| # We want to do an out-of-source build since (when using docker) we'll pollute | |
| # the source directory with files owned by root, but Maven does not really | |
| # support this. Instead, copy directories to the build directory. | |
| rm -rf "${build_dir}" | |
| mkdir -p "${build_dir}/arrow-format" | |
| cp -r "${source_dir}/arrow-format" "${build_dir}" | |
| cp -r "${source_dir}/dev" "${build_dir}" | |
| # Instead of hardcoding the list of directories to copy, find pom.xml and then | |
| # crawl back up to the top. GNU realpath has --relative-to but this does not | |
| # work on macOS | |
| poms=$(find "${source_dir}" -not \( -path "${source_dir}"/build -prune \) -type f -name pom.xml) | |
| if [[ "$OSTYPE" == "darwin"* ]]; then | |
| poms=$(echo "$poms" | xargs -n1 python -c "import sys; import os.path; print(os.path.relpath(sys.argv[1], '${source_dir}'))") | |
| else | |
| poms=$(echo "$poms" | xargs -n1 realpath -s --relative-to="${source_dir}") | |
| fi | |
| for source_root in $(echo "${poms}" | awk -F/ '{print $1}' | sort -u); do | |
| cp -r "${source_dir}/${source_root}" "${build_dir}" | |
| done | |
| pushd "${build_dir}" | |
| # TODO: ARROW_JAVA_SHADE_FLATBUFFERS isn't used for our artifacts. Do | |
| # we need this? | |
| # See also: | |
| # * https://github.com/apache/arrow/issues/22021 | |
| # * https://github.com/apache/arrow-java/issues/67 | |
| if [ "${ARROW_JAVA_SHADE_FLATBUFFERS:-OFF}" == "ON" ]; then | |
| mvn="${mvn} -Pshade-flatbuffers" | |
| fi | |
| if [ "${ARROW_JAVA_CDATA:-OFF}" = "ON" ]; then | |
| mvn="${mvn} -Darrow.c.jni.dist.dir=${java_jni_dist_dir} -Parrow-c-data" | |
| fi | |
| if [ "${ARROW_JAVA_JNI:-OFF}" = "ON" ]; then | |
| mvn="${mvn} -Darrow.cpp.build.dir=${java_jni_dist_dir} -Parrow-jni" | |
| fi | |
| # Use `2 * ncores` threads | |
| ${mvn} -T 2C clean install | |
| if [ "${ARROW_JAVA_BUILD_DOCS:-OFF}" == "ON" ]; then | |
| # HTTP pooling is turned off to avoid download issues: | |
| # https://github.com/apache/arrow/issues/27496 | |
| # | |
| # Maven site plugins not compatible with multithreading: | |
| # https://github.com/apache/arrow/issues/43378 | |
| ${mvn} \ | |
| -Dcheckstyle.skip=true \ | |
| -Dhttp.keepAlive=false \ | |
| -Dmaven.wagon.http.pool=false \ | |
| site | |
| rm -rf docs/reference | |
| mkdir -p docs | |
| cp -a target/site/apidocs/ docs/reference | |
| fi | |
| popd |