#!/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. # project.version VERSION=$1 # project.build.directory BASEDIR=$2 function run() { declare res echo "\$ ${*}" "${@}" res=$? if [[ ${res} != 0 ]]; then echo echo "Failed!" echo exit "${res}" fi } function findfileindir() { declare file="$1" declare dir="${2:-./share}" declare count count=$(find "${dir}" -iname "${file}" | wc -l) #shellcheck disable=SC2086 echo ${count} } function copyifnotexists() { declare src="$1" declare dest="$2" declare srcname declare destdir declare child declare childpath if [[ -f "${src}" ]]; then srcname=${src##*/} if [[ "${srcname}" != *.jar || $(findfileindir "${srcname}") -eq "0" ]]; then destdir=$(dirname "${dest}") mkdir -p "${destdir}" cp -p "${src}" "${dest}" fi else for childpath in "${src}"/*; do child="${childpath##*/}" if [[ "${child}" == "doc" || "${child}" == "webapps" ]]; then mkdir -p "${dest}/${child}" cp -r "${src}/${child}"/* "${dest}/${child}" continue; fi copyifnotexists "${src}/${child}" "${dest}/${child}" done fi } #Copy all contents as is except the lib. #for libs check for existence in share directory, if not exist then only copy. function copy() { declare src="$1" declare dest="$2" declare child declare childpath if [[ -d "${src}" ]]; then for childpath in "${src}"/*; do child="${childpath##*/}" if [[ "${child}" == "share" ]]; then copyifnotexists "${src}/${child}" "${dest}/${child}" else if [[ -d "${src}/${child}" ]]; then mkdir -p "${dest}/${child}" cp -pr "${src}/${child}"/* "${dest}/${child}" else cp -pr "${src}/${child}" "${dest}/${child}" fi fi done fi } # shellcheck disable=SC2164 ROOT=$(cd "${BASEDIR}"/../..;pwd) echo echo "Current directory $(pwd)" echo run rm -rf "hadoop-${VERSION}" run mkdir "hadoop-${VERSION}" run cd "hadoop-${VERSION}" run cp -p "${ROOT}/LICENSE.txt" . run cp -p "${ROOT}/NOTICE.txt" . run cp -p "${ROOT}/README.txt" . # Copy hadoop-common first so that it have always have all dependencies. # Remaining projects will copy only libraries which are not present already in 'share' directory. run copy "${ROOT}/hadoop-common-project/hadoop-common/target/hadoop-common-${VERSION}" . run copy "${ROOT}/hadoop-common-project/hadoop-nfs/target/hadoop-nfs-${VERSION}" . run copy "${ROOT}/hadoop-hdfs-project/hadoop-hdfs/target/hadoop-hdfs-${VERSION}" . run copy "${ROOT}/hadoop-hdfs-project/hadoop-hdfs-nfs/target/hadoop-hdfs-nfs-${VERSION}" . run copy "${ROOT}/hadoop-hdfs-project/hadoop-hdfs-client/target/hadoop-hdfs-client-${VERSION}" . run copy "${ROOT}/hadoop-hdfs-project/hadoop-hdfs-native-client/target/hadoop-hdfs-native-client-${VERSION}" . run copy "${ROOT}/hadoop-hdfs-project/hadoop-hdfs-rbf/target/hadoop-hdfs-rbf-${VERSION}" . run copy "${ROOT}/hadoop-yarn-project/target/hadoop-yarn-project-${VERSION}" . run copy "${ROOT}/hadoop-mapreduce-project/target/hadoop-mapreduce-${VERSION}" . run copy "${ROOT}/hadoop-tools/hadoop-tools-dist/target/hadoop-tools-dist-${VERSION}" . #copy httpfs and kms as is run cp -pr "${ROOT}/hadoop-hdfs-project/hadoop-hdfs-httpfs/target/hadoop-hdfs-httpfs-${VERSION}"/* . run cp -pr "${ROOT}/hadoop-common-project/hadoop-kms/target/hadoop-kms-${VERSION}"/* . # copy client jars as-is run mkdir -p "share/hadoop/client" run cp -p "${ROOT}/hadoop-client-modules/hadoop-client-api/target/hadoop-client-api-${VERSION}.jar" share/hadoop/client/ run cp -p "${ROOT}/hadoop-client-modules/hadoop-client-runtime/target/hadoop-client-runtime-${VERSION}.jar" share/hadoop/client/ run cp -p "${ROOT}/hadoop-client-modules/hadoop-client-minicluster/target/hadoop-client-minicluster-${VERSION}.jar" share/hadoop/client/ echo echo "Hadoop dist layout available at: ${BASEDIR}/hadoop-${VERSION}" echo