gradle pluginを開発するときに「ローカルのmavenにpluginをアップロード→サンプルアプリから利用してみる」をする方法。
cookpad/LicenseToolsPluginを手を加えたくてforkして試行錯誤した結果のメモです。なので出てくるコードはこちらからとってきたものですが大半です。ありがとうございます。
前提
- ディレクトリ構造
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を追加
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'
などで設定してあるけど、ローカルにリリースする時にはこの設定は働かないみたい。
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
さまの場合は追加が必要なものは元からコメントアウトして書いておいてくれている。
// 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/