gradleプラグインを作ってみる (1)
gradleプラグイン開発な辺りを勉強してみた
gradleプラグインの構造について
├── build.gradle └── src └── main ├── groovy │ └── kinjouj │ └── gradle │ └── plugin │ ├── HelloWorldPlugin.groovy │ └── HelloWorldTask.groovy └── resources └── META-INF └── gradle-plugins └── helloworld.properties
的な感じでビルドしたあとのjarで
├─── META-INF │ ├── MANIFEST.MF │ └── gradle-plugins │ └── helloworld.properties └── kinjouj └── gradle └── plugin ├── HelloWorldPlugin.class └── HelloWorldTask.class
的な感じで作る。META-INF/gradle-plugins/プラグイン名.propertiesで定義したのがプラグインとして利用できるようになるっぽい。つまり上記の場合にはプラグイン名はhelloworldになる
まぁプラグインのソースを一つづつ書いていく
build.gradle (プラグイン側)
apply plugin: "groovy"
apply plugin: "maven"
group "kinjouj.gradle"
dependencies {
compile localGroovy()
compile gradleApi()
}
groovyとgradleなAPIの依存性が必要なのでlocalGroovyとgradleApiを利用する
src/main/resources/META-INF/gradle-plugins/helloworld.properties
implementation-class=kinjouj.gradle.plugin.HelloWorldPlugin
implementation-classにプラグインクラスを指定するだけ
src/main/groovy/kinjouj/gradle/plugin/HelloWorldPlugin.groovy
package kinjouj.gradle.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class HelloWorldPlugin implements Plugin<project> {
@Override
void apply(Project project) {
HelloWorldTask task = (HelloWorldTask)project.task(
"hello",
type: HelloWorldTask
)
}
}
helloタスクを動かす際にHelloWorldTaskクラスを利用するようにする等
src/main/groovy/kinjouj/gradle/plugin/HelloWorldTask.groovy
package kinjouj.gradle.plugin
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class HelloWorldTask extends DefaultTask {
private String message = "hello world"
void setMessage(String message) {
this.message = message
}
@TaskAction
void runTask() {
println message
}
}
DefaultTaskを継承しつつ、@TaskActionアノテーションを付与したメソッドが動作する模様。で.gradleファイル上でタスクを動かすにあたってパラメーターとかを利用する場合には、セッターメソッドを定義しとけば良いっぽい
んまぁここまでがプラグインのソース辺りなのでビルドしてinstallしておけば使えるようになる
build.gradle
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath "kinjouj.gradle:helloworld-plugin:+"
}
}
apply plugin: "helloworld"
hello {
message "hoge"
}
な感じで使う。でgradle tasksをすると
:tasks Other tasks ----------- hello
な感じでhelloタスクが使えるようになる。で上記のbuild.gradle上でhelloタスクのmessageパラメーターを設定しているのでそれが利用される
んまぁgradleのプラグイン開発の初歩辺りはこんなもんで