폐쇄망 환경에서 윈도우 PC에 있는 로컬 메이븐 저장소(~/.m2/repository)를 새로 구축한 Nexus Repository로 일괄 업로드하는 방법은 크게 두 가지가 있습니다.
가장 효율적인 방법은 **1번(Nexus 서버 자체 임포트)**이며, 서버 접근이 어렵다면 **2번(PowerShell 스크립트)**을 권장합니다.
사전 준비사항
-
Nexus 설정: Nexus에 maven2 (hosted) 타입의 Repository가 생성되어 있어야 합니다 (예: maven-releases 또는 my-internal-repo).
-
Deployment 권한: 업로드할 사용자 계정에 업로드 권한이 있어야 합니다 (기본 admin 계정 권한).
방법 1: Nexus 서버의 ‘Import’ 기능 사용 (가장 빠름)
서버에 파일을 직접 옮길 수 있다면 이 방법이 가장 정확하고 빠릅니다.
-
파일 복사: 윈도우의 C:\Users\사용자\.m2\repository 폴더 전체를 압축하여 Nexus 서버의 임의 폴더(예: /tmp/m2-backup)로 옮긴 후 압축을 풉니다.
-
Nexus 접속: 관리자 계정으로 로그인합니다.
-
Task 생성:
-
Administration (톱니바퀴) -> System -> Tasks 선택.
-
Create Task 버튼 클릭 -> Repository – Import 선택.
-
-
Task 설정:
-
Task name: m2-import
-
Source directory: 파일이 있는 경로 입력 (예: /tmp/m2-backup).
-
Repository: 파일을 넣을 대상 maven-hosted 저장소 선택.
-
-
실행: Create Task 후 목록에서 해당 Task를 선택하고 Run을 클릭합니다.
방법 2: PowerShell 스크립트로 업로드 (클라이언트 PC에서 실행)
서버에 직접 파일을 옮길 수 없을 때, 윈도우 PC에서 Nexus API를 호출하여 업로드하는 방식입니다. SSL 인증서를 무시하고 업로드하도록 작성되었습니다.
1. 스크립트 작성 (upload.ps1)
아래 코드를 복사하여 upload.ps1 파일을 만듭니다.
# --- 설정 부분 ---
$NEXUS_URL = "http://<NEXUS_IP>:<PORT>/service/rest/v1/components?repository=<REPO_NAME>"
$USERNAME = "admin"
$PASSWORD = "admin123"
$M2_PATH = "$HOME\.m2\repository"
# SSL 인증서 검증 무시 (Self-signed 인증서용)
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
# 인증 정보 생성
$auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("${USERNAME}:${PASSWORD}"))
$headers = @{ Authorization = "Basic $auth" }
# .pom 파일을 찾아서 순회 (pom이 있어야 메이븐 좌표 확인 가능)
Get-ChildItem -Path $M2_PATH -Filter *.pom -Recurse | ForEach-Object {
$pomFile = $_.FullName
$jarFile = $pomFile.Replace(".pom", ".jar")
# JAR 파일이 없는 경우도 있으므로 체크
if (Test-Path $jarFile) {
Write-Host "Uploading: $($_.Name)" -ForegroundColor Cyan
# Nexus API 호출 (Multipart Form Data)
curl.exe -u "${USERNAME}:${PASSWORD}" -k -X POST "$NEXUS_URL" `
-F "maven2.asset1=@$jarFile" -F "maven2.asset1.extension=jar" `
-F "maven2.asset2=@$pomFile" -F "maven2.asset2.extension=pom"
}
}
2. 실행 방법
-
PowerShell을 관리자 권한으로 엽니다.
-
Set-ExecutionPolicy RemoteSigned (스크립트 실행 권한 허용)
-
.\upload.ps1 실행
방법 3: Maven settings.xml 설정 후 일괄 배포

이미 프로젝트가 구성되어 있다면 Maven 자체 기능을 이용할 수 있습니다.
1. ~/.m2/settings.xml 수정 (인증 및 SSL 무시)
<settings>
<servers>
<server>
<id>my-nexus</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
</settings>
2. SSL 무시 설정 (HTTP를 사용하거나 Self-signed인 경우)
메이븐 실행 시 다음 파라미터를 추가합니다:
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
3. 개별 파일 업로드 (참고용)
특정 중요 라이브러리만 올릴 때는 아래 명령어를 사용합니다.
mvn deploy:deploy-file -DgroupId=com.example -DartifactId=my-lib -Dversion=1.0 -Dpackaging=jar -Dfile=my-lib-1.0.jar -DrepositoryId=my-nexus -Durl=http://<NEXUS_IP>:8081/repository/maven-releases/ -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
요약 및 추천
-
파일 양이 많다(GB 단위): **방법 1 (Nexus Import Task)**을 무조건 추천합니다. 네트워크 부하가 없고 가장 빠릅니다.
-
서버 접근 권한이 없다: **방법 2 (PowerShell + curl)**가 가장 현실적입니다. 윈도우에는 기본적으로 curl이 포함되어 있어 실행이 간편합니다.
-
SSL 문제: 스크립트 내의 -k 옵션(curl)이나 TrustAllCertsPolicy 설정을 통해 무시할 수 있습니다.
주의: 폐쇄망에서 Nexus를 처음 세팅했다면, Central 프록시 저장소는 인터넷이 안 되어 작동하지 않으므로, 반드시 모든 라이브러리를 Hosted 저장소에 올리고 개발자들의 settings.xml에서 mirror 설정을 해당 Nexus로 잡아주어야 합니다.