GitHub Package Registry에 Gradle에서 JAR 게시

GitHub Package Registry



GitHub의 아티팩트 공개 서비스 Package Registry의 베타에 간신히 가입할 수 있었으므로, Maven 리포지토리로부터 JAR의 공개를 시도한다.
실험에 사용한 리포지토리는 여기
공식

토큰 만들기



Package의 권한은 리포지토리와는 별개이므로 기존 토큰이 있는 사람도 재발행/설정을 다시 해야 한다고 생각된다.



이번에는 gradle.properties 에 사용자 이름과 토큰을 설정해 둔다. 이 근처는 환경 변수 등 기호로.

gradle.properties
GITHUB_USER = minebreaker
GITHUB_TOKEN = [[token]]

build.gradle



일반 Maven Publish 플러그인을 사용합니다.
plugins {
    id 'maven-publish'
}

publishing {
    repositories {
        maven {
            name = "github"
            url = 'https://maven.pkg.github.com/minebreaker/Abukuma'
            credentials {
                username = project.hasProperty("GITHUB_USER") ? GITHUB_USER : ''
                password = project.hasProperty("GITHUB_TOKEN") ? GITHUB_TOKEN : ''
            }
        }
    }

    publications {
        maven(MavenPublication) {
            version '0.0.0.1-EXPLORING_GITHUB_REGISTRY'  // バージョンを指定したい場合

            pom {
                url = 'https://github.com/minebreaker/Abukuma'
                licenses {
                    license {
                        name = 'MIT'
                    }
                }
            }

            from components.java
            artifact sourcesJar
            artifact javadocJar
        }
    }
}
repositories {} 에서 GitHub를 패키지 게시 대상으로 지정. pom는 적용 가능하게. 여기서 URL의 minebreaker와 Abukuma를 각자의 사용자명과 리포지토리로 옮겨놓는다.

그룹, 아티팩트, 버전은 기본적으로 프로젝트 설정에서 그대로 사용됩니다. 위에서는 버전을 실험용임을 명시하기 위해 바꾸고 있다 (기본적으로 삭제는 할 수 없기 때문에 주의).

업로드


publishMavenPublicationToGithubRepository 태스크 실행. 위의 리포지토리 설정 name = github 에서 자동으로 작업을 설정해 주는 모양.

이것으로 실행하면, 불행하게도 태스크는 어중간하게 실패하고, 클래스 파일의 JAR만 공개되어 Javadoc와 소스는 업로드에 실패했다. 설정이 나쁜지, Gradle을 사용하고 있는 것이 나쁜지, GitHub가 나쁜지는 불명. 지식 요구한다.

라이브러리 사용



공식에서는 URL이 https://maven.pkg.github.com/OWNER 로 되어 있었지만, 리포지토리명을 포함하지 않으면 실패했다. 사양인지 버그인지 문서의 실수인지는 불명.
또, 레지스트리를 퍼블릭으로 하는 설정을 찾을 수 없고, 다운로드에도 자격 증명을 주어야 한다(소스는 퍼블릭인데...).
따라서 설정은 다음과 같습니다.
repositories {
    maven {
        url = 'https://maven.pkg.github.com/minebreaker/Abukuma'
        credentials {
            username = project.hasProperty("GITHUB_USER") ? GITHUB_USER : ''
            password = project.hasProperty("GITHUB_TOKEN") ? GITHUB_TOKEN : ''
        }
    }
}

dependencies {
    implementation 'rip.deadcode.abukuma3:abukuma-jetty:0.0.0.2-EXPLORING_GITHUB_REGISTRY'
}

요약



아직 베타판이라는 인상(베타판이지만).
다음 번에는 Docker를 사용하고 싶습니다. -> GitHub Package Registry에 Docker Image 게시

좋은 웹페이지 즐겨찾기