Skip to main content

Apache Maven 레지스트리 작업

패키지를 GitHub Packages에 게시하고 GitHub Packages에 저장된 패키지를 Java 프로젝트의 종속성으로 사용하도록 Apache Maven을 구성할 수 있습니다.

참고: 사이트 관리자가 지원되는 각 패키지 유형을 사용하거나 사용하지 않도록 설정할 수 있으므로 이 패키지 유형을 인스턴스에 사용할 수 없습니다. 자세한 내용은 "엔터프라이즈에 대한 패키지 에코시스템 지원 구성"을(를) 참조하세요.

GitHub Packages 인증

GitHub Packages은(는) personal access token (classic)을(를) 사용하는 인증만 지원합니다. 자세한 내용은 "개인용 액세스 토큰 관리"을(를) 참조하세요.

프라이빗, 내부, 퍼블릭 패키지를 게시, 설치, 삭제하려면 액세스 토큰이 필요합니다.

GitHub Packages 또는 GitHub Enterprise Server API에 인증하는 데 personal access token (classic)을 사용할 수 있습니다. personal access token (classic)을(를) 만들 때 필요에 따라 토큰의 범위를 다르게 할당할 수 있습니다. personal access token (classic)의 패키지 관련 범위에 대한 자세한 내용은 "GitHub 패키지에 대한 사용 권한 정보"을 참조하세요.

GitHub Actions 워크플로 내에서 GitHub Packages 레지스트리에 인증하려면 다음을 사용할 수 있습니다.

  • 워크플로 리포지토리와 연결된 패키지를 게시하려면 GITHUB_TOKEN을 사용합니다.
  • 다른 프라이빗 리포지토리(GITHUB_TOKEN는 액세스할 수 없음)와 연결된 패키지를 설치하기 위해 최소 read:packages 범위의 personal access token (classic).

GitHub Actions 워크플로에서 사용되는 GITHUB_TOKEN에 대한 자세한 내용은 “자동 토큰 인증”을 참조하세요.

personal access token을(를) 사용하여 인증

적절한 범위의personal access token (classic)으로 GitHub Packages에서 패키지를 게시하고 설치해야 합니다. 자세한 내용은 "GitHub 패키지 소개"을(를) 참조하세요.

personal access token (classic)을(를) 포함하도록 ~/.m2/settings.xml 파일을 편집하여 Apache Maven에서 GitHub Packages에 인증할 수 있습니다. ~/.m2/settings.xml 파일이 없으면 새로 만듭니다.

servers 태그에서 id와 함께 자식 server 태그를 추가하여 USERNAME을 GitHub 사용자 이름으로, TOKEN을 personal access token(으)로 바꿉니다.

repositories 태그에서 자격 증명을 포함하는 server 태그에 추가한 id에 리포지토리의 id를 자격 증명을 매핑하여 리포지토리를 구성합니다. HOSTNAME을 GitHub Enterprise Server 인스턴스의 호스트 이름으로 바꾸고 OWNER를 리포지토리를 소유한 개인 계정 또는 조직의 이름으로 바꿉니다. 대문자는 지원되지 않으므로 GitHub 사용자 이름 또는 조직 이름에 대문자가 포함되어 있더라도 리포지토리 소유자에는 소문자를 사용해야 합니다.

여러 리포지토리와 상호 작용하려는 경우 repositories 태그의 개별적인 repository 자식에 각 리포지토리를 추가하여 servers 태그의 자격 증명에 각 리포지토리의 id를 매핑할 수 있습니다.

GitHub Packages는 Apache Maven의 SNAPSHOT 버전을 지원합니다. SNAPSHOT 아티팩트를 다운로드하기 위해 GitHub Packages 리포지토리를 사용하려면 사용하는 프로젝트의 POM 또는 ~/.m2/settings.xml 파일에서 스냅샷을 사용하도록 설정합니다.

