Skip to main content

Maven을 사용하여 Java 패키지 게시

이 자습서에서는 Maven을 사용하여 CI(연속 통합) 워크플로의 일부로 레지스트리에 Java 패키지를 게시하는 방법을 알아봅니다.

소개

이 가이드에서는 GitHub Packages 및 Maven 중앙 리포지토리에 Java 패키지를 게시하는 워크플로를 만드는 방법을 보여 줍니다. 단일 워크플로를 사용하면 패키지를 단일 리포지토리 또는 여러 리포지토리에 게시할 수 있습니다.

경고

이 가이드에 사용된 예제는 레거시 OSSRH 서비스를 참조하세요. Maven 중앙 리포지토리 문서의 게시를 참조하세요.

필수 조건

워크플로 파일 및 구성 옵션을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 워크플로 작성을(를) 참조하세요.

Maven을 사용하여 Java 프로젝트에 대한 CI 워크플로를 만드는 방법에 대한 자세한 내용은 Maven을 사용하여 Java 빌드 및 테스트 참조하세요.

또한 다음 사항을 기본적으로 이해하는 것이 유용할 수 있습니다.

  •         [AUTOTITLE](/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry)
    
  •         [AUTOTITLE](/actions/learn-github-actions/variables)
    
  •         [AUTOTITLE](/actions/security-guides/using-secrets-in-github-actions)
    
  •         [AUTOTITLE](/actions/security-guides/automatic-token-authentication)
    

