Maven 패키지들의 패키지 레지스트리

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

프로젝트의 패키지 레지스트리에 Maven 아티팩트를 게시하세요. 그런 다음, 필요할 때마다 의존성으로 사용하기 위해 패키지를 설치하세요.

Maven 패키지 관리자 클라이언트가 사용하는 특정 API 엔드포인트에 대한 문서는 Maven API 문서를 참조하세요.

지원되는 클라이언트:

  • mvn. Maven 패키지를 빌드하는 방법을 알아보세요.
  • gradle. Gradle 패키지를 빌드하는 방법을 알아보세요.
  • sbt.

GitLab 패키지 레지스트리에 게시하기

패키지 레지스트리에 인증하기

패키지를 게시하려면 토큰이 필요합니다. 달성하려는 목표에 따라 사용 가능한 다양한 토큰이 있습니다. 자세한 정보는 토큰 가이드를 확인하세요.

프로세스에서 나중에 사용하도록 토큰을 생성하고 저장하세요.

여기에 기록되지 않은 인증 방법을 사용하지 마세요. 문서화되지 않은 인증 방법은 향후 제거될 수 있습니다.

클라이언트 구성 편집

클라이언트 구성을 업데이트하여 HTTP를 사용하여 Maven 리포지토리에 인증하세요.

사용자 지정 HTTP 헤더

인증 정보를 클라이언트의 구성 파일에 추가해야 합니다.

mvn
토큰 유형 이름은 토큰
개인 액세스 토큰 Private-Token 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
배포 토큰 Deploy-Token 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
CI 작업 토큰 Job-Token ${CI_JOB_TOKEN}

참고: <name> 필드는 선택한 토큰과 일치하도록 지정해야 합니다.

다음 섹션을 settings.xml 파일에 추가하세요.

<settings>
  <servers>
    <server>
      <id>gitlab-maven</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>REPLACE_WITH_NAME</name>
            <value>REPLACE_WITH_TOKEN</value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>
gradle
토큰 유형 이름은 토큰
개인 액세스 토큰 Private-Token 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
배포 토큰 Deploy-Token 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
CI 작업 토큰 Job-Token System.getenv("CI_JOB_TOKEN")

참고: <name> 필드는 선택한 토큰과 일치하도록 지정해야 합니다.

GRADLE_USER_HOME 디렉토리에 다음 내용으로 gradle.properties 파일을 생성하세요.

gitLabPrivateToken=REPLACE_WITH_YOUR_TOKEN

다음 내용을 build.gradle 파일의 repositories 섹션에 추가하세요.

  • Groovy DSL:

    repositories {
        maven {
            url "https://gitlab.example.com/api/v4/groups/<group>/-/packages/maven"
            name "GitLab"
            credentials(HttpHeaderCredentials) {
                name = 'REPLACE_WITH_NAME'
                value = gitLabPrivateToken
            }
            authentication {
                header(HttpHeaderAuthentication)
            }
        }
    }
    
  • Kotlin DSL:

    repositories {
        maven {
            url = uri("https://gitlab.example.com/api/v4/groups/<group>/-/packages/maven")
            name = "GitLab"
            credentials(HttpHeaderCredentials::class) {
                name = "REPLACE_WITH_NAME"
                value = findProperty("gitLabPrivateToken") as String?
            }
            authentication {
                create("header", HttpHeaderAuthentication::class)
            }
        }
    }
    
기본 HTTP 인증

Maven 패키지 레지스트리에 인증하기 위해 기본 HTTP 인증을 사용할 수도 있습니다.

mvn
Token type Name must be Token
Personal access token 사용자의 username 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
Deploy token Deploy token의 username 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
CI Job token gitlab-ci-token ${CI_JOB_TOKEN}

다음 내용을 settings.xml 파일의 섹션에 추가하세요.

<settings>
  <servers>
    <server>
      <id>gitlab-maven</id>
      <username>REPLACE_WITH_NAME</username>
      <password>REPLACE_WITH_TOKEN</password>
      <configuration>
        <authenticationInfo>
          <userName>REPLACE_WITH_NAME</userName>
          <password>REPLACE_WITH_TOKEN</password>
        </authenticationInfo>
      </configuration>
    </server>
  </servers>
</settings>
gradle
Token type Name must be Token
Personal access token 사용자의 username 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
Deploy token Deploy token의 username 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
CI Job token gitlab-ci-token System.getenv("CI_JOB_TOKEN")

GRADLE_USER_HOME 디렉토리에 다음 내용으로 gradle.properties 파일을 생성하세요.

gitLabPrivateToken=REPLACE_WITH_YOUR_TOKEN

다음 내용을 build.gradle 파일의 repositories 섹션에 추가하세요.

  • Groovy DSL:

    repositories {
        maven {
            url "https://gitlab.example.com/api/v4/groups/<group>/-/packages/maven"
            name "GitLab"
            credentials(PasswordCredentials) {
                username = 'REPLACE_WITH_NAME'
                password = gitLabPrivateToken
            }
            authentication {
                basic(BasicAuthentication)
            }
        }
    }
    
  • Kotlin DSL:

    repositories {
        maven {
            url = uri("https://gitlab.example.com/api/v4/groups/<group>/-/packages/maven")
            name = "GitLab"
            credentials(BasicAuthentication::class) {
                username = "REPLACE_WITH_NAME"
                password = findProperty("gitLabPrivateToken") as String?
            }
            authentication {
                create("basic", BasicAuthentication::class)
            }
        }
    }
    
sbt
Token type Name must be Token
Personal access token 사용자의 username 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
Deploy token Deploy token의 username 토큰을 그대로 붙여 넣거나 토큰 보유에 사용할 환경 변수를 정의하세요
CI Job token gitlab-ci-token sys.env.get("CI_JOB_TOKEN").get

SBT의 인증은 기본 HTTP 인증을 기반으로 합니다. 이름과 암호를 제공해야 합니다.

참고: name 필드는 선택한 토큰과 일치하도록 지정해야 합니다.

sbt를 사용하여 Maven GitLab 패키지 레지스트리에서 패키지를 설치하려면 Maven resolver를 구성해야 합니다. 개인 또는 내부 프로젝트 또는 그룹에 액세스하려는 경우 자격 증명을 설정해야 합니다. 리졸버와 인증을 구성한 후에는 프로젝트, 그룹 또는 네임스페이스에서 패키지를 설치할 수 있습니다.

build.sbt에 다음 내용을 추가하세요.

resolvers += ("gitlab" at "<endpoint url>")

credentials += Credentials("GitLab Packages Registry", "<host>", "<name>", "<token>")

위 예시에서:

  • <endpoint url>엔드포인트 URL입니다. 예: https://gitlab.example.com/api/v4/projects/<project_id>/packages/maven.
  • <host>는 프로토콜 스키마나 포트 없이 <endpoint url>에 포함된 호스트입니다. 예: gitlab.example.com.
  • <name><token>은 위의 표에 설명되어 있습니다.

네이밍 규칙

Maven 패키지를 설치하기 위해 세 가지 엔드포인트 중 하나를 사용할 수 있습니다. 패키지를 프로젝트에 발행해야 하지만 선택한 엔드포인트에 따라 pom.xml 파일에 추가해야 할 설정이 결정됩니다.

세 가지 엔드포인트는 다음과 같습니다:

  • 프로젝트 수준: Maven 패키지가 몇 개 없거나 GitLab 그룹에 속해 있지 않은 경우 사용합니다.
  • 그룹 수준: 동일한 GitLab 그룹 내의 다양한 프로젝트에서 패키지를 설치하려는 경우 사용합니다. GitLab은 그룹 내 패키지 이름의 고유성을 보장하지 않습니다. 따라서 패키지 이름과 패키지 버전이 동일한 두 개의 프로젝트가 있을 수 있습니다. 결과적으로 GitLab은 보다 최근 버전을 제공합니다.
  • 인스턴스 수준: 서로 다른 GitLab 그룹이나 고유한 네임스페이스에 많은 패키지가 있는 경우 사용합니다.

인스턴스 수준 엔드포인트의 경우 Maven의 pom.xml에서 관련 섹션이 다음과 같이 보이도록 합니다:

  <groupId>group-slug.subgroup-slug</groupId>
  <artifactId>project-slug</artifactId>

프로젝트 경로가 동일한 패키지만 인스턴스 수준 엔드포인트에서 노출됩니다.

프로젝트 패키지 인스턴스 수준 엔드포인트 이용 가능 여부
foo/bar foo/bar/1.0-SNAPSHOT 가능
gitlab-org/gitlab foo/bar/1.0-SNAPSHOT 불가능
gitlab-org/gitlab gitlab-org/gitlab/1.0-SNAPSHOT 가능

엔드포인트 URL

