Last active
October 15, 2018 20:28
-
-
Save ksaua/74d75901458235f48da1 to your computer and use it in GitHub Desktop.
Gradle plugin which uses itself
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MyPlugin implements Plugin<Project> { | |
@Override | |
void apply(Project project) { | |
// Here you do whatever you normally want in your plugin | |
} | |
} | |
Awesome. I have spend hours figuring out how to do this. My use case is for testing the plugins i write. Thanks for sharing.
<3
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Pretty awesome - just modified unofficial bintray plugin to publish itself! https://github.com/ysb33r/bintray