#!/usr/bin/env bash set -euo pipefail # ====== 여기만 네 환경에 맞게 ====== NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100 REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed) USER="admin" PASS="Kamco2026!" # 실제 비번 # =================================== # 압축 풀기 rm -rf m2repo offline-seed/m2repo tar -xzf m2repo-seed.tgz ROOT="./m2repo" [ -d "$ROOT" ] || ROOT="./offline-seed/m2repo" [ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; } LOGDIR="./upload-logs" mkdir -p "$LOGDIR" OKLOG="$LOGDIR/ok.txt" FAILLOG="$LOGDIR/fail.txt" RESP="$LOGDIR/resp.tmp" LIST="$LOGDIR/version_dirs.txt" : > "$OKLOG" : > "$FAILLOG" # 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**// # depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집 find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \ | xargs -0 -n1 dirname \ | sort -u > "$LIST" count="$(wc -l < "$LIST" | tr -d ' ')" echo "Version dirs = $count" [ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; } upload_dir() { local verDir="$1" local rel="${verDir#${ROOT}/}" # rel = group/path/artifact/version local groupPath artifact version groupId groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')" artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')" version="$(echo "$rel" | awk -F/ '{print $NF}')" groupId="${groupPath//\//.}" local pom jar mod pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)" jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)" mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)" [ -z "$pom" ] && [ -z "$jar" ] && return 0 echo "UPLOAD: $groupId:$artifact:$version" args=( -sS -u "$USER:$PASS" -X POST "$NEXUS/service/rest/v1/components?repository=$REPO" -F "maven2.groupId=$groupId" -F "maven2.artifactId=$artifact" -F "maven2.version=$version" ) n=1 if [ -n "$pom" ]; then args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1)) fi if [ -n "$jar" ]; then args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1)) fi if [ -n "$mod" ]; then args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1)) fi http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)" if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then echo "$groupId:$artifact:$version" >> "$OKLOG" return 0 else echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG" sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true echo >> "$FAILLOG" return 1 fi } fails=0 while IFS= read -r d; do if ! upload_dir "$d"; then fails=$((fails+1)) fi done < "$LIST" echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails" echo "OKLOG : $OKLOG" echo "FAILLOG: $FAILLOG"