패키지 구성 정보

          `groupId` 파일의 `artifactId` 및 __ 필드는 레지스트리에서 패키지를 특정 레지스트리에 연결하는 데 사용하는 고유한 식별자를 생성합니다. 자세한 내용은 Apache Maven 문서에서 [중앙 리포지토리에 아티팩트 업로드 가이드](https://maven.apache.org/repository/guide-central-repository-upload.html)를 참조하세요.

경고

Apache Maven 패키지는 명명 규칙을 따라야 하므로 artifactId 필드에 소문자, 숫자, 하이픈만 포함해야 합니다. 자세한 내용은 maven.apache.org 설명서에서 Maven 좌표의 명명 규칙을 참조 하세요. 아티팩트 이름에 대문자를 사용하면 422 처리할 수 없는 엔터티 응답이 표시됩니다.

          _pom.xml_ 파일에는 Maven에서 패키지를 배포할 배포 관리 리포지토리에 대한 구성도 포함되어 있습니다. 각 리포지토리에는 이름과 배포 URL이 있어야 합니다. 이러한 리포지토리에 대한 인증은 Maven을 실행하는 사용자의 홈 디렉터리에 있는 _.m2/settings.xml_ 파일에서 구성할 수 있습니다.

setup-java 작업을 사용하여 해당 리포지토리에 대한 인증뿐만 아니라 배포 리포지토리를 구성할 수 있습니다. 자세한 내용은 setup-java를 참조하세요.

Maven 중앙 리포지토리에 패키지 게시

새 릴리스를 만들 때마다 워크플로를 트리거하여 패키지를 게시할 수 있습니다. 아래 예제의 워크플로는 release 이벤트가 created 형식으로 트리거될 때 실행됩니다. 이 워크플로는 CI 테스트를 통과할 경우 Maven 중앙 리포지토리에 패키지를 게시합니다. release 이벤트의 자세한 내용은 워크플로를 트리거하는 이벤트을(를) 참조하세요.

이 워크플로에서는 setup-java 작업을 사용할 수 있습니다. 이 작업은 지정된 버전의 JDK를 PATH에 설치하지만 패키지 게시를 위한 Maven _settings.xml_도 구성합니다. 기본적으로 설정 파일은 GitHub Packages에 대해 구성되지만 Maven 중앙 리포지토리와 같은 다른 패키지 레지스트리에 배포하도록 구성할 수도 있습니다. 이미 _pom.xml_에 배포 관리 리포지토리가 구성된 경우 id 작업 호출 중에 해당 setup-java를 지정할 수 있습니다.

예를 들어 OSSRH 호스팅 프로젝트를 통해 Maven 중앙 리포지토리에 배포하는 경우 _pom.xml_은 idossrh인 배포 관리 리포지토리를 지정할 수 있습니다.

XML
<project ...>
  ...
  <distributionManagement>
    <repository>
      <id>ossrh</id>
      <name>Central Repository OSSRH</name>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>
</project>

이 구성을 사용하면 id 작업에 리포지토리 관리 setup-java를 지정하여 Maven 중앙 리포지토리에 패키지를 게시하는 워크플로를 만들 수 있습니다. 또한 리포지토리에 인증하기 위해 사용자 이름 및 암호를 포함하는 환경 변수를 제공해야 합니다.

배포 단계에서는 환경 변수를 리포지토리에 인증하는 사용자 이름 및 인증할 암호 또는 토큰으로 구성한 비밀로 설정해야 합니다. 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.

YAML
name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - name: Set up Maven Central Repository
        uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Publish package
        run: mvn --batch-mode deploy
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

이 워크플로는 다음 단계를 수행합니다.

  1. 프로젝트 저장소의 복사본을 체크아웃한다.

  2. Java JDK를 설정하고 maven settings.xml 파일을 구성하여 ossrhMAVEN_USERNAME 환경 변수를 사용하여 MAVEN_PASSWORD 리포지토리에 대한 인증을 추가합니다.

  3. mvn --batch-mode deploy 명령을 실행하여 ossrh 리포지토리에 게시합니다. MAVEN_USERNAME 환경 변수는 OSSRH_USERNAME 비밀의 내용으로 설정되고, MAVEN_PASSWORD 환경 변수는 OSSRH_TOKEN 비밀의 내용으로 설정됩니다.

    워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.

GitHub Packages에 패키지 게시

새 릴리스를 만들 때마다 워크플로를 트리거하여 패키지를 게시할 수 있습니다. 아래 예제의 워크플로는 release 이벤트가 created 형식으로 트리거될 때 실행됩니다. 이 워크플로는 CI 테스트를 통과할 경우 GitHub Packages에 패키지를 게시합니다. release 이벤트의 자세한 내용은 워크플로를 트리거하는 이벤트을(를) 참조하세요.

이 워크플로에서는 setup-java 작업을 사용할 수 있습니다. 이 작업은 지정된 버전의 JDK를 PATH에 설치하고 패키지를 GitHub Packages에 게시하기 위한 Maven _settings.xml_도 설정합니다. 생성된 _settings.xml_은 id 환경 변수를 사용자 이름으로 사용하고 github 환경 변수를 암호로 사용하여 GITHUB_ACTORGITHUB_TOKEN인 서버에 대한 인증을 정의합니다. GITHUB_TOKEN 환경 변수에는 특수 GITHUB_TOKEN 비밀 값이 할당됩니다.

GITHUB_TOKEN 비밀은 워크플로의 작업이 시작될 때마다 리포지토리에 대한 액세스 토큰으로 설정됩니다. contents 권한에 대한 읽기 권한을 부여하고 packages 권한에 대한 쓰기 권한을 부여하려면 워크플로 파일에서 이 액세스 토큰에 대한 사용 권한을 설정해야 합니다. 자세한 내용은 워크플로에서 인증에 GITHUB_TOKEN 사용을(를) 참조하세요.

Maven 기반 프로젝트의 경우 GitHub Packages 엔드포인트를 가리키는 __ 의 idgithub 파일에 배포 리포지토리를 만들면 이러한 설정을 사용할 수 있습니다.

예를 들어 조직 이름이 “octocat”이고 리포지토리 이름이 “hello-world”인 경우 _pom.xml_의 GitHub Packages 구성은 아래 예제와 유사합니다.

XML
<project ...>
  ...
  <distributionManagement>
    <repository>
      <id>github</id>
      <name>GitHub Packages</name>
      <url>https://maven.pkg.github.com/octocat/hello-world</url>
    </repository>
  </distributionManagement>
</project>

이 구성을 사용하면 자동으로 생성된 _settings.xml_을 사용하여 GitHub Packages에 패키지를 게시하는 워크플로를 만들 수 있습니다.

YAML
name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v5
      - uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
      - name: Publish package
        run: mvn --batch-mode deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

이 워크플로는 다음 단계를 수행합니다.

  1. 프로젝트 저장소의 복사본을 체크아웃한다.

  2. Java JDK를 설정하고 Maven settings.xml 파일을 자동으로 구성하여 github Maven 리포지토리에 대한 인증을 추가하여 GITHUB_TOKEN 환경 변수를 사용합니다.

  3. mvn --batch-mode deploy 명령을 실행하여 GitHub Packages에 게시합니다. GITHUB_TOKEN 환경 변수는 GITHUB_TOKEN 비밀의 내용으로 설정됩니다. permissions 키는 GITHUB_TOKEN에 부여된 액세스 권한을 지정합니다.

    워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.

Maven 중앙 리포지토리 및 GitHub Packages에 패키지 게시

각 레지스트리에 대해 setup-java 작업을 사용하여 Maven 중앙 리포지토리 및 GitHub Packages 모두에 패키지를 게시할 수 있습니다.

          _pom.xml_ 파일에 GitHub 리포지토리 및 Maven 중앙 리포지토리 공급자 모두에 대한 배포 관리 리포지토리가 포함되어 있는지 확인합니다. 예를 들어, OSSRH 호스팅 프로젝트를 통해 중앙 리포지토리에 배포할 때, `id`를 `ossrh`로 설정하여 배포 관리 리포지토리에 지정할 수 있으며, GitHub Packages를 `id`가 `github`로 설정된 배포 관리 리포지토리에 지정할 수 있습니다.
YAML
name: Publish package to the Maven Central Repository and GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v5
      - name: Set up Java for publishing to Maven Central Repository
        uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Publish to the Maven Central Repository
        run: mvn --batch-mode deploy
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
      - name: Set up Java for publishing to GitHub Packages
        uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
      - name: Publish to GitHub Packages
        run: mvn --batch-mode deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

이 워크플로는 setup-java 작업을 두 번 호출합니다. setup-java 작업이 실행될 때마다 패키지 게시를 위해 Maven settings.xml 파일을 덮어씁니다. 리포지토리 인증을 위해 settings.xml 파일은 리포지토리 관리 리포지토리 id, 사용자 이름, 암호를 참조합니다.

이 워크플로는 다음 단계를 수행합니다.

  1. 프로젝트 저장소의 복사본을 체크아웃한다.

  2. 처음으로 setup-java를 호출합니다. 이렇게 하면 __ 리포지토리에 대한 Maven ossrh 파일이 구성되고 인증 옵션이 다음 단계에서 정의되는 환경 변수로 설정됩니다.

  3. mvn --batch-mode deploy 명령을 실행하여 ossrh 리포지토리에 게시합니다. MAVEN_USERNAME 환경 변수는 OSSRH_USERNAME 비밀의 내용으로 설정되고, MAVEN_PASSWORD 환경 변수는 OSSRH_TOKEN 비밀의 내용으로 설정됩니다.

  4. 두 번째로 setup-java를 호출합니다. 그러면 GitHub Packages에 대한 Maven settings.xml 파일이 자동으로 구성됩니다.

  5. mvn --batch-mode deploy 명령을 실행하여 GitHub Packages에 게시합니다. GITHUB_TOKEN 환경 변수는 GITHUB_TOKEN 비밀의 내용으로 설정됩니다. permissions 키는 GITHUB_TOKEN에 부여된 액세스 권한을 지정합니다.

    워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.