폐쇄망 환경에서 mvn deploy:deploy-file 명령어로 외부 라이브러리를 Nexus Repository에 수동 업로드할 때, 종종 발생하는 문제가 있습니다. 바로 자동 생성된 pom.xml이 실제 배포된 라이브러리의 메타 정보와 다를 경우 발생하는 의존성 충돌 또는 빌드 실패입니다.
이 글은 이전글인 [이 글]과 이어진 글이므로 같이 보시면 좋습니다.
문제 : Maven이 생성한 POM이 원본과 다를 때
mvn deploy:deploy-file 명령어는 .jar 파일만 있으면 기본적으로 groupId, artifactId, version 등의 메타 정보만을 바탕으로 간이 POM 파일을 자동 생성합니다. 하지만, 실제 Maven Central에 배포된 라이브러리의 pom.xml에는 다음과 같은 중요한 정보가 포함되어 있는 경우가 많습니다
- 라이센스
- 의존성 정보
- 개발자 정보
- SCM 정보 (Git URL 등)
자동 생성된 pom.xml에는 이런 정보가 누락되며, 이로 인해
- 빌드 시 의존성이 누락되거나
- 보안/라이센스 검토 도구가 오류를 낼 수 있습니다.
해결 : 원본 pom.xml 함께 업로드하기
가장 확실한 해결 방법은 Maven Central 등에서 배포된 원본 pom.xml 파일을 직접 다운로드해서 함께 업로드하는 것입니다.
개선된 deploy 명령어 예시
@echo off
setlocal
:: Nexus 서버 정보
set NEXUS_URL=http://127.0.0.1:8081/repository/maven-releases/
set REPO_ID=admin
call mvn deploy:deploy-file ^
-DgroupId=com.oracle ^
-DartifactId=ojdbc8 ^
-Dversion=4.0 ^
-Dpackaging=jar ^
-Dfile=ojdbc8-4.0.jar ^
-DpomFile=ojdbc8-4.0.pom ^
-DrepositoryId=%REPO_ID% ^
-Durl=%NEXUS_URL%
echo "정상적으로 POM과 함께 업로드 완료!"
endlocal
-DpomFile=... 옵션을 추가하면 자동 POM 생성 대신, 우리가 제공한 정식 POM 파일을 업로드하게 됩니다.
원본 POM 파일 다운로드 방법
- Maven Central에서 라이브러리를 검색
- 해당 버전 페이지로 이동
- .pom 파일 링크 클릭 → 저장
또는 URL 직접 다운로드 예시
https://repo1.maven.org/maven2/com/oracle/ojdbc8/4.0/ojdbc8-4.0.pom
주의! pom.xml과 jar 파일 이름을 정확히 맞춰야 함
POM 파일명은 .jar와 동일한 버전/이름을 사용해야 합니다.
- ojdbc8-4.0.jar
- ojdbc8-4.0.pom
위 예시와 같이 파일명이 같아야 하며, 파일 이름이 다르면 Nexus에서 인식되지 않거나 별도의 아티팩트로 분리되어 관리됩니다.
결론 : pom.xml을 신경 써야 진짜 ‘정상 배포’
폐쇄망이라도 품질 높은 리포지토리를 유지하려면, pom.xml까지 함께 관리하는 것이 중요합니다. 특히 보안 감사, 라이센스 검토, 자동화된 빌드 환경에서는 pom 정보가 반드시 필요합니다.
관련글
[리눅스/Rocky] - [CI/CD 서버 구축 #1] Rocky Linux에 Jenkins 설치 (.war 파일 기반, Java 17)
[CI/CD 서버 구축 #1] Rocky Linux에 Jenkins 설치 (.war 파일 기반, Java 17)
CI/CD 파이프라인을 구축할 때 가장 널리 사용되는 도구 중 하나인 Jenkins를 Rocky Linux 환경에 설치하는 방법을 정리합니다.이번 글에서는 .war 파일을 직접 실행하는 방식으로 설치하며, Java 17 환경
jineddy.tistory.com
[리눅스/Rocky] - [CI/CD 서버 구축 #2] Rocky Linux에 Nexus 설치 하기
[CI/CD 서버 구축 #2] Rocky Linux에 Nexus 설치 하기
Nexus Repository Manager는 사내 CI/CD 환경에서 빌드 결과물(라이브러리, 패키지 등)을 저장·배포하는 데 사용됩니다.이 글에서는 Rocky Linux 서버에 Nexus 3.x 버전 설치를 단계별로 정리해보겠습니다.SI
jineddy.tistory.com
[리눅스/Rocky] - [CI/CD 서버 구축 #3] SSH 공개키 방식 로그인 설정 방법 (Jenkins 배포 연동용)
[CI/CD 서버 구축 #3] SSH 공개키 방식 로그인 설정 방법 (Jenkins 배포 연동용)
CI/CD 파이프라인에서 Jenkins를 사용해 자동 배포를 구성할 때, 보안성과 편의성을 위해 SSH 공개키 기반 로그인 방식을 설정하는 것이 좋습니다.이번 글에서는 **리눅스 서버(dev 계정)**에 SSH 공개
jineddy.tistory.com
[개발/Java] - [CI/CD 서버 구축 #4] 폐쇄망 환경에서 오픈소스 라이브러리를 Nexus에 업로드하는 3가지 방법
[CI/CD 서버 구축 #4] 폐쇄망 환경에서 오픈소스 라이브러리를 Nexus에 업로드하는 3가지 방법
기업 내부망이나 보안 상의 이유로 인터넷 접속이 제한된 환경에서도 개발에 필요한 오픈소스 라이브러리를 활용해야 하는 경우가 많습니다. 이럴 때 Sonatype Nexus Repository Manager를 이용해 외부
jineddy.tistory.com
'서버 > CI 및 CD' 카테고리의 다른 글
[CI/CD 서버 구축 #4] 폐쇄망 환경에서 오픈소스 라이브러리를 Nexus에 업로드하는 3가지 방법 (0) | 2025.04.23 |
---|---|
[CI/CD 서버 구축 #3] SSH 공개키 방식 로그인 설정 방법 (Jenkins 배포 연동용) (0) | 2025.04.17 |
[CI/CD 서버 구축 #2] Rocky Linux에 Nexus 설치 하기 (0) | 2025.04.14 |
[CI/CD 서버 구축 #1] Rocky Linux에 Jenkins 설치 (.war 파일 기반, Java 17) (0) | 2025.04.14 |