| #!/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 |