creating gradle plugins

36
Creating Gradle Plugins Annyce Davis - @brwngrldev

Upload: annyce-davis

Post on 14-Apr-2017

679 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Creating Gradle Plugins

Creating Gradle Plugins

Annyce Davis - @brwngrldev

Page 2: Creating Gradle Plugins

@brwngrldev

Without Plugins

Page 3: Creating Gradle Plugins

@brwngrldev

With Plugins

Page 4: Creating Gradle Plugins

Overview• Plugin Skeleton

• Dependencies

• Plugin.groovy

• CustomTask.groovy

• Publishing

@brwngrldev

Page 5: Creating Gradle Plugins

Plugin Skeleton

@brwngrldev

Page 6: Creating Gradle Plugins

Plugin Skeleton

Page 7: Creating Gradle Plugins

Plugin SkeletonHow Gradle finds the Plugin Implementation

Page 8: Creating Gradle Plugins

Dependencies

@brwngrldev

apply plugin: ‘groovy'

dependencies { compile gradleApi() compile localGroovy() }

Page 9: Creating Gradle Plugins

Plugin.groovyImplement the Plugin interface and override apply method

class CustomPlugin implements Plugin<Project> {

@Override void apply(Project project) {

} }

Page 10: Creating Gradle Plugins

QualityChecksPlugin.groovyImplement the Plugin interface and override apply method

Page 11: Creating Gradle Plugins

Apply Method

@brwngrldev

Creates the tasks for the plugin and performs any setup

Page 12: Creating Gradle Plugins

Project Extension

@brwngrldev

Allows the user to customize the behavior of the plugin

Page 13: Creating Gradle Plugins

Project Extension

@brwngrldev

Back in the application’s build.gradle file…

Page 14: Creating Gradle Plugins

Creating tasks

@brwngrldev

Give it a name and a type

Page 15: Creating Gradle Plugins

@brwngrldev

Page 16: Creating Gradle Plugins

CustomTask.groovy

@brwngrldev

class CustomTask extends DefaultTask {

}

Page 17: Creating Gradle Plugins

CustomTask.groovy

@brwngrldev

class CustomTask extends DefaultTask {

@TaskAction def defaultAction() {

} }

Page 18: Creating Gradle Plugins

CustomTask.groovy

@brwngrldev

class CustomTask extends DefaultTask {

@TaskAction def defaultAction() {

< do your cool stuff >

} }

Page 19: Creating Gradle Plugins

So far…• Plugin Skeleton

• Dependencies

• Plugin.groovy

• CustomTask.groovy

@brwngrldev

Page 20: Creating Gradle Plugins

Questions?

Page 21: Creating Gradle Plugins

Publishing

@brwngrldev

Page 22: Creating Gradle Plugins

Publishingbuildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "com.gradle.publish:plugin-publish-plugin:0.9.2" } }

apply plugin: 'com.gradle.plugin-publish'

Page 23: Creating Gradle Plugins

version = "0.1.3" group = "info.adavis"

Page 24: Creating Gradle Plugins

version = "0.1.3" group = "info.adavis"

pluginBundle { website = 'https://github.com/adavis/quality-checks' vcsUrl = 'https://github.com/adavis/quality-checks.git' description = 'Gradle Plugin for…’ tags = ['Checkstyle', 'FindBugs', 'PMD']

}

Page 25: Creating Gradle Plugins

version = "0.1.3" group = "info.adavis"

pluginBundle { website = 'https://github.com/adavis/quality-checks' vcsUrl = 'https://github.com/adavis/quality-checks.git' description = 'Gradle Plugin for…’ tags = ['Checkstyle', 'FindBugs', 'PMD']

plugins { qualityChecksPlugin { id = 'info.adavis.qualitychecks' displayName = 'Quality Checks Plugin' } } }

Page 26: Creating Gradle Plugins

Publishing

@brwngrldev

Once your Plugin is published on the Gradle portal

Page 27: Creating Gradle Plugins

We’re done…

@brwngrldev

WRONG!

Page 28: Creating Gradle Plugins

We’re done…

@brwngrldev

TESTS

Page 29: Creating Gradle Plugins

Testing

@brwngrldev

You can use JUnit and the ProjectBuilder for most testing

Page 30: Creating Gradle Plugins

Testing

@brwngrldev

@Test void shouldBeAbleToCreateTask() { assertTrue(task instanceof WriteConfigFileTask) }

Page 31: Creating Gradle Plugins

Testing

@brwngrldev

@Test void shouldBeAbleToCreateTask() { assertTrue(task instanceof WriteConfigFileTask) }

@Test void pluginShouldBeApplied() { def project = ProjectBuilder.builder().build()

project.apply(plugin: QualityChecksPlugin)

assertNotNull(project.tasks.findByName(‘mytask’)) }

Page 32: Creating Gradle Plugins

Bonus: README

@brwngrldev

Page 33: Creating Gradle Plugins

Bonus: README

@brwngrldev

Page 34: Creating Gradle Plugins

Summary• Helps avoid copy/paste horror

• Simple project structure

• Extending DefaultTask

• Testing techniques

• Easy to publish

@brwngrldev

Page 35: Creating Gradle Plugins

Next Steps✓Sample: https://git.io/vzJ2w

✓Sample: https://git.io/vzJwS

✓Applaud 😉

@brwngrldev

Page 36: Creating Gradle Plugins

Thanks!

@brwngrldev

+AnnyceDavis

www.adavis.info

@brwngrldev