Skip to content

Instantly share code, notes, and snippets.

@jwermuth
Forked from ksaua/build.gradle
Created January 21, 2018 19:18
Show Gist options
  • Save jwermuth/9a2ccbbbab954c48a2bce2f44a33e77d to your computer and use it in GitHub Desktop.
Save jwermuth/9a2ccbbbab954c48a2bce2f44a33e77d to your computer and use it in GitHub Desktop.
Gradle plugin which uses itself
// Let's say we have a gradle plugin. Now we want that gradle plugin project to actually use the exact plugin.
// There are probably multiple ways we can bootstrap this. One way is to build the jar, and use that, but that's boring.
// Here we show how we can have the plugin-project use the actual plugin we are building.
// :: We load the groovy script on runtime, only then are we able to apply the plugin
// Setup the groovy classpath. Start with our own files
def classpaths = [file('src/main/groovy').absolutePath, file('src/main/resources').absolutePath]
// The groovy script engine wants a string array
String[] classpathArray = classpaths.toArray(new String[classpaths.size()]);
// Start a groovy script engine with our classpaths
def engine = new GroovyScriptEngine(classpathArray, this.getClass().getClassLoader())
// Now we can load the plugin script
def pluginClass = engine.loadScriptByName('org/example/MyPlugin.groovy')
apply plugin: pluginClass
class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
// Here you do whatever you normally want in your plugin
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment