Skip to main content

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

Maven을 사용하여 CI(연속 통합) 워크플로의 일부로 Java 패키지를 레지스트리에 게시할 수 있습니다.

참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.

소개

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

필수 조건

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

Gradle을 사용해 Java 패키지의 CI 워크플로를 만드는 것에 대한 자세한 내용은 "Maven을 사용하여 Java 빌드 및 테스트"을(를) 참조하세요.

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

패키지 구성 정보

pom.xml 파일의 groupIdartifactId 필드는 레지스트리에서 패키지를 레지스트리에 연결하는 데 사용하는 패키지의 고유 식별자를 만듭니다. 자세한 내용은 Apache Maven 문서에서 중앙 리포지토리에 아티팩트 업로드 가이드를 참조하세요.

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_에 배포 관리 리포지토리가 구성된 경우 setup-java 작업 호출 중에 해당 id를 지정할 수 있습니다.

예를 들어 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>

이 구성을 사용하면 setup-java 작업에 리포지토리 관리 id를 지정하여 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@v4
      - 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_USERNAMEMAVEN_PASSWORD 환경 변수를 사용하여 ossrh 리포지토리에 대한 인증을 추가하도록 Maven settings.xml 파일도 구성합니다.

  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_은 GITHUB_ACTOR 환경 변수를 사용자 이름으로 사용하고 GITHUB_TOKEN 환경 변수를 암호로 사용하여 idgithub인 서버에 대한 인증을 정의합니다. GITHUB_TOKEN 환경 변수에는 특수 GITHUB_TOKEN 비밀 값이 할당됩니다.

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

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

예를 들어 조직 이름이 “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@v4
      - 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_TOKEN 환경 변수를 사용하도록 github Maven 리포지토리에 대한 인증을 추가합니다.

  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 호스팅 프로젝트를 통해 중앙 리포지토리에 배포하는 경우 idossrh로 설정하여 배포 관리 리포지토리에 지정하고 GitHub Packages는 idgithub로 설정된 배포 관리 리포지토리에 있습니다.

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@v4
      - 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를 호출합니다. 이렇게 하면 ossrh 리포지토리에 대한 Maven settings.xml 파일이 구성되고 인증 옵션이 다음 단계에서 정의되는 환경 변수로 설정됩니다.

  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에서 비밀 사용"을(를) 참조하세요.