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のプラグイン開発の初歩辺りはこんなもんで