gradle
Gradle 플러그인
수색…
`buildSrc`의 간단한 gradle 플러그인
귀하의 gradle 프로젝트에 대한 커스텀 플러그인 및 DSL 작성 방법에 대한 간단한 예.
이 샘플에서는 플러그인을 만드는 세 가지 방법 중 하나를 사용합니다.
세 가지 방법은 다음과 같습니다.
- 인라인
- buildSrc
- 독립 실행 형 플러그인
이 예제는 buildSrc 폴더에서 플러그인을 만드는 것을 보여줍니다.
이 샘플에서는 다섯 개의 파일을 만듭니다.
// project's build.gradle
build.gradle
// build.gradle to build the `buildSrc` module
buildSrc/build.gradle
// file name will be the plugin name used in the `apply plugin: $name`
// where name would be `sample` in this example
buildSrc/src/main/resources/META-INF/gradle-plugins/sample.properties
// our DSL (Domain Specific Language) model
buildSrc/src/main/groovy/so/docs/gradle/plugin/SampleModel.groovy
// our actual plugin that will read the values from the DSL
buildSrc/src/main/groovy/so/docs/gradle/plugin/SamplePlugin.groovy
build.gradle :
group 'so.docs.gradle'
version '1.0-SNAPSHOT'
apply plugin: 'groovy'
// apply our plugin... calls SamplePlugin#apply(Project)
apply plugin: 'sample'
repositories {
mavenCentral()
}
dependencies {
compile localGroovy()
}
// caller populates the extension model applied above
sample {
product = 'abc'
customer = 'zyx'
}
// dummy task to limit console output for example
task doNothing <<{}
buildSrc / build.gradle
apply plugin: 'groovy'
repositories {
mavenCentral()
}
dependencies {
compile localGroovy()
}
buildSrc / src / main / groovy / so / docs / gradle / plugin / SamplePlugin.groovy :
package so.docs.gradle.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class SamplePlugin implements Plugin<Project> {
@Override
void apply(Project target) {
// create our extension on the project for our model
target.extensions.create('sample', SampleModel)
// once the script has been evaluated the values are available
target.afterEvaluate {
// here we can do whatever we need to with our values
println "populated model: $target.extensions.sample"
}
}
}
buildSrc / src / main / groovy / so / docs / gradle / plugin / SampleModel.groovy :
package so.docs.gradle.plugin
// define our DSL model
class SampleModel {
public String product;
public String customer;
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("SampleModel{");
sb.append("product='").append(product).append('\'');
sb.append(", customer='").append(customer).append('\'');
sb.append('}');
return sb.toString();
}
}
buildSrc / src / main / resources / META-INF / gradle-plugins / sample.properties
implementation-class=so.docs.gradle.plugin.SamplePlugin
이 설정을 사용하여 호출자가 DSL 블록에서 제공 한 값을 볼 수 있습니다
$ ./gradlew -q doNothing
SampleModel{product='abc', customer='zyx'}
독립 실행 형 플러그인을 작성하는 방법
java (Groovy를 사용할 수도 있음)를 사용하여 사용자 정의 독립 실행 형 Gradle 플러그인을 작성하려면 다음과 같은 구조를 작성해야합니다.
plugin
|-- build.gradle
|-- settings.gradle
|-- src
|-- main
| |-- java
| |-- resources
| |-- META-INF
| |-- gradle-plugins
|-- test
그라데이션 설정
build.gradle
파일에서 프로젝트를 정의합니다.
apply plugin: 'java'
apply plugin: 'maven'
dependencies {
compile gradleApi()
}
java
플러그인은 자바 코드를 작성하는 데 사용됩니다.
gradleApi()
종속성은 Gradle 플러그인을 만드는 데 필요한 모든 메소드와 속성을 제공합니다.
settings.gradle
파일에서 다음을 수행하십시오.
rootProject.name = 'myplugin'
Maven에서 이슈 ID 를 정의합니다.
settings.gradle
파일이 플러그인 디렉토리에 없으면 기본값은 디렉토리의 이름이됩니다.
플러그인 만들기
Plugin
인터페이스를 구현하는 src/main/java/org/sample/MyPlugin.java
클래스를 정의하십시오.
import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class MyPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getTasks().create("myTask", MyTask.class);
}
}
DefaultTask
클래스를 확장하는 작업을 정의합니다.
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;
public class MyTask extends DefaultTask {
@TaskAction
public void myTask() {
System.out.println("Hello World");
}
}
플러그인 클래스 선언
에서 META-INF/gradle-plugins
당신이 속성을 만들어야 할 폴더 정의 파일 implementation-class
플러그인 구현 클래스를 식별하는 속성을.
META-INF/gradle-plugins/testplugin.properties
implementation-class=org.sample.MyPlugin.java
속성 filename이 플러그인 ID와 일치합니다 .
빌드하고 게시하는 방법
build.gradle
파일을 변경하여 build.gradle
에서 플러그인을 업로드하기위한 정보를 추가하십시오.
apply plugin: 'java'
apply plugin: 'maven'
dependencies {
compile gradleApi()
}
repositories {
jcenter()
}
group = 'org.sample'
version = '1.0'
uploadArchives {
repositories {
mavenDeployer {
repository(url: mavenLocal().url)
}
}
}
다음 명령을 사용하여 plugin/build.gradle
파일에 정의 된 Maven 레포에 Gradle 플러그인을 빌드하고 게시 할 수 있습니다.
$ ./gradlew clean uploadArchives
이것을 어떻게 사용 하는가
프로젝트의 build.gradle
에서 플러그인 추가를 사용하려면 build.gradle
을 수행하십시오.
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath group: 'org.sample', // Defined in the build.gradle of the plugin
name: 'myplugin', // Defined by the rootProject.name
version: '1.0'
}
}
apply plugin: 'testplugin' // Defined by the properties filename
그런 다음 다음을 사용하여 작업을 호출 할 수 있습니다.
$ ./gradlew myTask