엔드포인트 pom.xml용 엔드포인트 URL 추가 정보
프로젝트 https://gitlab.example.com/api/v4/projects/<project_id>/packages/maven gitlab.example.com을 도메인 이름으로 바꿉니다. <project_id>프로젝트 개요 페이지에서 찾을 수 있는 프로젝트 ID로 바꿉니다.
그룹 https://gitlab.example.com/api/v4/groups/<group_id>/-/packages/maven gitlab.example.com을 도메인 이름으로 바꿉니다. <group_id>는 그룹 홈페이지에서 찾을 수 있는 그룹 ID로 바꿉니다.
인스턴스 https://gitlab.example.com/api/v4/packages/maven gitlab.example.com을 도메인 이름으로 바꿉니다.

발행 구성 파일 수정

클라이언트의 구성 파일에 발행 세부 정보를 추가해야 합니다.

mvn

선택한 엔드포인트에 관계없이, 다음이 있어야 합니다:

  • distributionManagement 섹션에 프로젝트별 URL이 있어야 합니다.
  • repositorydistributionManagement 섹션이 있어야 합니다.

Maven의 pom.xml의 관련 repository 섹션은 다음과 같이 보이도록 하세요:

<repositories>
  <repository>
    <id>gitlab-maven</id>
    <url><your_endpoint_url></url>
  </repository>
</repositories>
<distributionManagement>
  <repository>
    <id>gitlab-maven</id>
    <url>https://gitlab.example.com/api/v4/projects/<project_id>/packages/maven</url>
  </repository>
  <snapshotRepository>
    <id>gitlab-maven</id>
    <url>https://gitlab.example.com/api/v4/projects/<project_id>/packages/maven</url>
  </snapshotRepository>
</distributionManagement>
gradle

Gradle을 사용하여 패키지를 게시하려면:

  1. Gradle 플러그인 maven-publish을 플러그인 섹션에 추가하세요:

    • Groovy DSL:

      plugins {
          id 'java'
          id 'maven-publish'
      }
      
    • Kotlin DSL:

      plugins {
          java
          `maven-publish`
      }
      
  2. publishing 섹션을 추가하세요:

    • Groovy DSL:

      publishing {
          publications {
              library(MavenPublication) {
                  from components.java
              }
          }
          repositories {
              maven {
                  url "https://gitlab.example.com/api/v4/projects/<PROJECT_ID>/packages/maven"
                  credentials(HttpHeaderCredentials) {
                      name = "REPLACE_WITH_TOKEN_NAME"
                      value = gitLabPrivateToken // 변수는 $GRADLE_USER_HOME/gradle.properties에 있습니다
                  }
                  authentication {
                      header(HttpHeaderAuthentication)
                  }
              }
          }
      }
      
    • Kotlin DSL:

      publishing {
          publications {
              create<MavenPublication>("library") {
                  from(components["java"])
              }
          }
          repositories {
              maven {
                  url = uri("https://gitlab.example.com/api/v4/projects/<PROJECT_ID>/packages/maven")
                  credentials(HttpHeaderCredentials::class) {
                      name = "REPLACE_WITH_TOKEN_NAME"
                      value =
                          findProperty("gitLabPrivateToken") as String? // 변수는 $GRADLE_USER_HOME/gradle.properties에 있습니다
                  }
                  authentication {
                      create("header", HttpHeaderAuthentication::class)
                  }
              }
          }
      }
      

패키지 게시

경고: DeployAtEnd 옵션 사용시 400 bad request {"message":"Validation failed: Name has already been taken"}로 업로드가 거부될 수 있습니다. 자세한 내용은 이슈 424238을 참조하십시오.

인증을 설정하고 게시를 위한 엔드포인트를 선택한 후에 Maven 패키지를 프로젝트에 게시하세요.

mvn

Maven을 사용하여 패키지를 게시하려면:

mvn deploy

배포가 성공하면 빌드 성공 메시지가 표시됩니다:

...
[INFO] BUILD SUCCESS
...

메시지는 패키지가 올바른 위치에 게시되었음을 보여주어야 합니다:

gitlab-maven으로 업로드: https://example.com/api/v4/projects/PROJECT_ID/packages/maven/com/mycompany/mydepartment/my-project/1.0-SNAPSHOT/my-project-1.0-20200128.120857-1.jar
gradle

게시 작업실행:

gradle publish

프로젝트의 패키지 및 레지스트리 페이지로 이동하여 게시된 패키지를 확인합니다.

