반응형
1. 의존성 다운로드 방법
기본 명령어
# 모든 의존성을 offline-repo 폴더에 다운로드
mvn dependency:go-offline -Dmaven.repo.local=./offline-repo
플러그인과 소스코드도 함께 다운로드
# 플러그인과 소스코드까지 모두 다운로드
mvn dependency:resolve-plugins dependency:resolve -Dclassifier=sources -Dclassifier=javadoc -Dmaven.repo.local=./offline-repo
2. 로컬 JAR 파일 처리
두 개의 로컬 JAR 파일(Dataconverter.jar, RelaySocket.jar)은 별도로 복사해 두어야 합니다.
# 로컬 JAR 파일 복사
mkdir -p ./offline-repo/local-jars
cp ./libs/Dataconverter.jar ./offline-repo/local-jars/
cp ./libs/RelaySocket.jar ./offline-repo/local-jars/
3. Nexus Repository Manager 설치 및 구성
- Nexus Repository Manager 다운로드 및 설치
- Sonatype 웹사이트에서 Nexus Repository Manager OSS 다운로드
- 압축 해제 후 bin 디렉토리에서 nexus 실행
- 관리자 계정으로 로그인 (기본: admin/admin123)
- Maven 저장소 생성
- "Settings" > "Repositories" > "Create repository" 클릭
- "maven2 (hosted)" 선택
- Name: "maven-internal" 입력
- Version policy: "Mixed" 선택
- 저장
4. 의존성 업로드 방법
방법 1: Maven Deploy Plugin 사용
# settings.xml 파일 생성
cat > settings.xml << EOF
<settings>
<servers>
<server>
<id>nexus-internal</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
</settings>
EOF
# JAR 파일 업로드 스크립트 생성
cat > upload-to-nexus.sh << EOF
#!/bin/bash
REPO_URL="http://nexus-server:8081/repository/maven-internal/"
REPO_ID="nexus-internal"
find ./offline-repo -type f -name "*.jar" | while read -r jar_file; do
dir=\$(dirname "\$jar_file")
pom_file=\$(find "\$dir" -name "*.pom" | head -1)
if [ -f "\$pom_file" ]; then
# POM 파일이 있는 경우
mvn deploy:deploy-file -s settings.xml \\
-DpomFile="\$pom_file" \\
-Dfile="\$jar_file" \\
-DrepositoryId=\$REPO_ID \\
-Durl=\$REPO_URL
else
# POM 파일이 없는 경우 (로컬 JAR 등)
filename=\$(basename "\$jar_file")
artifactId=\${filename%.jar}
mvn deploy:deploy-file -s settings.xml \\
-DgroupId=local.libs \\
-DartifactId=\$artifactId \\
-Dversion=1.0 \\
-Dpackaging=jar \\
-Dfile="\$jar_file" \\
-DrepositoryId=\$REPO_ID \\
-Durl=\$REPO_URL
fi
done
EOF
chmod +x upload-to-nexus.sh
./upload-to-nexus.sh
방법 2: Nexus REST API를 사용한 업로드
# 업로드 스크립트 생성 (curl 사용)
cat > upload-to-nexus-api.sh << EOF
#!/bin/bash
NEXUS_URL="http://nexus-server:8081"
REPO_NAME="maven-internal"
USERNAME="admin"
PASSWORD="admin123"
find ./offline-repo -type f -name "*.jar" | while read -r jar_file; do
filename=\$(basename "\$jar_file")
curl -u "\$USERNAME:\$PASSWORD" \\
-X POST "\$NEXUS_URL/service/rest/v1/components?repository=\$REPO_NAME" \\
-F "maven2.groupId=temp.group" \\
-F "maven2.artifactId=\${filename%.jar}" \\
-F "maven2.version=1.0" \\
-F "maven2.asset1=@\$jar_file" \\
-F "maven2.asset1.extension=jar"
done
EOF
chmod +x upload-to-nexus-api.sh
./upload-to-nexus-api.sh
5. 로컬 JAR 파일 별도 업로드
# Dataconverter.jar 업로드
mvn deploy:deploy-file -s settings.xml \
-DgroupId=local.libs \
-DartifactId=custom-Dataconverter \
-Dversion=1.0 \
-Dpackaging=jar \
-Dfile=./libs/Dataconverter.jar \
-DrepositoryId=nexus-internal \
-Durl=http://nexus-server:8081/repository/maven-internal/
# RelaySocket.jar 업로드
mvn deploy:deploy-file -s settings.xml \
-DgroupId=local.libs \
-DartifactId=custom-RelaySocket \
-Dversion=1.0 \
-Dpackaging=jar \
-Dfile=./libs/RelaySocket.jar \
-DrepositoryId=nexus-internal \
-Durl=http://nexus-server:8081/repository/maven-internal/
6. 폐쇄망 환경 Maven 설정
<!-- settings.xml 파일 생성 -->
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus-server:8081/repository/maven-internal/</url>
</mirror>
</mirrors>
</settings>
7. POM 파일 수정
폐쇄망 환경에서는 시스템 범위 의존성을 Nexus에서 가져오도록 수정해야 합니다:
<!-- 기존 시스템 범위 의존성을 다음과 같이 변경 -->
<dependency>
<groupId>local.libs</groupId>
<artifactId>custom-Dataconverter</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>local.libs</groupId>
<artifactId>custom-RelaySocket</artifactId>
<version>1.0</version>
</dependency>
8. 체크리스트 및 문제 해결
- [ ] 모든 의존성 다운로드 완료
- [ ] 로컬 JAR 파일 준비
- [ ] Nexus 저장소 생성 완료
- [ ] 의존성 업로드 완료
- [ ] 폐쇄망 환경 Maven 설정 완료
- [ ] POM 파일 수정 완료
- [ ] 테스트 빌드 성공
문제 발생 시:
- Nexus 로그 확인: $NEXUS_HOME/logs/nexus.log
- Maven 디버그 모드 활성화: mvn -X clean install
- 의존성 트리 확인: mvn dependency:tree
반응형
'프로그래밍 > Java' 카테고리의 다른 글
Java 스프링 프로젝트에서 다중 도메인 구조 구현 (0) | 2025.05.20 |
---|---|
springboot3 build.gradle Jar 파일 만들기 (0) | 2025.05.09 |
Java에서 c 소스 miniLZO 압축 라이브러리 Java JNI 연동하기 (1) | 2025.04.28 |
전자서명 / 검증 / 부인방지 개념정리 (0) | 2025.02.19 |
spring boot 이용한 JWT 로그인 로그아웃 토큰 유효성 검사 (0) | 2025.01.21 |