SlideShare a Scribd company logo
Nebula:(Ne)lix's(OSS(Gradle(
Plugins
Rob$Spieldenner$@robspieldenner
@NebulaPlugins
h"p://ne(lix.github.io/
h"ps://github.com/nebula4plugins
Why$Open$Source
• Help&out&other&teams&using&gradle
• Contribu5ons
• Hiring
Current'Plugin'Build/Publish'
Infrastructure
• Github
• branch,per,gradle,release
• version,based,on,gradle,release,2.4.x,for,
gradle:2.4
• Cloudbees,(Jenkins),for,CI,and,release:,Job,DSL,to,
setup,a,snapshot,and,release,job,per,branch
• Bintray,(jcenter),as,host
New$Plugin$Build/Publish$
Infrastructure
• Github
• matrix,tes/ng,for,different,versions,of,gradle
• seman/c,versioning
• Travis,CI,for,CI,,release,on,github,tag
• Bintray,(jcenter),as,host
• Publish,with,gradle,plugin,portal
Support,(Issues,(etc.
• Github(issues
• We(love(pull(requests
• or(breaking(tests
• gi6er.im
Naming'Scheme
• nebula():)indicates)a)highly)opinionated)plugin
• gradle():)indicates)we)believe)everyone)would)
benefit)from)the)func;onality
nebula'test
h"ps://github.com/nebula4plugins/nebula4test
nebula'test
will$be$replaced$by$Gradle$TestKit
• ProjectSpec
• PluginProjectSpec
• Integra2onSpec
• Dependency6Genera2on
PluginProjectSpec
import nebula.test.PluginProjectSpec
class PluginExampleSpec extends PluginProjectSpec {
@Override
String getPluginName() { 'plugin-example' }
def ‘check task is setup’() {
when:
project.plugins.apply(PluginExample)
then:
def exampleTask = project.tasks.get(‘example’)
exampleTask.exampleProperty == 'myConfiguredValue'
}
}
Integra(onSpec
import nebula.test.IntegrationSpec
class MyExampleSpec extends IntegrationSpec {
def 'example test'() {
buildFile << """
apply plugin: 'java'
${applyPlugin(MyExamplePlugin)}
""".stripIndent()
when:
def results = runTasksSuccessfully('exampleTask')
then:
results.wasExecuted(':exampleTask')
results.wasUpToDate(':dependentTask')
results.standardOutput.contains 'Example task output'
fileExists('build/example/mycache.tmp')
}
}
Dependency(Genera,on
import nebula.test.dependencies.DependencyGraphBuilder
import nebula.test.dependencies.ModuleBuilder
// ...
def 'generate dependencies'() {
given:
def graph = new DependencyGraphBuilder().addModule('g0:a0:0.0.1')
.addModule('g1', 'a1', '1.0.1')
.addModule(new ModuleBuilder('g2:a2:2.0.1').build())
.addModule(new ModuleBuilder('g3:a3:3.0.1')
.addDependency('g4:a4:4.0.1')
.addDependency('g5', 'a5', '5.0.1').build()
).build()
def generator = new GradleDependencyGenerator(graph)
def mavenRepo = generator.generateTestMavenRepo()
// def ivyRepo = generator.generateTestIvyRepo()
// rest of test
}
nebula'core
h"ps://github.com/nebula4plugins/nebula4core
nebula'core
U"lity'tasks'for'other'plugins
• Download
• Unzip
• Untar
nebula'project'plugin
h"ps://github.com/nebula4plugins/nebula4project4
plugin
nebula'project'plugin
• Opinionated+about+what+a+responsible+project+
should+do
• Builds+Javadoc+and+Sources+jars
• Record+informa<on+about+the+build+and+stores+it+
in+the+.jar,+via+gradle@info@plugin
• Easy+specifica<on+of+people+involved+in+a+project+
via+gradle@contacts@plugin
• facets+to+ease+seDng+up+new+source+sets
gradle'ne)lixoss'project'
plugin
h"ps://github.com/nebula4plugins/gradle4ne7lixoss4
project4plugin
gradle'ne)lixoss'project'plugin
• Provide)release)process
• Configure)publishing
• Recommend)license)headers
• Add)some)error)handling)for)javadoc)in)jdk8
gradle'ospackage'plugin
h"ps://github.com/nebula4plugins/gradle4ospackage4
plugin
gradle'ospackage'plugin
apply plugin: 'nebula.ospackage'
ospackage {
installUtils file('scripts/utils.sh')
preInstall file('scripts/preInstall.sh')
postInstall file('scripts/postInstall.sh')
preUninstall 'touch /tmp/myfile'
postUninstall file('scripts/postUninstall.sh')
requires('qux')
into '/'
from 'root'
}
buildRpm {
requires('bar', '2.2', GREATER | EQUAL)
requires('baz', '1.0.1', LESS)
link('/etc/init.d/foo’, '/opt/foo/bin/foo.init')
}
buildDeb {
requires('bat', '1.0.1')
link('/etc/init.d/foo', '/opt/foo/bin/foo.upstart')
}
nebula'ospackage'plugin
h"ps://github.com/nebula4plugins/nebula4ospackage4
plugin
nebula'ospackage'plugin
• nebula.nebula-ospackage-daemon"#"Setup"
daemontools"in"a"system"package
• nebula.nebula-ospackage-application"#"
Put"contents"of"applica7on"zip"into"/opt/
$applica7onName
• nebula.nebula-ospackage-application-
daemon"#"Combine"the"above,"auto"setup"
daemontools"script"for"the"applica7on"plugin"
output
gradle'dependency'lock'
plugin
h"ps://github.com/nebula4plugins/gradle4
dependency4lock4plugin
gradle'dependency'lock'plugin
plugins {
id 'nebula.dependency-lock' version '3.0.0'
id 'groovy'
}
repositories { jcenter() }
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.+'
compile 'com.google.guava:guava:latest.release'
testCompile 'junit:junit:[4.0, 5.0)'
}
gradle'dependency'lock'plugin
./gradlew generateLock saveLock
{
"com.google.guava:guava": { "locked": "19.0-rc1", "requested": "latest.release" },
"junit:junit": { "locked": "4.12", "requested": "[4.0, 5.0)" },
"org.codehaus.groovy:groovy-all": { "locked": "2.4.4", "requested": "2.+" }
}
gradle'dependency'lock'plugin
plugins {
id 'nebula.dependency-lock' version '3.0.0'
id 'groovy'
}
dependencyLock {
includeTransitives = true
}
repositories { jcenter() }
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.+'
compile 'com.google.guava:guava:latest.release'
testCompile 'junit:junit:[4.0, 5.0)'
}
gradle'dependency'lock'plugin
./gradlew generateLock saveLock
{
"com.google.guava:guava": { "locked": "19.0-rc1", "requested": "latest.release" },
"junit:junit": { "locked": "4.12", "requested": "[4.0, 5.0)" },
"org.codehaus.groovy:groovy-all": { "locked": "2.4.4", "requested": "2.+" },
"org.hamcrest:hamcrest-core": { "locked": "1.3", "transitive": [ "junit:junit" ] }
}
gradle'extra'configura/ons'
plugin
h"ps://github.com/nebula4plugins/gradle4extra4
configura9ons4plugin
gradle'extra'configura/ons'plugin
apply plugin: 'nebula.provided-base'
dependencies {
provided 'example:providedlib:42.1.2'
}
// ------------------
apply plugin: 'nebula.optional-base'
dependencies {
compile 'example:optionallib:2.3.4', optional
}
nebula'publishing'plugin
h"ps://github.com/nebula4plugins/nebula4publishing4
plugin
nebula'publishing'plugin
• nebula.javadoc.jar
• nebula.source.jar
• nebula.test.jar
nebula'publishing'plugin
• nebula.maven+apache+license.proper3es
• nebula.maven+manifest.proper3es
• nebula.maven+base+publish.proper3es
• nebula.maven+dependencies.proper3es
• nebula.maven+resolved.proper3es
• nebula.maven+scm.proper3es
nebula'publishing'plugin
nebula.maven*publishing/nebula.ivy*publishing
• resolve(dynamic(versions(to(specific
• dependencies(for(war
• add(licenses
• add(manifest/informa6onal(proper6es
nebula'publishing'plugin
<name>gradle-dependency-lock-plugin</name>
<description>Gradle plugin to allow locking of dynamic dependency versions</description>
<properties>
<nebula_Manifest_Version>1.0</nebula_Manifest_Version>
<nebula_Implementation_Title>com.netflix.nebula#gradle-dependency-lock-plugin;2.2.3</nebula_Implementation_Title>
<nebula_Implementation_Version>2.2.3</nebula_Implementation_Version>
<nebula_Built_By>jenkins</nebula_Built_By>
<nebula_Build_Date>2015-04-02_10:02:13</nebula_Build_Date>
<nebula_Gradle_Version>2.2.1</nebula_Gradle_Version>
<nebula_Module_Origin>git@github.com:nebula-plugins/gradle-dependency-lock-plugin.git</nebula_Module_Origin>
<nebula_Change>f91b5ad</nebula_Change>
<nebula_Build_Id>2015-04-02_16-59-13</nebula_Build_Id>
<nebula_Created_By>1.7.0_60-b19 (Oracle Corporation)</nebula_Created_By>
<nebula_Build_Java_Version>1.7.0_60</nebula_Build_Java_Version>
<nebula_X_Compile_Target_JDK>1.7</nebula_X_Compile_Target_JDK>
<nebula_X_Compile_Source_JDK>1.7</nebula_X_Compile_Source_JDK>
</properties>
<scm>
<url>git@github.com:nebula-plugins/gradle-dependency-lock-plugin.git</url>
<connection>scm:git@github.com:nebula-plugins/gradle-dependency-lock-plugin.git</connection>
</scm>
<developers>
<developer>
<id>exampleuser</id>
<name>Example User</name>
<email>example@example.email</email>
</developer>
</developers>
gradle'metrics'plugin
h"ps://github.com/nebula4plugins/gradle4metrics4
plugin
gradle'metrics'plugin
• Stopped(development(in(favor(of(gradle.com
• Ela5csearch(index(of(each(build
• Info(<(Gradle(start(parameters,(system(proper5es(
and(environment(variables.(SCM(and(GIT(
informa5on(if(the(gradle<info<plugin(has(been(
applied
• Project(<(name(and(version
• Events(<(configura5on,(dependency(resolu5on,(
task(execu5on
gradle'override'plugin
h"ps://github.com/nebula4plugins/gradle4override4
plugin
gradle'override'plugin
apply plugin: 'nebula.nebula-override'
class MyExtension {
String myProp
}
example {
myProp = 'hello'
}
$ ./gradlew -Doverride.example.myProb=newValue <task>
$ ./gradlew -Doverride.sourceCompatibility=1.7 <task>
gradle'blacklist'plugin
h"ps://github.com/nebula4plugins/gradle4blacklist4
plugin
gradle'blacklist'plugin
blacklist {
translate {
map 'nebula', 'com.netflix.nebula'
map 'commons-lang:commons-lang:2.6', 'org.apache.commons:commons-lang3:3.3.2'
}
flag {
block 'org.foo:bar:3.4'
warn group: 'com.company', name: 'baz', version: '1.2'
}
}
Other&Plugins
• gradle(dependency(recommender(plugin
• nebula(clojure(plugin
• nebula(bintray(plugin
• gradle(stash(plugin
• gradle(contacts(plugin
• gradle(scm(plugin
• gradle(git(scm(plugin
Ques%ons
Ne#lix'is'Hiring
• Build'Tools'+'Full'Stack'Engineer
• h8ps://jobs.ne?lix.com/

More Related Content

What's hot

Intro to Git for Drupal 7
Intro to Git for Drupal 7Intro to Git for Drupal 7
Intro to Git for Drupal 7
Chris Caple
 
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
Puppet
 
Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new buildIgor Khotin
 
Groovy in the Cloud
Groovy in the CloudGroovy in the Cloud
Groovy in the Cloud
Daniel Woods
 
High Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring BootHigh Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring Boot
Daniel Woods
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
Mu Chun Wang
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
Bo-Yi Wu
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsJames Williams
 
Puppeteerのお話
Puppeteerのお話Puppeteerのお話
Puppeteerのお話
Shinji Kobayashi
 
Desarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y AzureDesarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y Azure
Patxi Gortázar
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Ontico
 
Dockercon EU 2014
Dockercon EU 2014Dockercon EU 2014
Dockercon EU 2014
Rafe Colton
 
CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)
Soshi Nemoto
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsBo-Yi Wu
 
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker imagesRootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
Daniel Garcia (a.k.a cr0hn)
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
Knoldus Inc.
 
FOSDEM 2017: GitLab CI
FOSDEM 2017:  GitLab CIFOSDEM 2017:  GitLab CI
FOSDEM 2017: GitLab CI
OlinData
 
Gr8conf - The Groovy Ecosystem Revisited
Gr8conf - The Groovy Ecosystem RevisitedGr8conf - The Groovy Ecosystem Revisited
Gr8conf - The Groovy Ecosystem RevisitedAndres Almiray
 
GitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLabGitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLab
Shinu Suresh
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015
Giorgio Cefaro
 

What's hot (20)

Intro to Git for Drupal 7
Intro to Git for Drupal 7Intro to Git for Drupal 7
Intro to Git for Drupal 7
 
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
 
Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new build
 
Groovy in the Cloud
Groovy in the CloudGroovy in the Cloud
Groovy in the Cloud
 
High Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring BootHigh Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring Boot
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web Apps
 
Puppeteerのお話
Puppeteerのお話Puppeteerのお話
Puppeteerのお話
 
Desarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y AzureDesarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y Azure
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
 
Dockercon EU 2014
Dockercon EU 2014Dockercon EU 2014
Dockercon EU 2014
 
CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
 
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker imagesRootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
FOSDEM 2017: GitLab CI
FOSDEM 2017:  GitLab CIFOSDEM 2017:  GitLab CI
FOSDEM 2017: GitLab CI
 
Gr8conf - The Groovy Ecosystem Revisited
Gr8conf - The Groovy Ecosystem RevisitedGr8conf - The Groovy Ecosystem Revisited
Gr8conf - The Groovy Ecosystem Revisited
 
GitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLabGitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLab
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015
 

Viewers also liked

Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016
Кирилл Толкачёв
 
Assignment 3 Resubmit SD
Assignment 3 Resubmit SDAssignment 3 Resubmit SD
Assignment 3 Resubmit SDSarah Dixon
 
3
33
Presentació jornada entre iguals 18des
Presentació jornada entre iguals 18desPresentació jornada entre iguals 18des
Presentació jornada entre iguals 18des
Associació SalutiFamília
 
CONOCIMIENTOS BASICOS DEL FUTBOL
CONOCIMIENTOS BASICOS DEL FUTBOLCONOCIMIENTOS BASICOS DEL FUTBOL
CONOCIMIENTOS BASICOS DEL FUTBOL
gressly22
 
Online Teaching Best Practices
Online Teaching Best PracticesOnline Teaching Best Practices
Online Teaching Best Practices
Kristen Sosulski
 
Catch up
Catch upCatch up
Catch up
Eloise10
 
Web Analytics - WebTrends
Web Analytics - WebTrendsWeb Analytics - WebTrends
Web Analytics - WebTrends
Chenhui James Zheng
 
Relaciones internacionales de la Gran Colombia
Relaciones internacionales de la Gran ColombiaRelaciones internacionales de la Gran Colombia
Relaciones internacionales de la Gran Colombia
Marian Bermudez
 
Market and promotion
Market and promotionMarket and promotion
Market and promotion
Eloise10
 
Agile Economics: Budgets, Contracts, Capitalization
Agile Economics: Budgets, Contracts, CapitalizationAgile Economics: Budgets, Contracts, Capitalization
Agile Economics: Budgets, Contracts, Capitalization
Pavel Dabrytski
 

Viewers also liked (11)

Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016
 
Assignment 3 Resubmit SD
Assignment 3 Resubmit SDAssignment 3 Resubmit SD
Assignment 3 Resubmit SD
 
3
33
3
 
Presentació jornada entre iguals 18des
Presentació jornada entre iguals 18desPresentació jornada entre iguals 18des
Presentació jornada entre iguals 18des
 
CONOCIMIENTOS BASICOS DEL FUTBOL
CONOCIMIENTOS BASICOS DEL FUTBOLCONOCIMIENTOS BASICOS DEL FUTBOL
CONOCIMIENTOS BASICOS DEL FUTBOL
 
Online Teaching Best Practices
Online Teaching Best PracticesOnline Teaching Best Practices
Online Teaching Best Practices
 
Catch up
Catch upCatch up
Catch up
 
Web Analytics - WebTrends
Web Analytics - WebTrendsWeb Analytics - WebTrends
Web Analytics - WebTrends
 
Relaciones internacionales de la Gran Colombia
Relaciones internacionales de la Gran ColombiaRelaciones internacionales de la Gran Colombia
Relaciones internacionales de la Gran Colombia
 
Market and promotion
Market and promotionMarket and promotion
Market and promotion
 
Agile Economics: Budgets, Contracts, Capitalization
Agile Economics: Budgets, Contracts, CapitalizationAgile Economics: Budgets, Contracts, Capitalization
Agile Economics: Budgets, Contracts, Capitalization
 

Similar to Nebula: Netflix's OSS Gradle Plugins

Gradle
GradleGradle
Gradle plugins, take it to the next level
Gradle plugins, take it to the next levelGradle plugins, take it to the next level
Gradle plugins, take it to the next level
Eyal Lezmy
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
Fabio Fumarola
 
10 Cool Facts about Gradle
10 Cool Facts about Gradle10 Cool Facts about Gradle
10 Cool Facts about GradleEvgeny Goldin
 
Continuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCPContinuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCP
KAI CHU CHUNG
 
ASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & dockerASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & docker
Jürgen Gutsch
 
Gdg cloud taipei ddt meetup #53 buildpack
Gdg cloud taipei ddt meetup #53 buildpackGdg cloud taipei ddt meetup #53 buildpack
Gdg cloud taipei ddt meetup #53 buildpack
KAI CHU CHUNG
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP Libraries
Pantheon
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolved
Bhagwat Kumar
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
Schalk Cronjé
 
GIT, RVM, FIRST HEROKU APP
GIT, RVM, FIRST HEROKU APPGIT, RVM, FIRST HEROKU APP
GIT, RVM, FIRST HEROKU APP
Pavel Tyk
 
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginMastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Xavier Hallade
 
How to Build & Use OpenCL on OpenCV & Android NDK
How to Build & Use OpenCL on OpenCV & Android NDKHow to Build & Use OpenCL on OpenCV & Android NDK
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
simonscholz
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
Schalk Cronjé
 
GitLab on OpenShift
GitLab on OpenShiftGitLab on OpenShift
Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overview
Kevin He
 
SydJS.com
SydJS.comSydJS.com
SydJS.com
Lachlan Hardy
 
Job DSL Plugin for Jenkins
Job DSL Plugin for JenkinsJob DSL Plugin for Jenkins
Job DSL Plugin for Jenkins
Niels Bech Nielsen
 
Gradle how to's
Gradle how to'sGradle how to's
Gradle how to's
Sergiy Beley
 

Similar to Nebula: Netflix's OSS Gradle Plugins (20)

Gradle
GradleGradle
Gradle
 
Gradle plugins, take it to the next level
Gradle plugins, take it to the next levelGradle plugins, take it to the next level
Gradle plugins, take it to the next level
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
10 Cool Facts about Gradle
10 Cool Facts about Gradle10 Cool Facts about Gradle
10 Cool Facts about Gradle
 
Continuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCPContinuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCP
 
ASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & dockerASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & docker
 
Gdg cloud taipei ddt meetup #53 buildpack
Gdg cloud taipei ddt meetup #53 buildpackGdg cloud taipei ddt meetup #53 buildpack
Gdg cloud taipei ddt meetup #53 buildpack
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP Libraries
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolved
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
 
GIT, RVM, FIRST HEROKU APP
GIT, RVM, FIRST HEROKU APPGIT, RVM, FIRST HEROKU APP
GIT, RVM, FIRST HEROKU APP
 
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginMastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
 
How to Build & Use OpenCL on OpenCV & Android NDK
How to Build & Use OpenCL on OpenCV & Android NDKHow to Build & Use OpenCL on OpenCV & Android NDK
How to Build & Use OpenCL on OpenCV & Android NDK
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
GitLab on OpenShift
GitLab on OpenShiftGitLab on OpenShift
GitLab on OpenShift
 
Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overview
 
SydJS.com
SydJS.comSydJS.com
SydJS.com
 
Job DSL Plugin for Jenkins
Job DSL Plugin for JenkinsJob DSL Plugin for Jenkins
Job DSL Plugin for Jenkins
 
Gradle how to's
Gradle how to'sGradle how to's
Gradle how to's
 

Recently uploaded

在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
mz5nrf0n
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
kalichargn70th171
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
Roshan Dwivedi
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 

Recently uploaded (20)

在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 

Nebula: Netflix's OSS Gradle Plugins