Android
Maven
GitLab
gradle

GitLabのPrivateリポジトリにAndroidライブラリをデプロイする

GitHubのPrivateリポジトリにAndroidライブラリをデプロイするの派生エントリです。あっちを読んでないと意味が分からない書き方をしたので、できたら読んできてください。

社内向けにライブラリを提供したい場合に、Gitリポジトリ内にMavenリポジトリなフォルダを作るのは有効な方法です。
ただし、リポジトリがPublicである必要があります。

ISMSとかそういう絡みの中で、うっかり「GitLabのプロジェクトの公開範囲は、InternalないしPrivateとする」みたいなルールを決めてしまうと、Mavenリポジトリの置き場所に困ってしまうわけですね。

そんなわけで、GitLabのPrivateなリポジトリに配置したMavenリポジトリからでも、Gradleのdependenciesにライブラリを読み込む話をします。

それは元記事と同じでは

はい。基本的には課題も解決策も前述の記事とほとんど同じなのですが、gradle-git-repo-pluginの使い方で悩んだので、メモとして残しておきます。

gradle-git-repo-pluginの設定

ひとまずこんな感じになりました。

app/build.gradle
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.layer:gradle-git-repo-plugin:2.0.2'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'git-repo'

repositories {
    git("git@local.gitlab.url:hoge/fuga.git", "anything.identifier.hoge.fuga", "master", "maven-repo")
}

github() 関数が使えるパターンと違って、git() 関数の何番目にどのパラメータを入れればいいのか、だいぶ悩まされました。

内部実装でいうと、このへん↓です。

project.repositories.metaClass.git = { String gitUrl, String name, String branch = "master", String type = "releases", def closure = null ->
    def orgDir = repositoryDir(project, name)
    addLocalRepo(project, ensureLocalRepo(project, orgDir, name, gitUrl, branch), type)
}

github版と読み比べたところ、次のようにすればいいことがわかりました。

git("GitLabの普通のclone用URL", "適当な名前", "ブランチ名", "フォルダ名")

というわけで、こうなります。

app/build.gradle
repositories {
    git("git@local.gitlab.url:hoge/fuga.git", "anything.identifier.hoge.fuga", "master", "maven-repo")
}

"適当な名前" ってなんだよ!?となりますが、テンポラリディレクトリ(デフォルトで~/.gitRepos)の中でclone先の名前として使われるだけです。他のライブラリと被らないようにFQDNか何かにしておくとよいでしょう。

まとめ

Gradleプラグインの良い勉強になりました(震え声)