sbt

build.sbt 파일에서 publishTo 설정을 구성하세요:

publishTo := Some("gitlab" at "<endpoint url>")

자격 증명이 올바르게 참조되었는지 확인하세요. 자세한 내용은 sbt 문서를 참조하십시오.

sbt를 사용하여 패키지를 게시하려면:

sbt publish

배포가 성공하면 빌드 성공 메시지가 표시됩니다:

[success] Total time: 1 s, completed Jan 28, 2020 12:08:57 PM

패키지가 올바른 위치에 게시되었는지 확인하기 위해 성공 메시지를 확인하세요:

[info]  https://gitlab.example.com/api/v4/projects/PROJECT_ID/packages/maven/com/mycompany/my-project_2.12/0.1.1-SNAPSHOT/my-project_2.12-0.1.1-SNAPSHOT.pom에 my-project_2.12를 게시했습니다

패키지 설치

GitLab 패키지 레지스트리에서 패키지를 설치하려면 원격 인증 및 구성해야 합니다. 이 작업이 완료되면 프로젝트, 그룹 또는 네임스페이스에서 패키지를 설치할 수 있습니다.

동일한 이름과 버전을 가진 여러 패키지가 있을 경우에는 가장 최근에 게시된 패키지가 검색됩니다. 가장 최근에 게시된 패키지를 읽을 권한이 충분하지 않으면 403 Forbidden이 반환됩니다.

mvn

mvn install을 사용하여 패키지를 설치하려면:

  1. 프로젝트 pom.xml 파일에 의존성을 수동으로 추가합니다. 앞서 생성한 예제를 추가하려면 다음과 같이 XML을 추가합니다:

    <dependency>
      <groupId>com.mycompany.mydepartment</groupId>
      <artifactId>my-project</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    
  2. 프로젝트에서 다음을 실행합니다:

    mvn install
    

메시지에서 패키지가 패키지 레지스트리에서 다운로드되었음을 보여주어야 합니다:

gitlab-maven에서 다운로드 중: http://gitlab.example.com/api/v4/projects/PROJECT_ID/packages/maven/com/mycompany/mydepartment/my-project/1.0-SNAPSHOT/my-project-1.0-20200128.120857-1.pom

또한 Maven dependency:get 명령을 직접 사용하여 패키지를 설치할 수 있습니다.

  1. 프로젝트 디렉토리에서 다음을 실행합니다:

    mvn dependency:get -Dartifact=com.nickkipling.app:nick-test-app:1.1-SNAPSHOT -DremoteRepositories=gitlab-maven::::<gitlab endpoint url>  -s <settings.xml 경로>
    

참고: 명령어의 리포지토리 ID(gitlab-maven) 및 settings.xml 파일은 일치해야 합니다.

메시지에서 패키지가 패키지 레지스트리에서 다운로드되었음을 보여주어야 합니다:

gitlab-maven에서 다운로드 중: http://gitlab.example.com/api/v4/projects/PROJECT_ID/packages/maven/com/mycompany/mydepartment/my-project/1.0-SNAPSHOT/my-project-1.0-20200128.120857-1.pom
gradle

gradle을 사용하여 패키지를 설치하려면:

  1. build.gradle의 의존성 섹션에 의존성을 추가하세요:

    • Groovy DSL에서:

      dependencies {
          implementation 'com.mycompany.mydepartment:my-project:1.0-SNAPSHOT'
      }
      
    • Kotlin DSL에서:

      dependencies {
          implementation("com.mycompany.mydepartment:my-project:1.0-SNAPSHOT")
      }
      
  2. 프로젝트에서 다음을 실행합니다:

    gradle install
    
sbt

sbt를 사용하여 패키지를 설치하려면:

  1. build.sbt인라인 의존성을 추가하세요:

    libraryDependencies += "com.mycompany.mydepartment" % "my-project" % "8.4"
    
  2. 프로젝트에서 다음을 실행합니다:

    sbt update
    

유용한 힌트

동일한 이름 또는 버전으로 패키지를 게시하는 경우

동일한 이름과 버전으로 패키지를 게시하면 새로운 패키지 파일이 기존 패키지에 추가됩니다. 여전히 UI 또는 API를 사용하여 기존 패키지의 이전 자산에 액세스하고 확인할 수 있습니다.

이전 패키지 버전을 삭제하려면, 패키지 API 또는 UI를 사용하는 것을 고려하세요.

