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.

Plugin Portalへ公開できるPrecompiled script pluginsの作り方

Last updated at Posted at 2021-11-03

はじめに

ちょっとしたものをプラグインとするのであればさっと書きやすいので、Precompiled script pluginsで作成したが何点か公開するには詰まったところがあった。それらを含めた備忘録をまとめる。

Precompiled script plugins とは

gradleファイルで書いたものをそのままプラグインにできる。
Precompiledが指す通りあらかじめコンパイルされる。そのため、完成物はバイナリプラグインでありjarができあがる。
使う上ではスタンドアロンプラグインと変わりない。

作り方

Precompiled script pluginsの場合、居たるところでplugin IDが影響するため、一番最初にIDを決める手順としている。

  1. IDを決める
  2. build.gradleを作る
  3. プラグインファイルを作る

1.IDを決める

ポータルPlugin IDs should trace back to the authorの見出しに書いてある。

ここでは見出し同様にGitHubをソースレポジトリとして公開する前提で話を進める。io.github.【ユーザーID】.【プラグイン名】という規則性で決まる。
また、プラグイン名は英数と一部の記号という制約があるのでリファレンスを読んでそれらを満たすようにすること

例えば、GitHubのユーザーがjohndoeで、プラグイン名がmypluginとする。その時のplugin IDはio.github.johndoe.mypluginとなる。

※ドメインを所持していればそれでも公開できるようだが、DNSレコードをいじったり何なりしないとできないらしい。

2.build.gradleを作る

build.gradle
plugins {
	id 'java-gradle-plugin'
	id 'groovy-gradle-plugin'
	id 'com.gradle.plugin-publish' version '0.16.0'
}

group = '【プラグインID】'
version = '0.1'

tasks.whenTaskAdded { task ->
	if(!'extractPluginRequests'.equals(task.name))return
	gradlePlugin.plugins {
		named('【プラグインID】') {
			displayName = ''
			description = ''
		}
	}
}

pluginBundle {
	website = '【ソースURL】'
	vcsUrl  = '【ソースURL】'
}

置き換え文字

  • 【プラグインID】
    • 1で決めたIDと置き換える
  • 【ソースURL】
    • このプラグインのために作ったGitHubのレポジトリURL

plugins

Precompiled script pluginsを作るときの中心となるのがgroovy-gradle-pluginです。これがバイナリプラグインを生成してくれます。
そして公開にはcom.gradle.plugin-publishが必要です。この点はスタンドアロンプラグインと変わりません。

※ローカルで試す際には一時的にmaven-publishを入れるのも手です。
groovy-gradle-pluginの裏側ではjava-gradle-pluginが動くようなので一応書いていますが不要かも知れません。

gradlePlugin.plugins

本来であれば、build.gradle直下に以下のように書くものです。

build.gradle
gradlePlugin {
    plugins {
        //plugin parameters
    }

位置は変わりますが、named('【プラグインID】')の中へ書くことで同等の効果となり書き方も同様です。この際、IDは生成済みとなるため上書きしないでください。
プラグイン固有のdisplayNameやdescriptionを設定してください。

説明

Precompiled script pluginsは、各プラグイン定義がされるのが各種gradleコマンドを実行する際に動的に行われます。そのため起動直後には各プラグイン用の定義がありません。
逆にgradlePlugin.pluginsを書いてしまうと動的に行われる設定と二重定義になり落ちます。
その対策として、各プラグイン用の定義が生成された上で、それらへの修正として定義を混ぜ込みます。
具体的にはextractPluginRequestsの実行後に定義が完了しているため、蒸気のような記述となります。

pluginBundle

スタンドアロンプラグインと同様です。

3.プラグインファイルを作る

リファレンスの3段落目To apply ~~に書いてある。
ディレクトリはsrc/main/groovy
ファイル名は【プラグインID】.gradle

例えば、plugin IDがmy.java-library-conventionだと、ファイル名はmy.java-library-convention.gradleになる。
同様に「IDを決める」のところの例で出したio.github.johndoe.mypluginだとio.github.johndoe.myplugin.gradleになる。

参考先

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?