Java/Maven

[Maven] 외부망에서 .m2 복사했는데 내부망 빌드 실패할 때

범데이 2026. 5. 5. 11:15

외부망에서 빌드를 성공시킨 뒤 .m2/repository 폴더를 통째로 내부망에 복사했다.

로컬에 라이브러리가 다 있으니 문제없을 거라고 생각했다.

 

그런데 내부망에서 빌드를 돌리자 외부 저장소(Central)에 접속을 시도하며 Dependency Resolution 에러가 발생했다.

파일은 분명히 있는데, Maven이 계속 외부로 나가려 했다.

 

 

1. 원인: _remote.repositories 파일

Maven은 라이브러리를 다운로드할 때 해당 파일이 어떤 원격 저장소에서 왔는지를 기록하는 메타데이터 파일을 함께 생성한다.

 

파일명은 _remote.repositories 또는 _maven.repositories다.

 

이 파일에는 출처 저장소 정보가 기록되어 있다. 예를 들어 중앙 저장소에서 받은 파일이라면 central이라고 적혀 있다.

문제는 Maven이 로컬에 파일이 있어도 이 메타데이터를 확인한다는 점이다.

central이라고 기록되어 있으면 Maven은 "현재 연결된 저장소에 업데이트된 버전이 있는지" 확인하려고 시도한다.

내부망은 인터넷이 차단되어 있으니 그 시도가 실패하고, 결국 빌드 전체가 실패로 이어진다.

 

 

 

2. 해결: _remote.repositories 파일 일괄 삭제

로컬 저장소 내의 모든 _remote.repositories 파일을 삭제하면 Maven은 출처를 확인하지 않고 로컬에 있는 파일을 그대로 사용하게 된다.

 

 

Windows (PowerShell 기준)

.m2/repository 경로로 이동한 뒤 아래 명령어를 실행한다.

ls -R -Filter "_remote.repositories" | del

 

Linux / Mac (Terminal 기준)

find . -name "_remote.repositories" -type f -delete
 
 
 

3. 추가 팁: 오프라인 모드 병행

메타데이터 삭제 이후에도 Maven이 외부 연결을 시도한다면 오프라인 옵션을 함께 사용하는 것이 확실하다.

mvn clean install -o
 

-o 옵션은 원격 저장소 체크를 완전히 건너뛰고 로컬 저장소의 파일만 사용하도록 강제한다.

이전 글에서 다룬 --offline과 동일한 동작이다.

 

 

 

4. 정리

.m2 폴더를 복사하는 것만으로는 충분하지 않다.

Maven은 파일 존재 여부뿐 아니라 출처 메타데이터까지 확인하기 때문이다.

폐쇄망 환경에서 빌드를 안정적으로 돌리려면 _remote.repositories 파일 삭제를 반드시 함께 진행해야 한다.

728x90
반응형