diff --git a/gukyuin/label-send/.gradle/8.14/checksums/checksums.lock b/gukyuin/label-send/.gradle/8.14/checksums/checksums.lock
index f939e90..795af93 100644
Binary files a/gukyuin/label-send/.gradle/8.14/checksums/checksums.lock and b/gukyuin/label-send/.gradle/8.14/checksums/checksums.lock differ
diff --git a/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.bin
index 28d4c16..0ac8fad 100644
Binary files a/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.bin and b/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.bin differ
diff --git a/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.lock
index aed6d30..be05a7d 100644
Binary files a/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.lock and b/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.lock differ
diff --git a/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.bin
index 257fba7..b19c366 100644
Binary files a/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.bin and b/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.bin differ
diff --git a/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.lock
index 5e4864f..a55a5e4 100644
Binary files a/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.lock and b/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.lock differ
diff --git a/gukyuin/label-send/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/label-send/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 2642ad1..acf41ce 100644
Binary files a/gukyuin/label-send/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/gukyuin/label-send/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/gukyuin/label-send/.gradle/file-system.probe b/gukyuin/label-send/.gradle/file-system.probe
index 660e380..f41f3e4 100644
Binary files a/gukyuin/label-send/.gradle/file-system.probe and b/gukyuin/label-send/.gradle/file-system.probe differ
diff --git a/gukyuin/label-send/build.gradle b/gukyuin/label-send/build.gradle
index 8ee2499..ca27d56 100644
--- a/gukyuin/label-send/build.gradle
+++ b/gukyuin/label-send/build.gradle
@@ -29,9 +29,20 @@ configurations {
}
}
+//repositories {
+// mavenCentral()
+// maven { url "https://repo.osgeo.org/repository/release/" }
+//}
+
+def repoUrl = System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+
repositories {
- mavenCentral()
- maven { url "https://repo.osgeo.org/repository/release/" }
+ maven {
+ url = uri(repoUrl)
+ allowInsecureProtocol = true
+ }
}
dependencies {
diff --git a/gukyuin/label-send/build/libs/label-send.jar b/gukyuin/label-send/build/libs/label-send.jar
index 9e6e939..db532b7 100644
Binary files a/gukyuin/label-send/build/libs/label-send.jar and b/gukyuin/label-send/build/libs/label-send.jar differ
diff --git a/gukyuin/label-send/build/reports/problems/problems-report.html b/gukyuin/label-send/build/reports/problems/problems-report.html
index c67bd41..7d0c6ea 100644
--- a/gukyuin/label-send/build/reports/problems/problems-report.html
+++ b/gukyuin/label-send/build/reports/problems/problems-report.html
@@ -650,7 +650,7 @@ code + .copy-button {
diff --git a/gukyuin/label-send/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/label-send/build/tmp/compileJava/previous-compilation-data.bin
index e93cb0e..97da47b 100644
Binary files a/gukyuin/label-send/build/tmp/compileJava/previous-compilation-data.bin and b/gukyuin/label-send/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/gukyuin/label-send/build/tmp/spotless-register-dependencies b/gukyuin/label-send/build/tmp/spotless-register-dependencies
deleted file mode 100644
index 56a6051..0000000
--- a/gukyuin/label-send/build/tmp/spotless-register-dependencies
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/gukyuin/label-send/gradle/wrapper/gradle-wrapper.properties b/gukyuin/label-send/gradle/wrapper/gradle-wrapper.properties
index ca025c8..ce3d66d 100644
--- a/gukyuin/label-send/gradle/wrapper/gradle-wrapper.properties
+++ b/gukyuin/label-send/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
+#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
+distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gukyuin/label-send/make_seed_bundle_succ.sh b/gukyuin/label-send/make_seed_bundle_succ.sh
new file mode 100644
index 0000000..024878f
--- /dev/null
+++ b/gukyuin/label-send/make_seed_bundle_succ.sh
@@ -0,0 +1,293 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+OUTDIR="${OUTDIR:-offline-seed}"
+M2OUT="$OUTDIR/m2repo"
+LOGDIR="$OUTDIR/logs"
+
+ARTIFACT_URLS="$OUTDIR/artifact-urls.txt"
+FAILED_URLS="$OUTDIR/failed-urls.txt"
+REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt"
+IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt"
+MISSING_URLS="$OUTDIR/missing-from-nexus.txt"
+REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt"
+RETRY_URLS="$OUTDIR/retry-source-urls.txt"
+REPO_CANDIDATES="$OUTDIR/repository-candidates.txt"
+REPO_HINTS="$OUTDIR/repository-hints.txt"
+
+mkdir -p "$M2OUT" "$LOGDIR"
+: > "$FAILED_URLS"
+: > "$REAL_FAILED_URLS"
+: > "$IGNORED_FAILED_URLS"
+: > "$MISSING_URLS"
+: > "$REAL_MISSING_URLS"
+: > "$RETRY_URLS"
+: > "$REPO_CANDIDATES"
+: > "$REPO_HINTS"
+
+GRADLE_CMD=(./gradlew --no-daemon)
+
+SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}"
+DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}"
+SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}"
+QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}"
+
+MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}"
+GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}"
+OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}"
+
+echo "[1/8] Running Gradle to trigger resolves..."
+"${GRADLE_CMD[@]}" \
+ clean compileJava testClasses spotlessCheck build \
+ -x test \
+ --refresh-dependencies \
+ --debug \
+ 2>&1 | tee "$LOGDIR/gradle-debug.log" || true
+
+echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..."
+grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \
+ | sed -E 's/\?.*$//' \
+ | sort -u \
+ > "$ARTIFACT_URLS"
+
+echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")"
+
+echo "[3/8] Appending known required artifacts..."
+cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp"
+mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS"
+echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")"
+
+to_relative_path() {
+ local url="$1"
+
+ if [[ "$url" == *"/maven2/"* ]]; then
+ printf '%s\n' "${url#*/maven2/}"
+ return 0
+ fi
+
+ if [[ "$url" == *"/m2/"* ]]; then
+ printf '%s\n' "${url#*/m2/}"
+ return 0
+ fi
+
+ if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then
+ printf '%s\n' "${BASH_REMATCH[1]}"
+ return 0
+ fi
+
+ return 1
+}
+
+is_ignorable_url() {
+ local url="$1"
+
+ case "$url" in
+ */org.springframework.boot.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */org.springframework.boot.gradle.plugin-*.module)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-apt/*/querydsl-apt-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+map_upstream_url() {
+ local url="$1"
+ local rel
+
+ if ! rel="$(to_relative_path "$url")"; then
+ return 1
+ fi
+
+ case "$rel" in
+ org/geotools/*|it/geosolutions/*|javax/media/*)
+ printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel"
+ ;;
+ io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ com/diffplug/spotless/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ *)
+ printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel"
+ ;;
+ esac
+}
+
+echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..."
+grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \
+ | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \
+ | sort -u \
+ > "$MISSING_URLS" || true
+
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ continue
+ fi
+ printf '%s\n' "$url" >> "$REAL_MISSING_URLS"
+ mapped="$(map_upstream_url "$url" || true)"
+ if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then
+ printf '%s\n' "$mapped" >> "$RETRY_URLS"
+ printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS"
+ fi
+done < "$MISSING_URLS"
+
+sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+sort -u "$RETRY_URLS" -o "$RETRY_URLS"
+sort -u "$REPO_HINTS" -o "$REPO_HINTS"
+
+cat "$RETRY_URLS" >> "$ARTIFACT_URLS"
+sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS"
+
+echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")"
+echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")"
+echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")"
+
+download_one() {
+ local url="$1"
+ local rel
+
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ return 0
+ fi
+
+ if ! rel="$(to_relative_path "$url")"; then
+ echo " - [SKIP] unknown URL form: $url"
+ return 0
+ fi
+
+ local dest="$M2OUT/$rel"
+ mkdir -p "$(dirname "$dest")"
+
+ if [[ -f "$dest" ]]; then
+ return 0
+ fi
+
+ echo " - [GET] $rel"
+ if ! curl -fSL "$url" -o "$dest"; then
+ echo "$url" >> "$FAILED_URLS"
+ rm -f "$dest" 2>/dev/null || true
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ else
+ printf '%s\n' "$url" >> "$REAL_FAILED_URLS"
+ echo " !! failed: $url"
+ fi
+ fi
+}
+
+export -f to_relative_path
+export -f is_ignorable_url
+export -f download_one
+export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS
+
+echo "[5/8] Downloading artifacts into m2 layout..."
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ download_one "$url"
+done < "$ARTIFACT_URLS"
+
+sort -u "$FAILED_URLS" -o "$FAILED_URLS"
+sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+
+echo "[6/8] Extracting repository candidates declared inside downloaded POMs..."
+while IFS= read -r -d '' pom; do
+ awk -v pom="$pom" '
+ // { in_repo=1; id=""; url=""; next }
+ /<\/repository>/ {
+ if (in_repo && url != "" && url !~ /^file:/) {
+ print url "\t" pom "\t" id
+ }
+ in_repo=0
+ id=""
+ url=""
+ next
+ }
+ in_repo {
+ if (match($0, /([^<]+)<\/id>/, m)) {
+ id=m[1]
+ }
+ if (match($0, /([^<]+)<\/url>/, m)) {
+ url=m[1]
+ }
+ }
+ ' "$pom"
+done < <(find "$M2OUT" -type f -name '*.pom' -print0) \
+ | sort -u \
+ > "$REPO_CANDIDATES"
+
+echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")"
+
+echo "[7/8] Packing seed bundle..."
+tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo
+ls -lh "$OUTDIR/m2repo-seed.tgz"
+
+echo "[8/8] Summary"
+echo " seed bundle : $OUTDIR/m2repo-seed.tgz"
+echo " artifact URLs : $ARTIFACT_URLS"
+echo " raw missing : $MISSING_URLS"
+echo " real missing : $REAL_MISSING_URLS"
+echo " raw failed : $FAILED_URLS"
+echo " real failed : $REAL_FAILED_URLS"
+echo " ignored failed : $IGNORED_FAILED_URLS"
+echo " retry source URLs : $RETRY_URLS"
+echo " repository hints : $REPO_HINTS"
+echo " POM repo candidates : $REPO_CANDIDATES"
\ No newline at end of file
diff --git a/gukyuin/label-send/offline_upload_to_nexus.sh b/gukyuin/label-send/offline_upload_to_nexus.sh
new file mode 100644
index 0000000..36c1629
--- /dev/null
+++ b/gukyuin/label-send/offline_upload_to_nexus.sh
@@ -0,0 +1,98 @@
+#!/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"
diff --git a/gukyuin/label-send/settings.gradle b/gukyuin/label-send/settings.gradle
index a7e87a5..78822b1 100644
--- a/gukyuin/label-send/settings.gradle
+++ b/gukyuin/label-send/settings.gradle
@@ -1,6 +1,17 @@
pluginManagement {
- plugins {
- id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// plugins {
+// id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// }
+
+ repositories {
+ maven {
+ url = uri(
+ System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+ )
+ allowInsecureProtocol = true
+ }
}
}
rootProject.name = 'kamco-label-send-job'
diff --git a/gukyuin/status-update/.gradle/8.14/checksums/checksums.lock b/gukyuin/status-update/.gradle/8.14/checksums/checksums.lock
index f939e90..0c7ef78 100644
Binary files a/gukyuin/status-update/.gradle/8.14/checksums/checksums.lock and b/gukyuin/status-update/.gradle/8.14/checksums/checksums.lock differ
diff --git a/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.bin
index 25259f0..2093231 100644
Binary files a/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.bin and b/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.bin differ
diff --git a/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.lock
index ec42d57..dbac478 100644
Binary files a/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.lock and b/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.lock differ
diff --git a/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.bin
index 1b5b6ba..d1b5ec7 100644
Binary files a/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.bin and b/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.bin differ
diff --git a/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.lock
index 573640e..1e5ce6d 100644
Binary files a/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.lock and b/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.lock differ
diff --git a/gukyuin/status-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/status-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index a90951f..a504c3c 100644
Binary files a/gukyuin/status-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/gukyuin/status-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/gukyuin/status-update/.gradle/file-system.probe b/gukyuin/status-update/.gradle/file-system.probe
index 821a02f..3e830b6 100644
Binary files a/gukyuin/status-update/.gradle/file-system.probe and b/gukyuin/status-update/.gradle/file-system.probe differ
diff --git a/gukyuin/status-update/build.gradle b/gukyuin/status-update/build.gradle
index b0f630e..755469d 100644
--- a/gukyuin/status-update/build.gradle
+++ b/gukyuin/status-update/build.gradle
@@ -29,11 +29,22 @@ configurations {
}
}
+def repoUrl = System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+
repositories {
- mavenCentral()
- maven { url "https://repo.osgeo.org/repository/release/" }
+ maven {
+ url = uri(repoUrl)
+ allowInsecureProtocol = true
+ }
}
+//repositories {
+// mavenCentral()
+// maven { url "https://repo.osgeo.org/repository/release/" }
+//}
+
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
diff --git a/gukyuin/status-update/build/libs/status-update.jar b/gukyuin/status-update/build/libs/status-update.jar
index d5ecf88..8a1e84e 100644
Binary files a/gukyuin/status-update/build/libs/status-update.jar and b/gukyuin/status-update/build/libs/status-update.jar differ
diff --git a/gukyuin/status-update/build/reports/problems/problems-report.html b/gukyuin/status-update/build/reports/problems/problems-report.html
index 5995716..7ca8b1b 100644
--- a/gukyuin/status-update/build/reports/problems/problems-report.html
+++ b/gukyuin/status-update/build/reports/problems/problems-report.html
@@ -650,7 +650,7 @@ code + .copy-button {
diff --git a/gukyuin/status-update/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/status-update/build/tmp/compileJava/previous-compilation-data.bin
index 3934d83..039850f 100644
Binary files a/gukyuin/status-update/build/tmp/compileJava/previous-compilation-data.bin and b/gukyuin/status-update/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/gukyuin/status-update/build/tmp/spotless-register-dependencies b/gukyuin/status-update/build/tmp/spotless-register-dependencies
deleted file mode 100644
index 56a6051..0000000
--- a/gukyuin/status-update/build/tmp/spotless-register-dependencies
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/gukyuin/status-update/gradle/wrapper/gradle-wrapper.properties b/gukyuin/status-update/gradle/wrapper/gradle-wrapper.properties
index ca025c8..ce3d66d 100644
--- a/gukyuin/status-update/gradle/wrapper/gradle-wrapper.properties
+++ b/gukyuin/status-update/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
+#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
+distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gukyuin/status-update/offline_upload_to_nexus.sh b/gukyuin/status-update/offline_upload_to_nexus.sh
new file mode 100644
index 0000000..36c1629
--- /dev/null
+++ b/gukyuin/status-update/offline_upload_to_nexus.sh
@@ -0,0 +1,98 @@
+#!/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"
diff --git a/gukyuin/status-update/settings.gradle b/gukyuin/status-update/settings.gradle
index 52a2704..b4325b9 100644
--- a/gukyuin/status-update/settings.gradle
+++ b/gukyuin/status-update/settings.gradle
@@ -1,6 +1,17 @@
pluginManagement {
- plugins {
- id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// plugins {
+// id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// }
+
+ repositories {
+ maven {
+ url = uri(
+ System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+ )
+ allowInsecureProtocol = true
+ }
}
}
rootProject.name = 'kamco-status-update-job'
diff --git a/gukyuin/stblt-check/.gradle/8.14/checksums/checksums.lock b/gukyuin/stblt-check/.gradle/8.14/checksums/checksums.lock
index f939e90..abdbe6e 100644
Binary files a/gukyuin/stblt-check/.gradle/8.14/checksums/checksums.lock and b/gukyuin/stblt-check/.gradle/8.14/checksums/checksums.lock differ
diff --git a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin
index 9acc31f..2fc6d95 100644
Binary files a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin and b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin differ
diff --git a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock
index 9465e6c..6f947ab 100644
Binary files a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock and b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock differ
diff --git a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin
index 9d9548e..bf8d5a7 100644
Binary files a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin and b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin differ
diff --git a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock
index eaed0c6..5434746 100644
Binary files a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock and b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock differ
diff --git a/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 23a3a85..1dcd578 100644
Binary files a/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/gukyuin/stblt-check/.gradle/file-system.probe b/gukyuin/stblt-check/.gradle/file-system.probe
index a8df0b5..3a70efc 100644
Binary files a/gukyuin/stblt-check/.gradle/file-system.probe and b/gukyuin/stblt-check/.gradle/file-system.probe differ
diff --git a/gukyuin/stblt-check/build.gradle b/gukyuin/stblt-check/build.gradle
index 81f8ada..e332c62 100644
--- a/gukyuin/stblt-check/build.gradle
+++ b/gukyuin/stblt-check/build.gradle
@@ -29,9 +29,20 @@ configurations {
}
}
+//repositories {
+// mavenCentral()
+// maven { url "https://repo.osgeo.org/repository/release/" }
+//}
+
+def repoUrl = System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+
repositories {
- mavenCentral()
- maven { url "https://repo.osgeo.org/repository/release/" }
+ maven {
+ url = uri(repoUrl)
+ allowInsecureProtocol = true
+ }
}
dependencies {
diff --git a/gukyuin/stblt-check/build/libs/stblt-check.jar b/gukyuin/stblt-check/build/libs/stblt-check.jar
index 1e0a582..5b50126 100644
Binary files a/gukyuin/stblt-check/build/libs/stblt-check.jar and b/gukyuin/stblt-check/build/libs/stblt-check.jar differ
diff --git a/gukyuin/stblt-check/build/reports/problems/problems-report.html b/gukyuin/stblt-check/build/reports/problems/problems-report.html
index 385c9a4..79090fa 100644
--- a/gukyuin/stblt-check/build/reports/problems/problems-report.html
+++ b/gukyuin/stblt-check/build/reports/problems/problems-report.html
@@ -650,7 +650,7 @@ code + .copy-button {
diff --git a/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin
index eff0b63..cedf6a3 100644
Binary files a/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin and b/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/gukyuin/stblt-check/build/tmp/spotless-register-dependencies b/gukyuin/stblt-check/build/tmp/spotless-register-dependencies
deleted file mode 100644
index 56a6051..0000000
--- a/gukyuin/stblt-check/build/tmp/spotless-register-dependencies
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/gukyuin/stblt-check/gradle/wrapper/gradle-wrapper.properties b/gukyuin/stblt-check/gradle/wrapper/gradle-wrapper.properties
index ca025c8..ce3d66d 100644
--- a/gukyuin/stblt-check/gradle/wrapper/gradle-wrapper.properties
+++ b/gukyuin/stblt-check/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
+#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
+distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gukyuin/stblt-check/make_seed_bundle_succ.sh b/gukyuin/stblt-check/make_seed_bundle_succ.sh
new file mode 100644
index 0000000..024878f
--- /dev/null
+++ b/gukyuin/stblt-check/make_seed_bundle_succ.sh
@@ -0,0 +1,293 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+OUTDIR="${OUTDIR:-offline-seed}"
+M2OUT="$OUTDIR/m2repo"
+LOGDIR="$OUTDIR/logs"
+
+ARTIFACT_URLS="$OUTDIR/artifact-urls.txt"
+FAILED_URLS="$OUTDIR/failed-urls.txt"
+REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt"
+IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt"
+MISSING_URLS="$OUTDIR/missing-from-nexus.txt"
+REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt"
+RETRY_URLS="$OUTDIR/retry-source-urls.txt"
+REPO_CANDIDATES="$OUTDIR/repository-candidates.txt"
+REPO_HINTS="$OUTDIR/repository-hints.txt"
+
+mkdir -p "$M2OUT" "$LOGDIR"
+: > "$FAILED_URLS"
+: > "$REAL_FAILED_URLS"
+: > "$IGNORED_FAILED_URLS"
+: > "$MISSING_URLS"
+: > "$REAL_MISSING_URLS"
+: > "$RETRY_URLS"
+: > "$REPO_CANDIDATES"
+: > "$REPO_HINTS"
+
+GRADLE_CMD=(./gradlew --no-daemon)
+
+SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}"
+DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}"
+SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}"
+QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}"
+
+MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}"
+GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}"
+OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}"
+
+echo "[1/8] Running Gradle to trigger resolves..."
+"${GRADLE_CMD[@]}" \
+ clean compileJava testClasses spotlessCheck build \
+ -x test \
+ --refresh-dependencies \
+ --debug \
+ 2>&1 | tee "$LOGDIR/gradle-debug.log" || true
+
+echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..."
+grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \
+ | sed -E 's/\?.*$//' \
+ | sort -u \
+ > "$ARTIFACT_URLS"
+
+echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")"
+
+echo "[3/8] Appending known required artifacts..."
+cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp"
+mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS"
+echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")"
+
+to_relative_path() {
+ local url="$1"
+
+ if [[ "$url" == *"/maven2/"* ]]; then
+ printf '%s\n' "${url#*/maven2/}"
+ return 0
+ fi
+
+ if [[ "$url" == *"/m2/"* ]]; then
+ printf '%s\n' "${url#*/m2/}"
+ return 0
+ fi
+
+ if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then
+ printf '%s\n' "${BASH_REMATCH[1]}"
+ return 0
+ fi
+
+ return 1
+}
+
+is_ignorable_url() {
+ local url="$1"
+
+ case "$url" in
+ */org.springframework.boot.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */org.springframework.boot.gradle.plugin-*.module)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-apt/*/querydsl-apt-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+map_upstream_url() {
+ local url="$1"
+ local rel
+
+ if ! rel="$(to_relative_path "$url")"; then
+ return 1
+ fi
+
+ case "$rel" in
+ org/geotools/*|it/geosolutions/*|javax/media/*)
+ printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel"
+ ;;
+ io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ com/diffplug/spotless/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ *)
+ printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel"
+ ;;
+ esac
+}
+
+echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..."
+grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \
+ | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \
+ | sort -u \
+ > "$MISSING_URLS" || true
+
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ continue
+ fi
+ printf '%s\n' "$url" >> "$REAL_MISSING_URLS"
+ mapped="$(map_upstream_url "$url" || true)"
+ if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then
+ printf '%s\n' "$mapped" >> "$RETRY_URLS"
+ printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS"
+ fi
+done < "$MISSING_URLS"
+
+sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+sort -u "$RETRY_URLS" -o "$RETRY_URLS"
+sort -u "$REPO_HINTS" -o "$REPO_HINTS"
+
+cat "$RETRY_URLS" >> "$ARTIFACT_URLS"
+sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS"
+
+echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")"
+echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")"
+echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")"
+
+download_one() {
+ local url="$1"
+ local rel
+
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ return 0
+ fi
+
+ if ! rel="$(to_relative_path "$url")"; then
+ echo " - [SKIP] unknown URL form: $url"
+ return 0
+ fi
+
+ local dest="$M2OUT/$rel"
+ mkdir -p "$(dirname "$dest")"
+
+ if [[ -f "$dest" ]]; then
+ return 0
+ fi
+
+ echo " - [GET] $rel"
+ if ! curl -fSL "$url" -o "$dest"; then
+ echo "$url" >> "$FAILED_URLS"
+ rm -f "$dest" 2>/dev/null || true
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ else
+ printf '%s\n' "$url" >> "$REAL_FAILED_URLS"
+ echo " !! failed: $url"
+ fi
+ fi
+}
+
+export -f to_relative_path
+export -f is_ignorable_url
+export -f download_one
+export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS
+
+echo "[5/8] Downloading artifacts into m2 layout..."
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ download_one "$url"
+done < "$ARTIFACT_URLS"
+
+sort -u "$FAILED_URLS" -o "$FAILED_URLS"
+sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+
+echo "[6/8] Extracting repository candidates declared inside downloaded POMs..."
+while IFS= read -r -d '' pom; do
+ awk -v pom="$pom" '
+ // { in_repo=1; id=""; url=""; next }
+ /<\/repository>/ {
+ if (in_repo && url != "" && url !~ /^file:/) {
+ print url "\t" pom "\t" id
+ }
+ in_repo=0
+ id=""
+ url=""
+ next
+ }
+ in_repo {
+ if (match($0, /([^<]+)<\/id>/, m)) {
+ id=m[1]
+ }
+ if (match($0, /([^<]+)<\/url>/, m)) {
+ url=m[1]
+ }
+ }
+ ' "$pom"
+done < <(find "$M2OUT" -type f -name '*.pom' -print0) \
+ | sort -u \
+ > "$REPO_CANDIDATES"
+
+echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")"
+
+echo "[7/8] Packing seed bundle..."
+tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo
+ls -lh "$OUTDIR/m2repo-seed.tgz"
+
+echo "[8/8] Summary"
+echo " seed bundle : $OUTDIR/m2repo-seed.tgz"
+echo " artifact URLs : $ARTIFACT_URLS"
+echo " raw missing : $MISSING_URLS"
+echo " real missing : $REAL_MISSING_URLS"
+echo " raw failed : $FAILED_URLS"
+echo " real failed : $REAL_FAILED_URLS"
+echo " ignored failed : $IGNORED_FAILED_URLS"
+echo " retry source URLs : $RETRY_URLS"
+echo " repository hints : $REPO_HINTS"
+echo " POM repo candidates : $REPO_CANDIDATES"
\ No newline at end of file
diff --git a/gukyuin/stblt-check/offline_upload_to_nexus.sh b/gukyuin/stblt-check/offline_upload_to_nexus.sh
new file mode 100644
index 0000000..36c1629
--- /dev/null
+++ b/gukyuin/stblt-check/offline_upload_to_nexus.sh
@@ -0,0 +1,98 @@
+#!/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"
diff --git a/gukyuin/stblt-check/settings.gradle b/gukyuin/stblt-check/settings.gradle
index c9e42b8..6745a98 100644
--- a/gukyuin/stblt-check/settings.gradle
+++ b/gukyuin/stblt-check/settings.gradle
@@ -1,6 +1,16 @@
pluginManagement {
- plugins {
- id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// plugins {
+// id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// }
+ repositories {
+ maven {
+ url = uri(
+ System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+ )
+ allowInsecureProtocol = true
+ }
}
}
rootProject.name = 'kamco-stblt-check-job'
diff --git a/imagery-make-dataset/.gradle/8.14/checksums/checksums.lock b/imagery-make-dataset/.gradle/8.14/checksums/checksums.lock
index 16d7565..750933f 100644
Binary files a/imagery-make-dataset/.gradle/8.14/checksums/checksums.lock and b/imagery-make-dataset/.gradle/8.14/checksums/checksums.lock differ
diff --git a/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.bin b/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.bin
index 4a8f967..c2f4969 100644
Binary files a/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.bin and b/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.bin differ
diff --git a/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.lock b/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.lock
index eee7929..0cd3a78 100644
Binary files a/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.lock and b/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.lock differ
diff --git a/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.bin b/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.bin
index 41fa9d9..c4df6f1 100644
Binary files a/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.bin and b/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.bin differ
diff --git a/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.lock b/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.lock
index a933aca..a54fc38 100644
Binary files a/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.lock and b/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.lock differ
diff --git a/imagery-make-dataset/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/imagery-make-dataset/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index fba4e95..1169aba 100644
Binary files a/imagery-make-dataset/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/imagery-make-dataset/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/imagery-make-dataset/.gradle/file-system.probe b/imagery-make-dataset/.gradle/file-system.probe
index 8632153..95c758d 100644
Binary files a/imagery-make-dataset/.gradle/file-system.probe and b/imagery-make-dataset/.gradle/file-system.probe differ
diff --git a/imagery-make-dataset/build.gradle b/imagery-make-dataset/build.gradle
index 2d1088f..749a371 100755
--- a/imagery-make-dataset/build.gradle
+++ b/imagery-make-dataset/build.gradle
@@ -29,9 +29,20 @@ configurations {
}
}
+//repositories {
+// mavenCentral()
+// maven { url "https://repo.osgeo.org/repository/release/" }
+//}
+
+def repoUrl = System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+
repositories {
- mavenCentral()
- maven { url "https://repo.osgeo.org/repository/release/" }
+ maven {
+ url = uri(repoUrl)
+ allowInsecureProtocol = true
+ }
}
dependencies {
diff --git a/imagery-make-dataset/build/libs/imagery-make-dataset.jar b/imagery-make-dataset/build/libs/imagery-make-dataset.jar
index 37207e7..057a52d 100644
Binary files a/imagery-make-dataset/build/libs/imagery-make-dataset.jar and b/imagery-make-dataset/build/libs/imagery-make-dataset.jar differ
diff --git a/imagery-make-dataset/build/reports/problems/problems-report.html b/imagery-make-dataset/build/reports/problems/problems-report.html
index 0428dc4..f0cb466 100644
--- a/imagery-make-dataset/build/reports/problems/problems-report.html
+++ b/imagery-make-dataset/build/reports/problems/problems-report.html
@@ -650,7 +650,7 @@ code + .copy-button {
diff --git a/imagery-make-dataset/build/tmp/compileJava/previous-compilation-data.bin b/imagery-make-dataset/build/tmp/compileJava/previous-compilation-data.bin
index a778f58..4b40727 100644
Binary files a/imagery-make-dataset/build/tmp/compileJava/previous-compilation-data.bin and b/imagery-make-dataset/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/imagery-make-dataset/build/tmp/spotless-register-dependencies b/imagery-make-dataset/build/tmp/spotless-register-dependencies
deleted file mode 100644
index 56a6051..0000000
--- a/imagery-make-dataset/build/tmp/spotless-register-dependencies
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/imagery-make-dataset/gradle/wrapper/gradle-wrapper.properties b/imagery-make-dataset/gradle/wrapper/gradle-wrapper.properties
index ca025c8..ce3d66d 100755
--- a/imagery-make-dataset/gradle/wrapper/gradle-wrapper.properties
+++ b/imagery-make-dataset/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
+#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
+distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/imagery-make-dataset/make_seed_bundle_succ.sh b/imagery-make-dataset/make_seed_bundle_succ.sh
new file mode 100644
index 0000000..024878f
--- /dev/null
+++ b/imagery-make-dataset/make_seed_bundle_succ.sh
@@ -0,0 +1,293 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+OUTDIR="${OUTDIR:-offline-seed}"
+M2OUT="$OUTDIR/m2repo"
+LOGDIR="$OUTDIR/logs"
+
+ARTIFACT_URLS="$OUTDIR/artifact-urls.txt"
+FAILED_URLS="$OUTDIR/failed-urls.txt"
+REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt"
+IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt"
+MISSING_URLS="$OUTDIR/missing-from-nexus.txt"
+REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt"
+RETRY_URLS="$OUTDIR/retry-source-urls.txt"
+REPO_CANDIDATES="$OUTDIR/repository-candidates.txt"
+REPO_HINTS="$OUTDIR/repository-hints.txt"
+
+mkdir -p "$M2OUT" "$LOGDIR"
+: > "$FAILED_URLS"
+: > "$REAL_FAILED_URLS"
+: > "$IGNORED_FAILED_URLS"
+: > "$MISSING_URLS"
+: > "$REAL_MISSING_URLS"
+: > "$RETRY_URLS"
+: > "$REPO_CANDIDATES"
+: > "$REPO_HINTS"
+
+GRADLE_CMD=(./gradlew --no-daemon)
+
+SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}"
+DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}"
+SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}"
+QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}"
+
+MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}"
+GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}"
+OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}"
+
+echo "[1/8] Running Gradle to trigger resolves..."
+"${GRADLE_CMD[@]}" \
+ clean compileJava testClasses spotlessCheck build \
+ -x test \
+ --refresh-dependencies \
+ --debug \
+ 2>&1 | tee "$LOGDIR/gradle-debug.log" || true
+
+echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..."
+grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \
+ | sed -E 's/\?.*$//' \
+ | sort -u \
+ > "$ARTIFACT_URLS"
+
+echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")"
+
+echo "[3/8] Appending known required artifacts..."
+cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp"
+mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS"
+echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")"
+
+to_relative_path() {
+ local url="$1"
+
+ if [[ "$url" == *"/maven2/"* ]]; then
+ printf '%s\n' "${url#*/maven2/}"
+ return 0
+ fi
+
+ if [[ "$url" == *"/m2/"* ]]; then
+ printf '%s\n' "${url#*/m2/}"
+ return 0
+ fi
+
+ if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then
+ printf '%s\n' "${BASH_REMATCH[1]}"
+ return 0
+ fi
+
+ return 1
+}
+
+is_ignorable_url() {
+ local url="$1"
+
+ case "$url" in
+ */org.springframework.boot.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */org.springframework.boot.gradle.plugin-*.module)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-apt/*/querydsl-apt-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+map_upstream_url() {
+ local url="$1"
+ local rel
+
+ if ! rel="$(to_relative_path "$url")"; then
+ return 1
+ fi
+
+ case "$rel" in
+ org/geotools/*|it/geosolutions/*|javax/media/*)
+ printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel"
+ ;;
+ io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ com/diffplug/spotless/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ *)
+ printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel"
+ ;;
+ esac
+}
+
+echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..."
+grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \
+ | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \
+ | sort -u \
+ > "$MISSING_URLS" || true
+
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ continue
+ fi
+ printf '%s\n' "$url" >> "$REAL_MISSING_URLS"
+ mapped="$(map_upstream_url "$url" || true)"
+ if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then
+ printf '%s\n' "$mapped" >> "$RETRY_URLS"
+ printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS"
+ fi
+done < "$MISSING_URLS"
+
+sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+sort -u "$RETRY_URLS" -o "$RETRY_URLS"
+sort -u "$REPO_HINTS" -o "$REPO_HINTS"
+
+cat "$RETRY_URLS" >> "$ARTIFACT_URLS"
+sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS"
+
+echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")"
+echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")"
+echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")"
+
+download_one() {
+ local url="$1"
+ local rel
+
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ return 0
+ fi
+
+ if ! rel="$(to_relative_path "$url")"; then
+ echo " - [SKIP] unknown URL form: $url"
+ return 0
+ fi
+
+ local dest="$M2OUT/$rel"
+ mkdir -p "$(dirname "$dest")"
+
+ if [[ -f "$dest" ]]; then
+ return 0
+ fi
+
+ echo " - [GET] $rel"
+ if ! curl -fSL "$url" -o "$dest"; then
+ echo "$url" >> "$FAILED_URLS"
+ rm -f "$dest" 2>/dev/null || true
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ else
+ printf '%s\n' "$url" >> "$REAL_FAILED_URLS"
+ echo " !! failed: $url"
+ fi
+ fi
+}
+
+export -f to_relative_path
+export -f is_ignorable_url
+export -f download_one
+export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS
+
+echo "[5/8] Downloading artifacts into m2 layout..."
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ download_one "$url"
+done < "$ARTIFACT_URLS"
+
+sort -u "$FAILED_URLS" -o "$FAILED_URLS"
+sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+
+echo "[6/8] Extracting repository candidates declared inside downloaded POMs..."
+while IFS= read -r -d '' pom; do
+ awk -v pom="$pom" '
+ // { in_repo=1; id=""; url=""; next }
+ /<\/repository>/ {
+ if (in_repo && url != "" && url !~ /^file:/) {
+ print url "\t" pom "\t" id
+ }
+ in_repo=0
+ id=""
+ url=""
+ next
+ }
+ in_repo {
+ if (match($0, /([^<]+)<\/id>/, m)) {
+ id=m[1]
+ }
+ if (match($0, /([^<]+)<\/url>/, m)) {
+ url=m[1]
+ }
+ }
+ ' "$pom"
+done < <(find "$M2OUT" -type f -name '*.pom' -print0) \
+ | sort -u \
+ > "$REPO_CANDIDATES"
+
+echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")"
+
+echo "[7/8] Packing seed bundle..."
+tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo
+ls -lh "$OUTDIR/m2repo-seed.tgz"
+
+echo "[8/8] Summary"
+echo " seed bundle : $OUTDIR/m2repo-seed.tgz"
+echo " artifact URLs : $ARTIFACT_URLS"
+echo " raw missing : $MISSING_URLS"
+echo " real missing : $REAL_MISSING_URLS"
+echo " raw failed : $FAILED_URLS"
+echo " real failed : $REAL_FAILED_URLS"
+echo " ignored failed : $IGNORED_FAILED_URLS"
+echo " retry source URLs : $RETRY_URLS"
+echo " repository hints : $REPO_HINTS"
+echo " POM repo candidates : $REPO_CANDIDATES"
\ No newline at end of file
diff --git a/imagery-make-dataset/offline_upload_to_nexus.sh b/imagery-make-dataset/offline_upload_to_nexus.sh
new file mode 100644
index 0000000..36c1629
--- /dev/null
+++ b/imagery-make-dataset/offline_upload_to_nexus.sh
@@ -0,0 +1,98 @@
+#!/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"
diff --git a/imagery-make-dataset/settings.gradle b/imagery-make-dataset/settings.gradle
index e7deda1..609ef58 100755
--- a/imagery-make-dataset/settings.gradle
+++ b/imagery-make-dataset/settings.gradle
@@ -1,6 +1,16 @@
pluginManagement {
- plugins {
- id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// plugins {
+// id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// }
+ repositories {
+ maven {
+ url = uri(
+ System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+ )
+ allowInsecureProtocol = true
+ }
}
}
rootProject.name = 'kamco-map-sheet-image-job'
diff --git a/kamco-make-dataset-generation/build.gradle b/kamco-make-dataset-generation/build.gradle
index 7947e95..26f0639 100644
--- a/kamco-make-dataset-generation/build.gradle
+++ b/kamco-make-dataset-generation/build.gradle
@@ -19,8 +19,19 @@ configurations {
}
}
+//repositories {
+// mavenCentral()
+//}
+
+def repoUrl = System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+
repositories {
- mavenCentral()
+ maven {
+ url = uri(repoUrl)
+ allowInsecureProtocol = true
+ }
}
dependencies {
diff --git a/kamco-make-dataset-generation/gradle/wrapper/gradle-wrapper.properties b/kamco-make-dataset-generation/gradle/wrapper/gradle-wrapper.properties
index d4081da..078b65d 100644
--- a/kamco-make-dataset-generation/gradle/wrapper/gradle-wrapper.properties
+++ b/kamco-make-dataset-generation/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/kamco-make-dataset-generation/make_seed_bundle_succ_generation.sh b/kamco-make-dataset-generation/make_seed_bundle_succ_generation.sh
new file mode 100644
index 0000000..41471b8
--- /dev/null
+++ b/kamco-make-dataset-generation/make_seed_bundle_succ_generation.sh
@@ -0,0 +1,293 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+OUTDIR="${OUTDIR:-offline-seed}"
+M2OUT="$OUTDIR/m2repo"
+LOGDIR="$OUTDIR/logs"
+
+ARTIFACT_URLS="$OUTDIR/artifact-urls.txt"
+FAILED_URLS="$OUTDIR/failed-urls.txt"
+REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt"
+IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt"
+MISSING_URLS="$OUTDIR/missing-from-nexus.txt"
+REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt"
+RETRY_URLS="$OUTDIR/retry-source-urls.txt"
+REPO_CANDIDATES="$OUTDIR/repository-candidates.txt"
+REPO_HINTS="$OUTDIR/repository-hints.txt"
+
+mkdir -p "$M2OUT" "$LOGDIR"
+: > "$FAILED_URLS"
+: > "$REAL_FAILED_URLS"
+: > "$IGNORED_FAILED_URLS"
+: > "$MISSING_URLS"
+: > "$REAL_MISSING_URLS"
+: > "$RETRY_URLS"
+: > "$REPO_CANDIDATES"
+: > "$REPO_HINTS"
+
+GRADLE_CMD=(./gradlew --no-daemon)
+
+SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}"
+DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}"
+SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}"
+QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}"
+
+MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}"
+GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}"
+OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}"
+
+echo "[1/8] Running Gradle to trigger resolves..."
+"${GRADLE_CMD[@]}" \
+ clean compileJava testClasses build \
+ -x test \
+ --refresh-dependencies \
+ --debug \
+ 2>&1 | tee "$LOGDIR/gradle-debug.log" || true
+
+echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..."
+grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \
+ | sed -E 's/\?.*$//' \
+ | sort -u \
+ > "$ARTIFACT_URLS"
+
+echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")"
+
+echo "[3/8] Appending known required artifacts..."
+cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp"
+mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS"
+echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")"
+
+to_relative_path() {
+ local url="$1"
+
+ if [[ "$url" == *"/maven2/"* ]]; then
+ printf '%s\n' "${url#*/maven2/}"
+ return 0
+ fi
+
+ if [[ "$url" == *"/m2/"* ]]; then
+ printf '%s\n' "${url#*/m2/}"
+ return 0
+ fi
+
+ if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then
+ printf '%s\n' "${BASH_REMATCH[1]}"
+ return 0
+ fi
+
+ return 1
+}
+
+is_ignorable_url() {
+ local url="$1"
+
+ case "$url" in
+ */org.springframework.boot.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */org.springframework.boot.gradle.plugin-*.module)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-apt/*/querydsl-apt-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+map_upstream_url() {
+ local url="$1"
+ local rel
+
+ if ! rel="$(to_relative_path "$url")"; then
+ return 1
+ fi
+
+ case "$rel" in
+ org/geotools/*|it/geosolutions/*|javax/media/*)
+ printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel"
+ ;;
+ io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ com/diffplug/spotless/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ *)
+ printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel"
+ ;;
+ esac
+}
+
+echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..."
+grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \
+ | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \
+ | sort -u \
+ > "$MISSING_URLS" || true
+
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ continue
+ fi
+ printf '%s\n' "$url" >> "$REAL_MISSING_URLS"
+ mapped="$(map_upstream_url "$url" || true)"
+ if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then
+ printf '%s\n' "$mapped" >> "$RETRY_URLS"
+ printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS"
+ fi
+done < "$MISSING_URLS"
+
+sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+sort -u "$RETRY_URLS" -o "$RETRY_URLS"
+sort -u "$REPO_HINTS" -o "$REPO_HINTS"
+
+cat "$RETRY_URLS" >> "$ARTIFACT_URLS"
+sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS"
+
+echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")"
+echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")"
+echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")"
+
+download_one() {
+ local url="$1"
+ local rel
+
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ return 0
+ fi
+
+ if ! rel="$(to_relative_path "$url")"; then
+ echo " - [SKIP] unknown URL form: $url"
+ return 0
+ fi
+
+ local dest="$M2OUT/$rel"
+ mkdir -p "$(dirname "$dest")"
+
+ if [[ -f "$dest" ]]; then
+ return 0
+ fi
+
+ echo " - [GET] $rel"
+ if ! curl -fSL "$url" -o "$dest"; then
+ echo "$url" >> "$FAILED_URLS"
+ rm -f "$dest" 2>/dev/null || true
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ else
+ printf '%s\n' "$url" >> "$REAL_FAILED_URLS"
+ echo " !! failed: $url"
+ fi
+ fi
+}
+
+export -f to_relative_path
+export -f is_ignorable_url
+export -f download_one
+export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS
+
+echo "[5/8] Downloading artifacts into m2 layout..."
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ download_one "$url"
+done < "$ARTIFACT_URLS"
+
+sort -u "$FAILED_URLS" -o "$FAILED_URLS"
+sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+
+echo "[6/8] Extracting repository candidates declared inside downloaded POMs..."
+while IFS= read -r -d '' pom; do
+ awk -v pom="$pom" '
+ // { in_repo=1; id=""; url=""; next }
+ /<\/repository>/ {
+ if (in_repo && url != "" && url !~ /^file:/) {
+ print url "\t" pom "\t" id
+ }
+ in_repo=0
+ id=""
+ url=""
+ next
+ }
+ in_repo {
+ if (match($0, /([^<]+)<\/id>/, m)) {
+ id=m[1]
+ }
+ if (match($0, /([^<]+)<\/url>/, m)) {
+ url=m[1]
+ }
+ }
+ ' "$pom"
+done < <(find "$M2OUT" -type f -name '*.pom' -print0) \
+ | sort -u \
+ > "$REPO_CANDIDATES"
+
+echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")"
+
+echo "[7/8] Packing seed bundle..."
+tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo
+ls -lh "$OUTDIR/m2repo-seed.tgz"
+
+echo "[8/8] Summary"
+echo " seed bundle : $OUTDIR/m2repo-seed.tgz"
+echo " artifact URLs : $ARTIFACT_URLS"
+echo " raw missing : $MISSING_URLS"
+echo " real missing : $REAL_MISSING_URLS"
+echo " raw failed : $FAILED_URLS"
+echo " real failed : $REAL_FAILED_URLS"
+echo " ignored failed : $IGNORED_FAILED_URLS"
+echo " retry source URLs : $RETRY_URLS"
+echo " repository hints : $REPO_HINTS"
+echo " POM repo candidates : $REPO_CANDIDATES"
\ No newline at end of file
diff --git a/kamco-make-dataset-generation/offline_upload_to_nexus.sh b/kamco-make-dataset-generation/offline_upload_to_nexus.sh
new file mode 100644
index 0000000..36c1629
--- /dev/null
+++ b/kamco-make-dataset-generation/offline_upload_to_nexus.sh
@@ -0,0 +1,98 @@
+#!/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"
diff --git a/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 8b68d23..a376965 100644
Binary files a/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/label/label-to-review/.gradle/file-system.probe b/label/label-to-review/.gradle/file-system.probe
index e5ffdf6..f909200 100644
Binary files a/label/label-to-review/.gradle/file-system.probe and b/label/label-to-review/.gradle/file-system.probe differ
diff --git a/label/label-to-review/build.gradle b/label/label-to-review/build.gradle
index 9b3310e..1fceddf 100644
--- a/label/label-to-review/build.gradle
+++ b/label/label-to-review/build.gradle
@@ -20,9 +20,20 @@ configurations {
}
}
+//repositories {
+// mavenCentral()
+// maven { url "https://repo.osgeo.org/repository/release/" }
+//}
+
+def repoUrl = System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+
repositories {
- mavenCentral()
- maven { url "https://repo.osgeo.org/repository/release/" }
+ maven {
+ url = uri(repoUrl)
+ allowInsecureProtocol = true
+ }
}
dependencies {
diff --git a/label/label-to-review/build/reports/problems/problems-report.html b/label/label-to-review/build/reports/problems/problems-report.html
index a3486fb..8452b3c 100644
--- a/label/label-to-review/build/reports/problems/problems-report.html
+++ b/label/label-to-review/build/reports/problems/problems-report.html
@@ -650,7 +650,7 @@ code + .copy-button {
diff --git a/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin b/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin
index 197cc62..0c6a899 100644
Binary files a/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin and b/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/label/label-to-review/build/tmp/spotless-register-dependencies b/label/label-to-review/build/tmp/spotless-register-dependencies
deleted file mode 100644
index 56a6051..0000000
--- a/label/label-to-review/build/tmp/spotless-register-dependencies
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/label/label-to-review/gradle/wrapper/gradle-wrapper.properties b/label/label-to-review/gradle/wrapper/gradle-wrapper.properties
index d4081da..078b65d 100644
--- a/label/label-to-review/gradle/wrapper/gradle-wrapper.properties
+++ b/label/label-to-review/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/label/label-to-review/make_seed_bundle_succ.sh b/label/label-to-review/make_seed_bundle_succ.sh
new file mode 100644
index 0000000..024878f
--- /dev/null
+++ b/label/label-to-review/make_seed_bundle_succ.sh
@@ -0,0 +1,293 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+OUTDIR="${OUTDIR:-offline-seed}"
+M2OUT="$OUTDIR/m2repo"
+LOGDIR="$OUTDIR/logs"
+
+ARTIFACT_URLS="$OUTDIR/artifact-urls.txt"
+FAILED_URLS="$OUTDIR/failed-urls.txt"
+REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt"
+IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt"
+MISSING_URLS="$OUTDIR/missing-from-nexus.txt"
+REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt"
+RETRY_URLS="$OUTDIR/retry-source-urls.txt"
+REPO_CANDIDATES="$OUTDIR/repository-candidates.txt"
+REPO_HINTS="$OUTDIR/repository-hints.txt"
+
+mkdir -p "$M2OUT" "$LOGDIR"
+: > "$FAILED_URLS"
+: > "$REAL_FAILED_URLS"
+: > "$IGNORED_FAILED_URLS"
+: > "$MISSING_URLS"
+: > "$REAL_MISSING_URLS"
+: > "$RETRY_URLS"
+: > "$REPO_CANDIDATES"
+: > "$REPO_HINTS"
+
+GRADLE_CMD=(./gradlew --no-daemon)
+
+SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}"
+DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}"
+SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}"
+QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}"
+
+MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}"
+GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}"
+OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}"
+
+echo "[1/8] Running Gradle to trigger resolves..."
+"${GRADLE_CMD[@]}" \
+ clean compileJava testClasses spotlessCheck build \
+ -x test \
+ --refresh-dependencies \
+ --debug \
+ 2>&1 | tee "$LOGDIR/gradle-debug.log" || true
+
+echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..."
+grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \
+ | sed -E 's/\?.*$//' \
+ | sort -u \
+ > "$ARTIFACT_URLS"
+
+echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")"
+
+echo "[3/8] Appending known required artifacts..."
+cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp"
+mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS"
+echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")"
+
+to_relative_path() {
+ local url="$1"
+
+ if [[ "$url" == *"/maven2/"* ]]; then
+ printf '%s\n' "${url#*/maven2/}"
+ return 0
+ fi
+
+ if [[ "$url" == *"/m2/"* ]]; then
+ printf '%s\n' "${url#*/m2/}"
+ return 0
+ fi
+
+ if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then
+ printf '%s\n' "${BASH_REMATCH[1]}"
+ return 0
+ fi
+
+ return 1
+}
+
+is_ignorable_url() {
+ local url="$1"
+
+ case "$url" in
+ */org.springframework.boot.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */org.springframework.boot.gradle.plugin-*.module)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-apt/*/querydsl-apt-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+map_upstream_url() {
+ local url="$1"
+ local rel
+
+ if ! rel="$(to_relative_path "$url")"; then
+ return 1
+ fi
+
+ case "$rel" in
+ org/geotools/*|it/geosolutions/*|javax/media/*)
+ printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel"
+ ;;
+ io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ com/diffplug/spotless/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ *)
+ printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel"
+ ;;
+ esac
+}
+
+echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..."
+grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \
+ | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \
+ | sort -u \
+ > "$MISSING_URLS" || true
+
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ continue
+ fi
+ printf '%s\n' "$url" >> "$REAL_MISSING_URLS"
+ mapped="$(map_upstream_url "$url" || true)"
+ if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then
+ printf '%s\n' "$mapped" >> "$RETRY_URLS"
+ printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS"
+ fi
+done < "$MISSING_URLS"
+
+sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+sort -u "$RETRY_URLS" -o "$RETRY_URLS"
+sort -u "$REPO_HINTS" -o "$REPO_HINTS"
+
+cat "$RETRY_URLS" >> "$ARTIFACT_URLS"
+sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS"
+
+echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")"
+echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")"
+echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")"
+
+download_one() {
+ local url="$1"
+ local rel
+
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ return 0
+ fi
+
+ if ! rel="$(to_relative_path "$url")"; then
+ echo " - [SKIP] unknown URL form: $url"
+ return 0
+ fi
+
+ local dest="$M2OUT/$rel"
+ mkdir -p "$(dirname "$dest")"
+
+ if [[ -f "$dest" ]]; then
+ return 0
+ fi
+
+ echo " - [GET] $rel"
+ if ! curl -fSL "$url" -o "$dest"; then
+ echo "$url" >> "$FAILED_URLS"
+ rm -f "$dest" 2>/dev/null || true
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ else
+ printf '%s\n' "$url" >> "$REAL_FAILED_URLS"
+ echo " !! failed: $url"
+ fi
+ fi
+}
+
+export -f to_relative_path
+export -f is_ignorable_url
+export -f download_one
+export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS
+
+echo "[5/8] Downloading artifacts into m2 layout..."
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ download_one "$url"
+done < "$ARTIFACT_URLS"
+
+sort -u "$FAILED_URLS" -o "$FAILED_URLS"
+sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+
+echo "[6/8] Extracting repository candidates declared inside downloaded POMs..."
+while IFS= read -r -d '' pom; do
+ awk -v pom="$pom" '
+ // { in_repo=1; id=""; url=""; next }
+ /<\/repository>/ {
+ if (in_repo && url != "" && url !~ /^file:/) {
+ print url "\t" pom "\t" id
+ }
+ in_repo=0
+ id=""
+ url=""
+ next
+ }
+ in_repo {
+ if (match($0, /([^<]+)<\/id>/, m)) {
+ id=m[1]
+ }
+ if (match($0, /([^<]+)<\/url>/, m)) {
+ url=m[1]
+ }
+ }
+ ' "$pom"
+done < <(find "$M2OUT" -type f -name '*.pom' -print0) \
+ | sort -u \
+ > "$REPO_CANDIDATES"
+
+echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")"
+
+echo "[7/8] Packing seed bundle..."
+tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo
+ls -lh "$OUTDIR/m2repo-seed.tgz"
+
+echo "[8/8] Summary"
+echo " seed bundle : $OUTDIR/m2repo-seed.tgz"
+echo " artifact URLs : $ARTIFACT_URLS"
+echo " raw missing : $MISSING_URLS"
+echo " real missing : $REAL_MISSING_URLS"
+echo " raw failed : $FAILED_URLS"
+echo " real failed : $REAL_FAILED_URLS"
+echo " ignored failed : $IGNORED_FAILED_URLS"
+echo " retry source URLs : $RETRY_URLS"
+echo " repository hints : $REPO_HINTS"
+echo " POM repo candidates : $REPO_CANDIDATES"
\ No newline at end of file
diff --git a/label/label-to-review/offline_upload_to_nexus.sh b/label/label-to-review/offline_upload_to_nexus.sh
new file mode 100644
index 0000000..36c1629
--- /dev/null
+++ b/label/label-to-review/offline_upload_to_nexus.sh
@@ -0,0 +1,98 @@
+#!/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"
diff --git a/label/label-to-review/settings.gradle b/label/label-to-review/settings.gradle
index c96106d..c394640 100644
--- a/label/label-to-review/settings.gradle
+++ b/label/label-to-review/settings.gradle
@@ -1,6 +1,16 @@
pluginManagement {
- plugins {
- id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// plugins {
+// id 'org.jetbrains.kotlin.jvm' version '2.2.20'
+// }
+ repositories {
+ maven {
+ url = uri(
+ System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+ )
+ allowInsecureProtocol = true
+ }
}
}
rootProject.name = 'kamco-label-to-review'
diff --git a/label/review-to-geojson/.gradle/9.3.1/checksums/checksums.lock b/label/review-to-geojson/.gradle/9.3.1/checksums/checksums.lock
index 3a7a0e8..5ba300b 100644
Binary files a/label/review-to-geojson/.gradle/9.3.1/checksums/checksums.lock and b/label/review-to-geojson/.gradle/9.3.1/checksums/checksums.lock differ
diff --git a/label/review-to-geojson/.gradle/9.3.1/checksums/md5-checksums.bin b/label/review-to-geojson/.gradle/9.3.1/checksums/md5-checksums.bin
index b7b73b2..adbd4b4 100644
Binary files a/label/review-to-geojson/.gradle/9.3.1/checksums/md5-checksums.bin and b/label/review-to-geojson/.gradle/9.3.1/checksums/md5-checksums.bin differ
diff --git a/label/review-to-geojson/.gradle/9.3.1/checksums/sha1-checksums.bin b/label/review-to-geojson/.gradle/9.3.1/checksums/sha1-checksums.bin
index b6ba500..0e52fb5 100644
Binary files a/label/review-to-geojson/.gradle/9.3.1/checksums/sha1-checksums.bin and b/label/review-to-geojson/.gradle/9.3.1/checksums/sha1-checksums.bin differ
diff --git a/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.bin b/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.bin
index 49639f4..73f1293 100644
Binary files a/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.bin and b/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.bin differ
diff --git a/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.lock b/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.lock
index 6cb0965..cd4e690 100644
Binary files a/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.lock and b/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.lock differ
diff --git a/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.bin b/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.bin
index 4258e1b..bb84904 100644
Binary files a/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.bin and b/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.bin differ
diff --git a/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.lock b/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.lock
index f5daf89..1821bc9 100644
Binary files a/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.lock and b/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.lock differ
diff --git a/label/review-to-geojson/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/label/review-to-geojson/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index a843204..2945c6d 100644
Binary files a/label/review-to-geojson/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/label/review-to-geojson/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/label/review-to-geojson/.gradle/file-system.probe b/label/review-to-geojson/.gradle/file-system.probe
index 0cdbc16..205db27 100644
Binary files a/label/review-to-geojson/.gradle/file-system.probe and b/label/review-to-geojson/.gradle/file-system.probe differ
diff --git a/label/review-to-geojson/build/reports/problems/problems-report.html b/label/review-to-geojson/build/reports/problems/problems-report.html
index 0b4fd33..4fa61c6 100644
--- a/label/review-to-geojson/build/reports/problems/problems-report.html
+++ b/label/review-to-geojson/build/reports/problems/problems-report.html
@@ -646,7 +646,7 @@ code + .copy-button {
diff --git a/label/review-to-geojson/build/tmp/compileJava/previous-compilation-data.bin b/label/review-to-geojson/build/tmp/compileJava/previous-compilation-data.bin
index c660272..b37067c 100644
Binary files a/label/review-to-geojson/build/tmp/compileJava/previous-compilation-data.bin and b/label/review-to-geojson/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/label/review-to-geojson/make_seed_bundle.sh b/label/review-to-geojson/make_seed_bundle.sh
new file mode 100644
index 0000000..d7e365b
--- /dev/null
+++ b/label/review-to-geojson/make_seed_bundle.sh
@@ -0,0 +1,100 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# ===== 설정 =====
+OUTDIR="${OUTDIR:-offline-seed}"
+M2OUT="$OUTDIR/m2repo"
+LOGDIR="$OUTDIR/logs"
+mkdir -p "$M2OUT" "$LOGDIR"
+
+# Gradle이 실제로 사용하는 repo (build.gradle과 동일하게 유지)
+# - 네 build.gradle은 mavenCentral + osgeo release 를 사용
+# - seed를 만들 땐 이 repo들이 열려 있어야 함
+GRADLE_CMD=(./gradlew --no-daemon)
+
+# ===== 0) 깨끗하게 시작(선택) =====
+# 너무 오래된 캐시 오염 방지용. 필요 없으면 주석 처리.
+# rm -rf "${GRADLE_USER_HOME:-$HOME/.gradle}/caches/modules-2"
+
+# ===== 1) 필요한 task로 "resolve를 전부" 트리거 =====
+# - spotlessCheck 포함 (google-java-format 받게)
+# - testClasses 포함 (test deps + bom/parent 받게)
+# - build 포함 (네 build는 spotlessCheck에 dependsOn)
+# - 단, test 실행은 제외
+echo "[1/4] Running Gradle to trigger ALL resolves..."
+"${GRADLE_CMD[@]}" \
+ clean compileJava testClasses spotlessCheck build \
+ -x test \
+ --refresh-dependencies \
+ --debug \
+ 2>&1 | tee "$LOGDIR/gradle-debug.log"
+
+# ===== 2) debug 로그에서 실제 접근한 Maven artifact URL 추출 =====
+# Gradle은 내부적으로 "resource: " 같은 형태로 찍는 경우가 많아서
+# http/https URL 중 Maven2 레이아웃에 해당하는 확장자만 뽑는다.
+echo "[2/4] Extracting artifact URLs from Gradle debug log..."
+
+grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \
+ | sed -E 's/\?.*$//' \
+ | sort -u \
+ > "$OUTDIR/artifact-urls.txt"
+
+echo " - URLs: $(wc -l < "$OUTDIR/artifact-urls.txt")"
+echo " - saved: $OUTDIR/artifact-urls.txt"
+
+# ===== 3) URL들을 m2 레이아웃으로 다운로드 =====
+# URL 형태가 .../repository/maven-public/... 이거나 MavenCentral/osgeo 일 수 있음
+# 공통점: Maven2 레이아웃(/groupId/artifactId/version/...)을 그대로 가지고 있음
+echo "[3/4] Downloading artifacts into m2 layout..."
+
+download_one() {
+ local url="$1"
+ # Maven2 레이아웃에서 groupId부터의 상대경로를 잡는다.
+ # 케이스:
+ # - https://repo1.maven.org/maven2/
+ # - https://repo.osgeo.org/repository/release/
+ # - http://.../repository/maven-public/
+ local rel
+
+ if [[ "$url" == *"/maven2/"* ]]; then
+ rel="${url#*/maven2/}"
+ elif [[ "$url" == *"/repository/"*"/"*"/"* ]]; then
+ # /repository// 이후를 상대경로로
+ rel="$(echo "$url" | sed -E 's#^https?://[^/]+/repository/[^/]+/##')"
+ else
+ # 알 수 없는 형태면 스킵(대부분 없음)
+ echo " - [SKIP] unknown url form: $url"
+ return 0
+ fi
+
+ # 저장 경로
+ local dest="$M2OUT/$rel"
+ mkdir -p "$(dirname "$dest")"
+
+ if [[ -f "$dest" ]]; then
+ return 0
+ fi
+
+ echo " - [GET] $rel"
+ curl -fSL "$url" -o "$dest" || {
+ # sha1/md5 같은 건 서버에 없을 수 있음 → 무시
+ echo " !! failed: $url"
+ rm -f "$dest" 2>/dev/null || true
+ return 0
+ }
+}
+
+export -f download_one
+export M2OUT
+
+# 순차 다운로드(안정성). 병렬 원하면 xargs -P로 바꿀 수 있음.
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ download_one "$url"
+done < "$OUTDIR/artifact-urls.txt"
+
+# ===== 4) tgz 생성 =====
+echo "[4/4] Packing seed..."
+tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo
+ls -lh "$OUTDIR/m2repo-seed.tgz"
+echo "OK: $OUTDIR/m2repo-seed.tgz"
\ No newline at end of file
diff --git a/shp-exporter/build.gradle b/shp-exporter/build.gradle
index ea1b96f..0a7d18d 100755
--- a/shp-exporter/build.gradle
+++ b/shp-exporter/build.gradle
@@ -14,16 +14,27 @@ java {
}
}
+//repositories {
+// mavenCentral()
+// maven {
+// url 'https://repo.osgeo.org/repository/release/'
+// }
+// maven {
+// url 'https://repo.osgeo.org/repository/geotools-releases/'
+// }
+// maven {
+// url 'https://repo.osgeo.org/repository/snapshot/'
+// }
+//}
+
+def repoUrl = System.getProperty("org.gradle.project.repoUrl")
+ ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
+ ?: "http://172.16.4.56:18100/repository/maven-public/"
+
repositories {
- mavenCentral()
maven {
- url 'https://repo.osgeo.org/repository/release/'
- }
- maven {
- url 'https://repo.osgeo.org/repository/geotools-releases/'
- }
- maven {
- url 'https://repo.osgeo.org/repository/snapshot/'
+ url = uri(repoUrl)
+ allowInsecureProtocol = true
}
}
diff --git a/shp-exporter/gradle/wrapper/gradle-wrapper.properties b/shp-exporter/gradle/wrapper/gradle-wrapper.properties
index d4081da..078b65d 100755
--- a/shp-exporter/gradle/wrapper/gradle-wrapper.properties
+++ b/shp-exporter/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/shp-exporter/make_seed_bundle_succ.sh b/shp-exporter/make_seed_bundle_succ.sh
new file mode 100644
index 0000000..024878f
--- /dev/null
+++ b/shp-exporter/make_seed_bundle_succ.sh
@@ -0,0 +1,293 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+OUTDIR="${OUTDIR:-offline-seed}"
+M2OUT="$OUTDIR/m2repo"
+LOGDIR="$OUTDIR/logs"
+
+ARTIFACT_URLS="$OUTDIR/artifact-urls.txt"
+FAILED_URLS="$OUTDIR/failed-urls.txt"
+REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt"
+IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt"
+MISSING_URLS="$OUTDIR/missing-from-nexus.txt"
+REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt"
+RETRY_URLS="$OUTDIR/retry-source-urls.txt"
+REPO_CANDIDATES="$OUTDIR/repository-candidates.txt"
+REPO_HINTS="$OUTDIR/repository-hints.txt"
+
+mkdir -p "$M2OUT" "$LOGDIR"
+: > "$FAILED_URLS"
+: > "$REAL_FAILED_URLS"
+: > "$IGNORED_FAILED_URLS"
+: > "$MISSING_URLS"
+: > "$REAL_MISSING_URLS"
+: > "$RETRY_URLS"
+: > "$REPO_CANDIDATES"
+: > "$REPO_HINTS"
+
+GRADLE_CMD=(./gradlew --no-daemon)
+
+SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}"
+DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}"
+SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}"
+QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}"
+
+MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}"
+GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}"
+OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}"
+
+echo "[1/8] Running Gradle to trigger resolves..."
+"${GRADLE_CMD[@]}" \
+ clean compileJava testClasses spotlessCheck build \
+ -x test \
+ --refresh-dependencies \
+ --debug \
+ 2>&1 | tee "$LOGDIR/gradle-debug.log" || true
+
+echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..."
+grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \
+ | sed -E 's/\?.*$//' \
+ | sort -u \
+ > "$ARTIFACT_URLS"
+
+echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")"
+
+echo "[3/8] Appending known required artifacts..."
+cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp"
+mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS"
+echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")"
+
+to_relative_path() {
+ local url="$1"
+
+ if [[ "$url" == *"/maven2/"* ]]; then
+ printf '%s\n' "${url#*/maven2/}"
+ return 0
+ fi
+
+ if [[ "$url" == *"/m2/"* ]]; then
+ printf '%s\n' "${url#*/m2/}"
+ return 0
+ fi
+
+ if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then
+ printf '%s\n' "${BASH_REMATCH[1]}"
+ return 0
+ fi
+
+ return 1
+}
+
+is_ignorable_url() {
+ local url="$1"
+
+ case "$url" in
+ */org.springframework.boot.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */org.springframework.boot.gradle.plugin-*.module)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */io.spring.dependency-management.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.jar)
+ return 0
+ ;;
+ */com.diffplug.spotless.gradle.plugin-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-apt/*/querydsl-apt-*.module)
+ return 0
+ ;;
+ */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+map_upstream_url() {
+ local url="$1"
+ local rel
+
+ if ! rel="$(to_relative_path "$url")"; then
+ return 1
+ fi
+
+ case "$rel" in
+ org/geotools/*|it/geosolutions/*|javax/media/*)
+ printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel"
+ ;;
+ io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ com/diffplug/spotless/*)
+ printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel"
+ ;;
+ *)
+ printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel"
+ ;;
+ esac
+}
+
+echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..."
+grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \
+ | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \
+ | sort -u \
+ > "$MISSING_URLS" || true
+
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ continue
+ fi
+ printf '%s\n' "$url" >> "$REAL_MISSING_URLS"
+ mapped="$(map_upstream_url "$url" || true)"
+ if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then
+ printf '%s\n' "$mapped" >> "$RETRY_URLS"
+ printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS"
+ fi
+done < "$MISSING_URLS"
+
+sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+sort -u "$RETRY_URLS" -o "$RETRY_URLS"
+sort -u "$REPO_HINTS" -o "$REPO_HINTS"
+
+cat "$RETRY_URLS" >> "$ARTIFACT_URLS"
+sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS"
+
+echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")"
+echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")"
+echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")"
+
+download_one() {
+ local url="$1"
+ local rel
+
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ return 0
+ fi
+
+ if ! rel="$(to_relative_path "$url")"; then
+ echo " - [SKIP] unknown URL form: $url"
+ return 0
+ fi
+
+ local dest="$M2OUT/$rel"
+ mkdir -p "$(dirname "$dest")"
+
+ if [[ -f "$dest" ]]; then
+ return 0
+ fi
+
+ echo " - [GET] $rel"
+ if ! curl -fSL "$url" -o "$dest"; then
+ echo "$url" >> "$FAILED_URLS"
+ rm -f "$dest" 2>/dev/null || true
+ if is_ignorable_url "$url"; then
+ printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS"
+ else
+ printf '%s\n' "$url" >> "$REAL_FAILED_URLS"
+ echo " !! failed: $url"
+ fi
+ fi
+}
+
+export -f to_relative_path
+export -f is_ignorable_url
+export -f download_one
+export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS
+
+echo "[5/8] Downloading artifacts into m2 layout..."
+while IFS= read -r url; do
+ [[ -z "$url" ]] && continue
+ download_one "$url"
+done < "$ARTIFACT_URLS"
+
+sort -u "$FAILED_URLS" -o "$FAILED_URLS"
+sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS"
+sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS"
+
+echo "[6/8] Extracting repository candidates declared inside downloaded POMs..."
+while IFS= read -r -d '' pom; do
+ awk -v pom="$pom" '
+ // { in_repo=1; id=""; url=""; next }
+ /<\/repository>/ {
+ if (in_repo && url != "" && url !~ /^file:/) {
+ print url "\t" pom "\t" id
+ }
+ in_repo=0
+ id=""
+ url=""
+ next
+ }
+ in_repo {
+ if (match($0, /([^<]+)<\/id>/, m)) {
+ id=m[1]
+ }
+ if (match($0, /([^<]+)<\/url>/, m)) {
+ url=m[1]
+ }
+ }
+ ' "$pom"
+done < <(find "$M2OUT" -type f -name '*.pom' -print0) \
+ | sort -u \
+ > "$REPO_CANDIDATES"
+
+echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")"
+
+echo "[7/8] Packing seed bundle..."
+tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo
+ls -lh "$OUTDIR/m2repo-seed.tgz"
+
+echo "[8/8] Summary"
+echo " seed bundle : $OUTDIR/m2repo-seed.tgz"
+echo " artifact URLs : $ARTIFACT_URLS"
+echo " raw missing : $MISSING_URLS"
+echo " real missing : $REAL_MISSING_URLS"
+echo " raw failed : $FAILED_URLS"
+echo " real failed : $REAL_FAILED_URLS"
+echo " ignored failed : $IGNORED_FAILED_URLS"
+echo " retry source URLs : $RETRY_URLS"
+echo " repository hints : $REPO_HINTS"
+echo " POM repo candidates : $REPO_CANDIDATES"
\ No newline at end of file
diff --git a/shp-exporter/offline_upload_to_nexus.sh b/shp-exporter/offline_upload_to_nexus.sh
new file mode 100644
index 0000000..36c1629
--- /dev/null
+++ b/shp-exporter/offline_upload_to_nexus.sh
@@ -0,0 +1,98 @@
+#!/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"
diff --git a/shp-exporter/src/main/java/com/kamco/makesample/service/GeoServerRegistrationService.java b/shp-exporter/src/main/java/com/kamco/makesample/service/GeoServerRegistrationService.java
index 28be6f5..77389c4 100644
--- a/shp-exporter/src/main/java/com/kamco/makesample/service/GeoServerRegistrationService.java
+++ b/shp-exporter/src/main/java/com/kamco/makesample/service/GeoServerRegistrationService.java
@@ -259,7 +259,7 @@ public class GeoServerRegistrationService {
// Construct file:// URL (must point to .shp file, not .zip)
// String fileUrl = "file://" + shpFilePath;
- String fileUrl = shpFilePath;
+ String fileUrl = shpFilePath;
log.info("Using file URL: {}", fileUrl);
// GeoServer REST API endpoint for external file reference