Creating a Gradle Custom Plugin with Java

Here’s a basic, stand-alone, Java-based Gradle plugin and the steps to get it working:

  1. Make sure Gradle 1.6 or higher and Java JDK is installed
  2. Create these files below with the directory structure indicated
  3. Change directories to the <projectRoot>/plugin directory
  4. Execute the plugin build: $ gradle uploadArchives This (very important) step compiles the Java code and puts it in your local Maven repo (../repo).
  5. Now execute the consumer script by changing directories to <projectRoot>/consumer
  6. Execute the script that depends on the plugin: $ gradle checkitout

Java Classes

projectRoot/plugin/src/main/java/org/joefernandez/gradle/MyJavaPlugin.java

package org.joefernandez.gradle;

import org.gradle.api.Project;
import org.gradle.api.Plugin;

public class MyJavaPlugin implements Plugin<Project> {

    @Override
    public void apply(Project target) {
        target.task("javaTask");
    }

}

projectRoot/plugin/src/main/java/org/joefernandez/gradle/MyJavaTask.java

package org.joefernandez.gradle;

import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;

public class MyJavaTask extends DefaultTask {

    @TaskAction
    public void javaTask() {
        System.out.println("Hello from MyJavaTask");
    }

}

Plugin Class declaration

projectRoot/plugin/src/main/resources/META-INF/gradle-plugins/test-plugin.properties

implementation-class=org.joefernandez.gradle.MyJavaPlugin

Plugin Build Script

Note the uploadArchives task: You must run this task to make the plugin available to the consumer script.

projectRoot/plugin/build.gradle

apply plugin: 'java'

dependencies {
    compile gradleApi()
}

apply plugin: 'maven'

repositories {
    mavenCentral()
}

dependencies {
    testCompile 'junit:junit:4.11'
}

group = 'org.joefernandez'
version = '1.0-SNAPSHOT'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}

Settings for the Plugin

projectRoot/plugin/settings.gradle

rootProject.name="MyJavaPlugin"

Root script

projectRoot/build.gradle

apply plugin: 'java'

dependencies {
    compile gradleApi()
}

Consumer script

projectRoot/consumer/build.gradle

buildscript {
    repositories {
        maven {
            url uri('../repo')
        }
    }
    dependencies {
        classpath group: 'org.joefernandez',
                   name: 'MyJavaPlugin',
                version: '1.0-SNAPSHOT'
    }
}
apply plugin: 'test-plugin'

task checkitout(type: org.joefernandez.gradle.MyJavaTask) {
    println("running consumer task!")
}

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)