Slide 1

Slide 1 text

やってみようMaven! Maven Publish Pluginの基礎知識 2022/11/08 後夜祭 DroidKaigi 2022 Naoto Uwaseki @ STORES, inc.

Slide 2

Slide 2 text

自己紹介 ● 上関 直人( Uwaseki Naoto ) ● @n_seki_ (Twitter ) / @n-seki ( GitHub ) ● STORES 株式会社 ○ STORES 決済 アプリ/ SDK の開発

Slide 3

Slide 3 text

STORES 決済 SDK ● アプリに組み込むことで、クレジットカード決済をはじめとする複数 の決済手段をかんたんに導入できる ● Android 向け SDK は Maven Repository で公開しています

Slide 4

Slide 4 text

STORES 決済 SDK ● アプリに組み込むことで、クレジットカード決済をはじめとする複数 の決済手段をかんたんに導入できる ● Android 向け SDK は Maven Repository で公開しています

Slide 5

Slide 5 text

STORES 決済 SDK ● アプリに組み込むことで、クレジットカード決済をはじめとする複数 の決済手段をかんたんに導入できる ● Android 向け SDK は Maven Repository で公開しています Android ライブラリの公開ってどうやるの?

Slide 6

Slide 6 text

この発表のねらい ● ライブラリを Maven Repository に公開(アップロード)するため の記述 ● 1 行ずつ何をやっているのか見 ていきます! ● これからライブラリを公開しようと 考えている方 ● Maven Publish Plugin に興味が ある方

Slide 7

Slide 7 text

Mavenとはなにか? Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. https://maven.apache.org/

Slide 8

Slide 8 text

Mavenとはなにか? Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. https://maven.apache.org/ ● ソフトウェアプロジェクトの管理管理ツール

Slide 9

Slide 9 text

Mavenとはなにか? Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. https://maven.apache.org/ ● ソフトウェアプロジェクトの管理管理ツール ● Project Object Model ( POM )をベースにしている

Slide 10

Slide 10 text

Mavenとはなにか? Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. https://maven.apache.org/ ● ソフトウェアプロジェクトの管理管理ツール ● Project Object Model ( POM )をベースにしている ● ビルド、(テスト)レポート、ドキュメントの管理ができる

Slide 11

Slide 11 text

Project Object Model(POM)? ● Maven が利用する設定ファイル ○ 公開対象のライブラリの id やバージョン、依存関係など ○ 実体は xml ファイル ● Maven Publish Plugin は POM を生成します(詳しくは後述)

Slide 12

Slide 12 text

Maven Publish Pluginとはなにか ● アーティファクトを Maven リポジトリに公開する ○ アーティファクト -> ライブラリ( .aar )など ○ Maven リポジトリ -> Maven Central, 自分で立てたリポジトリな ど ● Gradle の DSL で公開の設定情報を記述できる ● 公開用の Gradle Task を生成する

Slide 13

Slide 13 text

Maven Publish Pluginの使いかた(何を設定するか) ● 何を公開するか ○ 例えば Android ライブラリ( .aar ) ● どこに公開するか ○ 例えば Maven Central Repository ● どのように公開するか ○ 記述された情報から公開用の Gradle Task が生成される ○ 例えば PublishToMavenRepository

Slide 14

Slide 14 text

Maven Publish Pluginとはなにか

Slide 15

Slide 15 text

publishing { } ● プラグインの記述の始まり ● ここに maven に関する記述をし ていきます

Slide 16

Slide 16 text

publications { } ● 何を公開するかを定義するとこ ろ ● ここでは release という名前の 「公開( publication )」を定義し ている

Slide 17

Slide 17 text

release(MavenPublication) ● MavenPublication に maven に 関する設定を行える API がいろ いろ生えている ● この行で release という公開は maven の仕組みを使うという宣 言にもなっている

Slide 18

Slide 18 text

groupId, artifactId, version ● 公開対象を一意に特定するた めの属性 ● 左の設定で公開されたライブラ リを依存に含める場合以下 implementation ‘com.my-company:my-library:1.0’

Slide 19

Slide 19 text

from compoments.release ● from は MavenPublication の API ● AGP8.0 以上では次のような記 述が必須 publishing { singleVariant("release") } ● release バリアントのビルド成果 物を公開対象にすると宣言

Slide 20

Slide 20 text

from compoments.release ● release という publication では release バリアントでビルドした aar を公開する、という意味合い になる ● component の生成がプロジェク ト評価中に行われるので afterEvaluate で囲む

Slide 21

Slide 21 text

./gradlew

Slide 22

Slide 22 text

repositories { } ● どこに公開するかの設定 ● maven { } で Maven Repository の設定ができる ● 通常 url にはリモートリポジトリ ( Maven Central など)の URL を 設定するが、サンプルのように ローカルディレクトリでも OK

Slide 23

Slide 23 text

Repositoryへ公開する! ● 生成された Gradle Task を実行するだけ ○ ビルドと POM 生成 ○ それらの公開(指定された URL へのアップロード) ./gradlew publishReleasePublicationToMyrepoRepository

Slide 24

Slide 24 text

Repositoryへ公開する!

Slide 25

Slide 25 text

再掲

Slide 26

Slide 26 text

まとめ ● Maven では POM という xml ファイルが利用される ● Maven Publish Plugin を使って Maven repository にライブラ リを公開できる ○ 何を公開するか ○ どこに公開するか ○ どう公開するか( Gradle Task が生成される) ● Android Developers の日本語公式は少し記述が古いので、 英語版を参照するのがオススメです

Slide 27

Slide 27 text

参考ドキュメント ● Gradle ○ https://docs.gradle.org/current/userguide/publishing_maven.html ○ https://docs.gradle.org/current/userguide/publishing_setup.html ● Android ○ https://developer.android.com/studio/publish-library/upload-library ○ https://developer.android.com/studio/publish-library/configure-pub-variants