0
0

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 3 years have passed since last update.

Gradle Pluginのローカルmavenへのリリースおよびサンプルアプリからの使用方法

Last updated at Posted at 2022-03-12

gradle pluginを開発するときに「ローカルのmavenにpluginをアップロード→サンプルアプリから利用してみる」をする方法。

cookpad/LicenseToolsPluginを手を加えたくてforkして試行錯誤した結果のメモです。なので出てくるコードはこちらからとってきたものですが大半です。ありがとうございます。:pray_tone1:

前提

  • ディレクトリ構造

project root
|
|----plugin(plugin モジュール)
|
|----sample(サンプルアプリ モジュール)

  • plugin/build.gradle
plugins {
    id 'org.jetbrains.kotlin.jvm'
    id "org.jlleitschuh.gradle.ktlint" version "10.1.0"
    id 'java-gradle-plugin'
    id 'com.gradle.plugin-publish' version '0.15.0'
}
apply plugin: "org.jlleitschuh.gradle.ktlint"
apply plugin: 'kotlin-kapt'

pluginBundle {
    website = 'https://github.com/cookpad/LicenseToolsPlugin'
    vcsUrl = 'https://github.com/cookpad/LicenseToolsPlugin.git'
    tags = ['android', 'license']
}

gradlePlugin {
    plugins {
        licenseToolsPlugin {
            id = 'com.cookpad.android.plugin.license-tools'
            displayName = 'LicenseToolsPlugin'
            description = 'Gradle plugin to check library licenses and generate license pages.'
            implementationClass = 'com.cookpad.android.plugin.license.LicenseToolsPlugin'
        }
    }
}

apply plugin: 'maven'

archivesBaseName = 'license-tools'
group = 'com.cookpad.android.plugin'
version = '1.2.8'

dependencies {
()
}
  • sample/build.gradle
// Tips: Apply license-tools from mavenLocal for debugging
//
//buildscript {
//    repositories {
//        google()
//        mavenCentral()
//        mavenLocal()
//    }
//    dependencies {
//        classpath 'com.cookpad.android.plugin:license-tools:$your_version'
//    }
//}
//apply plugin: 'com.cookpad.android.plugin.license-tools'

plugins {
    id "com.cookpad.android.plugin.license-tools" version "1.2.8"
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 30
    buildToolsVersion "29.0.3"
    defaultConfig {
        applicationId "com.cookpad.android.license_tools_plugin"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildFeatures {
        viewBinding true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    // For Kotlin projects
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

licenseTools {
    ignoredGroups = [
            'com.foo.bar.android', //e.g. In-house library here.
    ]
    ignoredProjects = [
            'plugin',
    ]
}

dependencies {
()
}

手順

plugin生成物を作成してローカルのmavenにアップロードする

1.plugin/build.gradleにMaven Publish Pluginを追加

plugin/build.gralde
plugins {
    id 'org.jetbrains.kotlin.jvm'
    id "org.jlleitschuh.gradle.ktlint" version "10.1.0"
    id 'java-gradle-plugin'
    id 'com.gradle.plugin-publish' version '0.15.0'
    // -------以下追加-----
    id 'maven-publish'
    // -------追加終わり-----
}

(以降略)

2.plugin/build.gradleにローカルMavenにアップロードしたとき用の設定を追加
元から外のmaven用の設定はpluginBundleやその他archivesBaseName = 'license-tools'などで設定してあるけど、ローカルにリリースする時にはこの設定は働かないみたい。

plugin/build.gralde
plugins {
   (略)
}
apply plugin: "org.jlleitschuh.gradle.ktlint"
apply plugin: 'kotlin-kapt'

pluginBundle {
    (略)
}

gradlePlugin {
    (略)
}

// -----以下追加-------
publishing {
    publications {
        maven(MavenPublication) {
            artifactId = 'license-tools'
            groupId = 'com.cookpad.android.plugin'
            version = '1.2.9' // ローカルmavenにリリースしたいバージョン

            from components.java
        }
    }
}
// -----追加終わり-------

apply plugin: 'maven'

(以降略)

3.生成物を作成してローカルのmavenにアップロード
AndroidStudioのターミナルで
gradlew publishMavenPublicationToMavenLocal
とすると、PCのC:\Users\(ユーザー名)\.m2\repository\
以下に指定した名称(のディレクトリ)・バージョンでリリースされます。(Windows 10 の場合)
※何もしなくてもgradlew publishMavenPublicationToMavenLocalコマンドでC:\Users\(ユーザー名)以下に自動的に.m2ディレクトリができてそこがローカルのmavenとなる。

サンプルアプリからローカルのmavenにアップロードしたプラグインを使用する

1.sample/build.gradleのbuildscriptなどを追加・不要部をコメントアウト
cookpad/LicenseToolsPluginさまの場合は追加が必要なものは元からコメントアウトして書いておいてくれている。

sample/build.gradle
// Tips: Apply license-tools from mavenLocal for debugging
//

// -----以下追加---------------------------------

buildscript {
    repositories {
        google()
        mavenCentral()
        mavenLocal()
    }
    dependencies {
        classpath 'com.cookpad.android.plugin:license-tools:$your_version' // $your_version : 「plugin生成物を作成してローカルのmavenにアップロードする」の手順2で設定したversion。今回なら1.2.9
    }
}
apply plugin: 'com.cookpad.android.plugin.license-tools'

// -----追加終わり---------------------------------


// -----以下コメントアウト開始---------------------------------

//plugins {
//    id "com.cookpad.android.plugin.license-tools" version "1.2.8"
//}

// -----コメントアウト追加終了---------------------------------

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

(以降略)

2.通常通りのタスク名でローカルにリリースしたバージョンのpluginを使用できる。
gradlew checkLicenses

注意

「plugin生成物を作成してローカルのmavenにアップロードする」の手順3までを完全に完了するまえにsample/build.gradleの方まで書き換えてしまうと「plugin生成物を作成してローカルのmavenにアップロードする」の手順3の時に失敗します。
それはsample/build.graldeに書かれたバージョンのpluginツールがどこにもないからです。(pluginをリリースするのにsampleモジュールの方は使用しないが、タスクを動かす前に先にすべてのビルドファイルが正常に構成されているかチェックが入るよう。)
必ず「plugin生成物を作成してローカルのmavenにアップロードする」の手順3まで行ってからsample/build.gradleの方に手を加えてください。

参考にしたものなど

https://github.com/cookpad/LicenseToolsPlugin
https://qiita.com/opengl-8080/items/fcf60ba5daf658f39951
https://docs.gradle.org/current/userguide/publishing_maven.html
http://mike-neck.github.io/blog/2013/06/19/publish-maven-artifact-with-sign-files-1/

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?