Skip to main content

Gradle 레지스트리 작업

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

누가 이 기능을 사용할 수 있나요?

GitHub Packages는 GitHub Free, GitHub Pro, 조직용 GitHub Free, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server 3.0 이상을 이용해 사용할 수 있습니다.
GitHub Packages는 레거시 리포지토리별 플랜을 사용하는 계정이 소유한 프라이빗 리포지토리에서 사용할 수 없습니다. 또한 레거시 리포지토리별 계획을 사용하는 계정은 세분화된 권한을 지원하는 레지스트리에 액세스할 수 없습니다. 이러한 계정은 리포지토리에서 청구되기 때문입니다. Enterprise Managed Users에는 계정의 네임스페이스 내에 패키지를 게시하기 위한 개별 스토리지 할당이 없지만 조직의 네임스페이스에 게시할 수 있습니다. Enterprise Managed Users에 대한 자세한 내용은 "Enterprise Managed Users 정보"을 참조하세요. 세분화된 권한을 지원하는 레지스트리 목록은 "GitHub 패키지에 대한 사용 권한 정보"을 참조하세요. 자세한 내용은 “GitHub의 플랜”를 참조하세요.

GitHub Packages 인증

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

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

GitHub Packages 또는 GitHub 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에 대한 자세한 내용은 “자동 토큰 인증”을 참조하세요. Gradle에서 GITHUB_TOKEN을 사용하는 방법에 대한 자세한 내용은 “Gradle을 사용하여 Java 패키지 게시”을(를) 참조하세요.

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

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

personal access token (classic)을(를) 포함하도록 build.gradle 파일(Gradle Groovy) 또는 build.gradle.kts 파일(Kotlin DSL)을 편집하고 Gradle Groovy 또는 Kotlin DSL을 사용해 Gradle에서 GitHub Packages 인증을 수행할 수 있습니다. 리포지토리에서 단일 패키지 또는 여러 패키지를 인식하도록 Gradle Groovy 및 Kotlin DSL을 구성할 수도 있습니다.

USERNAME을 GitHub 사용자 이름으로, TOKEN을 personal access token (classic)(으)로, REPOSITORY를 게시할 패키지가 포함된 리포지토리의 이름으로, OWNER를 리포지토리를 소유한 GitHub의 개인 계정 또는 조직의 이름으로 바꿉니다. 대문자는 지원되지 않으므로 GitHub 사용자 이름 또는 조직 이름에 대문자가 포함되어 있더라도 리포지토리 소유자에는 소문자를 사용해야 합니다.

참고: GitHub Packages는 Apache Maven의 SNAPSHOT 버전을 지원합니다. SNAPSHOT 아티팩트를 다운로드하기 위해 GitHub Packages 리포지토리를 사용하려면 사용하는 프로젝트의 POM 또는 ~/.m2/settings.xml 파일에서 스냅샷을 사용하도록 설정합니다. 예제는 "Apache Maven 레지스트리 작업"을(를) 참조하세요.

리포지토리의 단일 패키지에 Gradle Groovy를 사용하는 예제

plugins {
    id("maven-publish")
}
publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        gpr(MavenPublication) {
            from(components.java)
        }
    }
}

동일한 리포지토리의 여러 패키지에 Gradle Groovy를 사용하는 예제

plugins {
    id("maven-publish") apply false
}
subprojects {
    apply plugin: "maven-publish"
    publishing {
        repositories {
            maven {
                name = "GitHubPackages"
                url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
                credentials {
                    username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                    password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
                }
            }
        }
        publications {
            gpr(MavenPublication) {
                from(components.java)
            }
        }
    }
}

동일한 리포지토리의 단일 패키지에 Kotlin DSL을 사용하는 예제

plugins {
    `maven-publish`
}
publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        register<MavenPublication>("gpr") {
            from(components["java"])
        }
    }
}

동일한 리포지토리의 여러 패키지에 Kotlin DSL을 사용하는 예제

plugins {
    `maven-publish` apply false
}
subprojects {
    apply(plugin = "maven-publish")
    configure<PublishingExtension> {
        repositories {
            maven {
                name = "GitHubPackages"
                url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
                credentials {
                    username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                    password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
                }
            }
        }
        publications {
            register<MavenPublication>("gpr") {
                from(components["java"])
            }
        }
    }
}

패키지 게시

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

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

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

  2. 패키지를 만든 후 패키지를 게시할 수 있습니다.

     gradle publish
    

게시된 패키지 사용

GitHub Packages에서 게시된 패키지를 사용하려면 패키지를 종속성으로 추가하고 프로젝트에 리포지토리를 추가합니다. 자세한 내용은 Gradle 설명서의 “종속성 선언”을 참조하세요.

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

  2. build.gradle 파일(Gradle Groovy) 또는 build.gradle.kts 파일(Kotlin DSL)에 패키지 종속성을 추가합니다.

    Gradle Groovy를 사용하는 예제:

    dependencies {
        implementation 'com.example:package'
    }
    

    Kotlin DSL을 사용하는 예제:

    dependencies {
        implementation("com.example:package")
    }
    
  3. build.gradle 파일(Gradle Groovy) 또는 build.gradle.kts 파일(Kotlin DSL)에 리포지토리를 추가합니다.

    Gradle Groovy를 사용하는 예제:

    repositories {
        maven {
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
            }
       }
    }
    

    Kotlin DSL을 사용하는 예제:

    repositories {
        maven {
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
            }
        }
    }
    

추가 참고 자료