Maven 의존성을 다운로드하고 폐쇄망 Nexus에 추가하는 방법

반응형

maven

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 설치 및 구성

  1. Nexus Repository Manager 다운로드 및 설치
    • Sonatype 웹사이트에서 Nexus Repository Manager OSS 다운로드
    • 압축 해제 후 bin 디렉토리에서 nexus 실행
  2. 관리자 계정으로 로그인 (기본: admin/admin123)
  3. 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 파일 수정 완료
  • [ ] 테스트 빌드 성공

문제 발생 시:

  1. Nexus 로그 확인: $NEXUS_HOME/logs/nexus.log
  2. Maven 디버그 모드 활성화: mvn -X clean install
  3. 의존성 트리 확인: mvn dependency:tree

 

반응형