중복되는 Maven 패키지 허용 안 함

  • GitLab 15.0에서 필요한 역할이 개발자에서 유지자로 변경되었습니다.

중복되는 Maven 패키지를 게시하는 것을 방지하기 위해 사용자는 GraphQl API 또는 UI를 사용할 수 있습니다.

UI에서:

  1. 왼쪽 사이드바에서 검색 또는 이동하여 이동을 선택하고 그룹을 찾습니다.
  2. 설정 > 패키지 및 레지스트리를 선택합니다.
  3. Maven 테이블의 중복 패키지 행에서 중복 허용 토글을 끕니다.
  4. 옵션. 예외 텍스트 상자에 허용할 패키지 이름 및 버전과 일치하는 정규 표현식을 입력합니다.

변경 사항은 자동으로 저장됩니다.

Maven 중앙으로의 요청 포워딩

기본적으로 이 기능은 자체 관리형에는 사용할 수 없습니다. 사용 가능하도록 하려면 관리자가 maven_central_request_forwarding이라는 기능 플래그 활성화할 수 있습니다. 이 기능은 GitLab.com 또는 GitLab Dedicated 사용자에게는 제공되지 않습니다.

패키지 레지스트리에서 Maven 패키지를 찾을 수 없는 경우, 해당 요청은 Maven Central로 전달됩니다.

기능 플래그가 활성화된 경우 관리자는 이 동작을 지속적인 통합 설정에서 비활성화할 수 있습니다.

Maven 포워딩은 프로젝트 수준 및 그룹 수준 엔드포인트에만 제한됩니다. 인스턴스 수준 엔드포인트에는 해당 규칙을 따르지 않는 패키지에 대해 사용할 수 없으며 공급망 유형의 공격에 대한 너무 많은 보안 위험을 도입합니다.

mvn의 추가 구성

mvn을 사용할 때, Maven 프로젝트를 구성하여 Maven Central에서 GitLab로 패키지를 요청하도록 할 수 있는 여러 가지 방법이 있습니다. Maven 저장소는 특정한 순서로 쿼리됩니다. 보통 Maven Central이 먼저 확인됩니다. 그러므로 Maven Central 대신 GitLab이 먼저 쿼리되도록 GitLab을 구성해야 합니다.

모든 패키지 요청이 Maven Central 대신 GitLab으로 보내지도록 하려면 settings.xml<mirror> 섹션을 추가하여 중앙 저장소를 GitLab으로 대체할 수 있습니다:

<settings>
  <servers>
    <server>
      <id>central-proxy</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Private-Token</name>
            <value><personal_access_token></value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
  <mirrors>
    <mirror>
      <id>central-proxy</id>
      <name>GitLab 중앙 저장소의 프록시</name>
      <url>https://gitlab.example.com/api/v4/projects/<project_id>/packages/maven</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
</settings>

GitLab CI/CD로 Maven 패키지 생성

저장소를 Maven을 위한 패키지 레지스트리 사용으로 구성한 후, GitLab CI/CD를 구성하여 새 패키지를 자동으로 빌드할 수 있습니다.

mvn

기본 브랜치가 업데이트될 때마다 새 패키지를 생성할 수 있습니다.

  1. Maven의 settings.xml 파일로 작동하는 ci_settings.xml 파일을 생성합니다.

  2. pom.xml 파일에서 정의한 ID와 동일한 ID를 사용하여 server 섹션을 추가합니다. 예를 들어, ID로 gitlab-maven을 사용합니다:

    <settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
      <servers>
        <server>
          <id>gitlab-maven</id>
          <configuration>
            <httpHeaders>
              <property>
                <name>Job-Token</name>
                <value>${CI_JOB_TOKEN}</value>
              </property>
            </httpHeaders>
          </configuration>
        </server>
      </servers>
    </settings>
    
  3. 아래 내용이 pom.xml 파일에 포함되어 있는지 확인합니다. 이 예제에서는 미리 정의된 CI/CD 변수를 Maven에서 사용하도록 하거나, 서버의 호스트 이름 및 프로젝트 ID를 하드코딩할 수 있습니다.

    <repositories>
      <repository>
        <id>gitlab-maven</id>
        <url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>
      </repository>
    </repositories>
    <distributionManagement>
      <repository>
        <id>gitlab-maven</id>
        <url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>
      </repository>
      <snapshotRepository>
        <id>gitlab-maven</id>
        <url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>
      </snapshotRepository>
    </distributionManagement>
    
  4. .gitlab-ci.yml 파일에 deploy 작업을 추가합니다:

    deploy:
      image: maven:3.6-jdk-11
      script:
        - 'mvn deploy -s ci_settings.xml'
      rules:
        - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    
  5. 이러한 파일을 저장소에 푸시합니다.