인스턴스에 하위 도메인 격리가 사용된 경우:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <activeProfiles>
    <activeProfile>github</activeProfile>
  </activeProfiles>

  <profiles>
    <profile>
      <id>github</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
        </repository>
        <repository>
          <id>github</id>
          <url>https://maven.HOSTNAME/OWNER/REPOSITORY</url>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <servers>
    <server>
      <id>github</id>
      <username>USERNAME</username>
      <password>TOKEN</password>
    </server>
  </servers>
</settings>

인스턴스에 하위 도메인 격리가 사용되지 않은 경우:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <activeProfiles>
    <activeProfile>github</activeProfile>
  </activeProfiles>

  <profiles>
    <profile>
      <id>github</id>
      <repositories>
        <repository>
          <id>central</id>
          <url>https://repo1.maven.org/maven2</url>
        </repository>
        <repository>
          <id>github</id>
          <url>HOSTNAME/_registry/maven/OWNER/REPOSITORY</url>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <servers>
    <server>
      <id>github</id>
      <username>USERNAME</username>
      <password>TOKEN</password>
    </server>
  </servers>
</settings>

패키지 게시

기본적으로 GitHub는 패키지와 이름이 동일한 기존 리포지토리에 패키지를 게시합니다. 예를 들어 GitHub는 OWNER/test라는 이름의 리포지토리의 com.example:test라는 이름의 패키지를 게시합니다.

여러 패키지를 동일한 리포지토리에 게시하려는 경우 <distributionManagement>pom.xml_ 파일의 _ 요소에 리포지토리의 URL을 포함할 수 있습니다. GitHub은 해당 필드에 따라 리포지토리와 일치시킵니다. 리포지토리 이름도 distributionManagement 요소의 일부이므로 동일한 리포지토리에 여러 패키지를 게시하는 추가 단계는 없습니다.

패키지를 만드는 방법에 대한 자세한 내용은 maven.apache.org 설명서를 참조하세요.

  1. 패키지 디렉터리에 있는 pom.xml 파일의 distributionManagement 요소를 편집하여 파일의 요소를 편집하여 HOSTNAME을 GitHub Enterprise Server 인스턴스의 호스트 이름으로, OWNER를 리포지토리를 소유한 개인 계정 또는 조직의 이름으로, REPOSITORY를 프로젝트를 포함하는 리포지토리의 이름으로 변경합니다.

    인스턴스에 하위 도메인 격리가 사용 설정된 경우:

    <distributionManagement>
       <repository>
         <id>github</id>
         <name>GitHub OWNER Apache Maven Packages</name>
         <url>https://maven.HOSTNAME/OWNER/REPOSITORY</url>
       </repository>
    </distributionManagement>
    

    If your instance has subdomain isolation disabled:

    <distributionManagement>
       <repository>
         <id>github</id>
         <name>GitHub OWNER Apache Maven Packages</name>
         <url>https://HOSTNAME/_registry/maven/OWNER/REPOSITORY</url>
       </repository>
    </distributionManagement>
    
  2. Publish the package.

    mvn deploy
    

패키지를 게시한 후 GitHub에서 패키지를 볼 수 있습니다. 자세한 내용은 "패키지 보기"을(를) 참조하세요.

패키지 설치

GitHub Packages에서 Apache Maven 패키지를 설치하려면 패키지를 종속성으로 포함하도록 pom.xml 파일을 편집합니다. 지정된 리포지토리 소유자에 대해 리포지토리의 패키지를 설치하려면 https://maven.HOSTNAME/OWNER/*와 같은 리포지토리 URL을 사용합니다. 프로젝트에서 pom.xml 파일을 사용하는 방법에 대한 자세한 내용은 Apache Maven 설명서의 “POM 소개”를 참조하세요.

  1. GitHub Packages에 인증합니다. 자세한 내용은 “GitHub Packages에 인증”을 참조하세요.

  2. 패키지 종속성을 프로젝트 pom.xml 파일의 dependencies 요소에 패키지 종속성을 추가하고 com.example:test를 패키지로 변경합니다.

    <dependencies>
     <dependency>
        <groupId>com.example</groupId>
        <artifactId>test</artifactId>
        <version>1.0.0-SNAPSHOT</version>
      </dependency>
    </dependencies>
    
  3. 패키지를 설치합니다.

mvn install

추가 참고 자료