4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHub Packages で プライベートリポジトリをgradleライブラリ化にする

Posted at

はじめに

社内で共通して利用するライブラリはGitHubのプライベートリポジトリとして管理したいですよね。サクッと作ろうとしたのですが、gradleではgithubのプライベートリポジトリをURL指定などで利用することができなかったので方法を調べました。
Github Packageという、GitHubが提供するパッケージ管理の仕組みを使うことで実現できました。

今回はgradle registoryとしての利用方法を紹介しますが、他にも以下の種類をサポートしているようです。

  • Container registry
  • Docker registry
  • RubyGems registry
  • npm registry
  • Apache Maven registry
  • Gradle registry
  • NuGet registry

ゴール

以下のように依存関係を指定して、GitHubのプライベートリポジトリのライブラリを利用する。

implementation 'app.beabuddy:gradlepackagesexample:1.0.4'

方法

Androidライブラリの作成

新規にAndroidのプロジェクトを作成して、ライブラリ化したい部分をモジュールとして開発します。

今回はおおまかに以下のような構造になりました。

├── app // ライブラリ開発用にライブラリを利用するアプリ
│   ├── build.gradle // appレベルbuild.gradleと呼ぶ
│   └── src
├── mylibrary // ライブラリ自体
│   ├── build.gradle // ライブラリレベルbuild.gradleと呼ぶ
│   └── src
├── build.gradle // プロジェクトレベルbuild.gradleと呼ぶ
├── local.properties
└── settings.gradle

ライブラリの公開設定

ライブラリレベルbuild.gradleのpluginsブロックの下に以下を追記します。

// local.propertiesからGitHub認証情報を取得
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/ユーザー名や組織名/リポジトリ名")
            credentials { // 認証情報
                username = localProperties.getProperty("gpr.user") ?: System.getenv("USERNAME")
                password = localProperties.getProperty("gpr.key") ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        gpr(MavenPublication) {
            // groupId:artifactId:version というふうに利用側で依存関係を指定する
            // 自分の利用したい値に変更してください
            groupId = 'app.beabuddy' 
            artifactId = 'gradlepackagesexample' 
            version = '1.0.4'

            afterEvaluate {
                from(components.release)
            }
        }
    }
}

認証情報を設定

local.propertiesにGitHubのパーソナルアクセストークンを設定します。パーソナルアクセストークンはClassic形式である必要がありそうです。必要な権限はこちら

local.properties
gpr.user={GitHubのユーザー名}
gpr.key={GitHubのパーソナルアクセストークン(classic)}

gradleライブラリとして公開(リポジトリへのアクセス権を持つ人にのみ)

「ライブラリの公開設定」で設定した値をもとに、gradleタスクが追加されるので実行します。

./gradlew publishGprPublicationToGitHubPackagesRepository

無事に公開されるとリポジトリのトップページの右下に以下のように Packages に公開されたライブラリが表示されます。
image.png

クリックすると以下のような情報が表示されます。
image.png

公開したライブラリを利用する

ここからは別のプロジェクトから公開したパッケージを利用する方法を紹介します。

認証情報の設定

local.propertiesにGitHubのパーソナルアクセストークンを設定します。パーソナルアクセストークンはClassic形式である必要がありそうです。 パッケージを利用するだけなら read:packages があればよいです。

local.properties
gpr.user={GitHubのユーザー名}
gpr.key={GitHubのパーソナルアクセストークン(classic)}

リポジトリの追加

settings.gradleに以下のような設定を追加します。 プロジェクトの状況次第では settings.gradle でなく プロジェクトレベルの build.gradle かもしれません。 いずれにしても repositories のブロックに追記する形にすればよいと思います。

settings.gradle
Properties localProperties = new Properties()
localProperties.load(file('local.properties').newDataInputStream())
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/sekitaka/gradle-packages-example")
            credentials {
                username = localProperties.getProperty("gpr.user") ?: System.getenv("USERNAME")
                password = localProperties.getProperty("gpr.key") ?: System.getenv("TOKEN")
            }
        }
    }
}

依存関係の追加

ここまでくれば他のライブラリと同様にアプリレベルのbuild.gradleに依存関係を追加すれば、公開したパッケージを利用することができます。

build.gradle
dependencies {
    implementation 'app.beabuddy:gradlepackagesexample:1.0.4'
}

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?