다음으로 deploy 작업이 실행되면, ci_settings.xml이 사용자의 홈 위치로 복사됩니다. 이 예제에서는:

  • 작업은 도커 컨테이너에서 실행되므로 사용자는 root입니다.
  • Maven은 구성된 CI/CD 변수를 사용합니다.
gradle

기본 브랜치가 업데이트될 때마다 패키지를 생성할 수 있습니다.

  1. Gradle에서 CI 작업 토큰 사용자 인증을 수행합니다.

  2. .gitlab-ci.yml 파일에 deploy 작업을 추가합니다:

    deploy:
      image: gradle:6.5-jdk11
      script:
        - 'gradle publish'
      rules:
        - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    
  3. 파일을 저장소에 커밋합니다.

파이프라인이 성공적으로 실행되면 Maven 패키지가 생성됩니다.

버전 유효성 검사

다음 정규식을 사용하여 버전 문자열을 유효성을 검사합니다.

\A(?!.*\.\.)[\w+.-]+\z

이 정규식을 실험하고 귀하의 버전 문자열을 이 정규 표현식 편집기에서 시도해볼 수 있습니다.

유용한 Maven 명령줄 옵션

GitLab CI/CD 작업을 수행할 때 사용할 수 있는 Maven 명령줄 옵션 몇 가지가 있습니다.

  • 파일 전송 진행 상황은 CI 로그를 읽기 어렵게 할 수 있습니다. 3.6.1에서 -ntp,--no-transfer-progress 옵션이 추가되었습니다. 또는 -B,--batch-mode를 살펴보거나 하위 레벨 로깅 변경 사항을 확인하십시오.

  • pom.xml 파일의 위치를 지정합니다 (-f,--file):

    package:
      script:
        - 'mvn --no-transfer-progress -f helloworld/pom.xml package'
    
  • 사용자 설정 파일 위치를 지정합니다 (-s,--settings). 기본 위치 대신 사용자 설정에 -gs,--global-settings 옵션이 있습니다:

    package:
      script:
        - 'mvn -s settings/ci.xml package'
    

지원되는 CLI 명령어

GitLab Maven 저장소는 다음 CLI 명령어를 지원합니다.

mvn
  • mvn deploy: 패키지를 패키지 레지스트리에 등록합니다.
  • mvn install: Maven 프로젝트에서 지정된 패키지를 설치합니다.
  • mvn dependency:get: 특정 패키지를 설치합니다.
gradle
  • gradle publish: 패키지를 패키지 레지스트리에 등록합니다.
  • gradle install: Gradle 프로젝트에서 지정된 패키지를 설치합니다.

문제 해결

성능을 향상시키기 위해 클라이언트는 패키지 관련 파일을 캐시합니다. 문제가 발생하면 다음 명령어를 사용하여 캐시를 지웁니다.

mvn
rm -rf ~/.m2/repository
gradle
rm -rf ~/.gradle/caches # 또는 사용자 정의 GRADLE_USER_HOME으로 ~/.gradle을 바꿉니다.

네트워크 추적 로그 검토

Maven 저장소에 문제가 있는 경우 네트워크 추적 로그를 검토해보고자 할 수 있습니다.

예를 들어 로컬에서 PAT 토큰과 함께 mvn deploy를 실행해보고 다음 옵션을 사용해보세요:

mvn deploy \
-Dorg.slf4j.simpleLogger.log.org.apache.maven.wagon.providers.http.httpclient=trace \
-Dorg.slf4j.simpleLogger.log.org.apache.maven.wagon.providers.http.httpclient.wire=trace

경고: 이러한 옵션을 설정하면 모든 네트워크 요청이 로그에 남고 대량의 출력이 생성됩니다.

Maven 설정 확인

settings.xml 파일과 관련된 CI/CD에서 문제가 발생하면 유효한 설정을 확인하는 추가 스크립트 작업이나 작업을 추가해보세요.

도움 플러그인은 또한 시스템 속성을 제공할 수 있습니다.

mvn-settings:
  script:
    - 'mvn help:effective-settings'

package:
  script:
    - 'mvn help:system'
    - 'mvn package'