SlideShare a Scribd company logo
CREATING
BETTER BUILDS
WITH GRADLE
ANDRES ALMIRAY
@AALMIRAY
@aalmiray
HTTP://BIT.LY/KORDAMP-WORKSHOP
@aalmiray
@aalmiray
POM.XML
• POM stands for Project Object Model.
• A POM file defines both how a project should be built and how
consumers may interact with the published artifacts.
• Maven delivers lots of features out of the box thanks to the
hierarchical nature of the POM.
• The Maven Super POM provides default configuration for
common plugins such as compiler, resources, surefire, etc.
• The strict nature of the structure found in the POM allows
anyone to understand the configuration.
@aalmiray
@aalmiray
BUILD.GRADLE
• Gradle build files only specify how projects should be built.
• The definition for consumers is delivered through a generated
POM file.
• Gradle builds are highly customizable, resulting in a wider
range of build patterns.


CAN WE HAVE A
MAVEN-LIKE
STRUCTURE ON TOP
OF GRADLE?






HTTP://GITHUB.COM/AALMIRAY/KORDAMP-GRADLE-PLUGINS







HTTPS://AALMIRAY.GITHUB.IO/KORDAMP-GRADLE-PLUGINS
FILE

STRUCTURE
@aalmiray
STANDARD (MAVEN)
.
!"" pom.xml
!"" guide
#   $"" pom.xml
!"" project1
#   $"" pom.xml
$"" project2
    $"" pom.xml
@aalmiray
STANDARD (MAVEN)
<project>
  <groupId>com.acme</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.0</version>
  <modules>
    <module>guide</module>
    <module>project1</module>
    <module>project2</module>
  </modules>
</project>
<project>
  <parent>
    <groupId>com.acme</groupId>
    <artifactId>parent</
artifactId>
    <version>0.0.0</version>
  </parent>
</project>
@aalmiray
TWO-LEVEL (MAVEN)
.
!"" pom.xml
!"" docs
#   $"" guide
#       $"" pom.xml
$"" subprojects
    !"" project1
    #   $"" pom.xml
    $"" project2
        $"" pom.xml
@aalmiray
TWO-LEVEL (MAVEN)
<project>
  <groupId>com.acme</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.0</version>
  <modules>
    <module>docs/guide</module>
    <module>subprojects/project2</module>
    <module>subprojects/project3</module>
  </modules>
</project>
<project>
  <parent>
    <groupId>com.acme</groupId>
    <artifactId>parent</
artifactId>
    <version>0.0.0</version>
<path>../../pom.xml</path>
  </parent>
</project>
@aalmiray
MULTI-LEVEL (MAVEN)
.
!"" pom.xml
!"" guide
#   $"" pom.xml
$"" subprojects
    !"" project1
    #   $"" pom.xml
    $"" project2
        $"" pom.xml
@aalmiray
MULTI-LEVEL (MAVEN)
<project>
  <groupId>com.acme</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.0</version>
  <modules>
    <module>project1</module>
    <module>subprojects/project2</module>
    <module>subprojects/project3</module>
  </modules>
</project>
<project>
  <parent>
    <groupId>com.acme</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.0</version>
  </parent>
</project>
<project>
  <parent>
    <groupId>com.acme</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.0</version>
<path>../../pom.xml</path>
  </parent>
</project>
@aalmiray
STANDARD (GRADLE)
.
!"" build.gradle
!"" guide
#   $"" build.gradle
!"" project1
#   $"" build.gradle
!"" project2
#   $"" build.gradle
$"" settings.gradle
.
!"" build.gradle
!"" guide
#   $"" guide.gradle
!"" project1
#   $"" project1.gradle
!"" project2
#   $"" project2.gradle
$"" settings.gradle
@aalmiray
STANDARD (GRADLE)
$ cat settings.gradle
include 'guide'
include 'project1'
include 'project2'
$ cat settings.gradle
include 'guide'
include 'project1'
include 'project2’
project(':guide').buildFileName =
'guide.gradle'
project(':project1').buildFileName
=
'project1.gradle'
project(':project2').buildFileName
=
'project2.gradle'
@aalmiray
STANDARD (GRADLE)
$ cat settings.gradle
buildscript {

repositories {

gradlePluginPortal()

}

dependencies {

classpath ‘org.kordamp.gradle:settings-gradle-plugin:0.27.0

}

}


apply plugin: 'org.kordamp.gradle.settings'



projects {

layout = 'standard'

}
@aalmiray
TWO-LEVEL (GRADLE)
.
!"" build.gradle
!"" docs
#   $"" guide
#       $"" build.gradle
$"" subprojects
    !"" project1
    #   $"" build.gradle
    $"" project2
        $"" build.gradle
.
!"" build.gradle
!"" docs
#   $"" guide
#       $"" guide.gradle
$"" subprojects
    !"" project1
    #   $"" project1.gradle
    $"" project2
        $"" project2.gradle
@aalmiray
TWO-LEVEL (GRADLE)
$ cat settings.gradle
include 'guide'
include 'project1'
include 'project2'
project(':guide').projectDir =
new File(“$settingsDir/docs/guide”)
project(':project1').projectDir =
new File(“$settingsDir/subprojects/project1”)
project(':project2').projectDir =
new File(“$settingsDir/subprojects/project2”)
@aalmiray
TWO-LEVEL (GRADLE)
$ cat settings.gradle
buildscript {

repositories {

gradlePluginPortal()

}

dependencies {

classpath ‘org.kordamp.gradle:settings-gradle-plugin:0.27.0

}

}


apply plugin: 'org.kordamp.gradle.settings'



projects {

layout = 'two-level'
directories = ['docs', 'subprojects']

}
@aalmiray
MULTI-LEVEL (GRADLE)
.
!"" build.gradle
!"" guide
#   $"" build.gradle
$"" subprojects
    !"" project1
    #   $"" build.gradle
    $"" project2
        $"" build.gradle
.
!"" build.gradle
!"" guide
#   $"" guide.gradle
$"" subprojects
    !"" project1
    #   $"" project1.gradle
    $"" project2
        $"" project2.gradle
@aalmiray
MULTI-LEVEL (GRADLE)
$ cat settings.gradle
buildscript {

repositories {

gradlePluginPortal()

}

dependencies {

classpath ‘org.kordamp.gradle:settings-gradle-plugin:0.27.0

}

}


apply plugin: 'org.kordamp.gradle.settings'



projects {

layout = 'multi-level'

directories = [

'guide',

'subprojects/project1',

'subprojects/project2'

]

}
LAB 01



01-PROJECT-LAYOUT


PROJECT
DSL
@aalmiray
THE PROJECT PLUGIN
plugins {

id 'org.kordamp.gradle.project' version ‘0.27.0’
}



config {

release = (rootProject.findProperty('release') ?: false).toBoolean()



info {

name = 'Sample'

vendor = 'Acme'

description = 'Sample project'



links {

website = 'https://github.com/joecool/sample'

issueTracker = 'https://github.com/joecool/sample/issues'

scm = 'https://github.com/joecool/sample.git'

}



people {

person {

id = 'joecool'

name = 'Joe Cool'

roles = ['developer']

}

}

}
…
}
@aalmiray
PROVIDED BEHAVIOR
• The project plugin applies the following plugins
• org.kordamp.gradle.base
• org.kordamp.gradle.build-info
• org.kordamp.gradle.minpom
• org.kordamp.gradle.jar
• org.kordamp.gradle.source-jar
• org.kordamp.gradle.javadoc
• org.kordamp.gradle.license
• org.kordamp.gradle.jacoco
• org.kordamp.gradle.publishing
• org.kordamp.gradle.testing
• org.kordamp.gradle.apidoc
• org.kordamp.gradle.source-stats
• org.kordamp.gradle.source-html
• org.kordamp.gradle.bintray
LAB 02



02-PROJECT-INSIGHT
@aalmiray
ADDITIONAL PLUGINS
• The following plugins can be applied explicitly
• org.kordamp.gradle.kotlindoc
• org.kordamp.gradle.scaladoc
• org.kordamp.gradle.source-xref
• org.kordamp.gradle.bom
• org.kordamp.gradle.clirr
• org.kordamp.gradle.guide
• org.kordamp.gradle.integration-test
• org.kordamp.gradle.functional-test
LAB 03



03-PROJECT-TESTING
SUPER POM
@aalmiray
THE MAVEN SUPER POM
• POMs are hierarchical.
• The chain resolves all the way to the top where you find the
Maven Super POM.
• Super POM configures lots of default & useful behavior.
@aalmiray
THE GRADLE SUPER POM
• Gradle does not offer this behavior out of the box.
• But it can be “faked” using a custom plugin.
• The plugin applies the default behavior that consuming projects
require.
LAB 04



04-PARENT-POM
@aalmiray
@aalmiray
HTTP://ANDRESALMIRAY.COM/NEWSLETTER





HTTP://ANDRESALMIRAY.COM/EDITORIAL
@aalmiray
THANK YOU!
ANDRES ALMIRAY
@AALMIRAY

More Related Content

PDF
Building modular applications with the Java Platform Module System and Layrry
PDF
Building modular applications with JPMS and Layrry
PDF
Apache Groovy's Metaprogramming Options and You
PDF
What I wish I knew about maven years ago
PDF
Taking Micronaut out for a spin
PDF
Web a Quebec - JS Debugging
PDF
Laravel Introduction
PPTX
Play! Framework for JavaEE Developers
Building modular applications with the Java Platform Module System and Layrry
Building modular applications with JPMS and Layrry
Apache Groovy's Metaprogramming Options and You
What I wish I knew about maven years ago
Taking Micronaut out for a spin
Web a Quebec - JS Debugging
Laravel Introduction
Play! Framework for JavaEE Developers

What's hot (20)

PPTX
Laravel introduction
PPTX
Maven
PDF
Coding Your Way to Java 12
PPT
Build Your Own CMS with Apache Sling
PDF
All the Laravel things: up and running to making $$
PPT
PPTX
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
PDF
Introduction in the play framework
PDF
Web application development using Play Framework (with Java)
PDF
Play Framework: The Basics
PDF
Apache Maven In 10 Slides
PPT
Introduction to Play Framework
PDF
Maven tutorial for beginners
PPTX
CollabSphere 2018 - Java in Domino After XPages
PDF
Laravel
ODP
Projects In Laravel : Learn Laravel Building 10 Projects
PPTX
Intro to Laravel
PDF
FITC - Here Be Dragons: Advanced JavaScript Debugging
PDF
Play Framework workshop: full stack java web app
PDF
An Intense Overview of the React Ecosystem
Laravel introduction
Maven
Coding Your Way to Java 12
Build Your Own CMS with Apache Sling
All the Laravel things: up and running to making $$
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Introduction in the play framework
Web application development using Play Framework (with Java)
Play Framework: The Basics
Apache Maven In 10 Slides
Introduction to Play Framework
Maven tutorial for beginners
CollabSphere 2018 - Java in Domino After XPages
Laravel
Projects In Laravel : Learn Laravel Building 10 Projects
Intro to Laravel
FITC - Here Be Dragons: Advanced JavaScript Debugging
Play Framework workshop: full stack java web app
An Intense Overview of the React Ecosystem
Ad

Similar to Creating Better Builds with Gradle (20)

PDF
Andres Almiray - Gradle Ex Machina - Codemotion Rome 2019
PDF
Gradle ex-machina
PDF
Gradle Ex Machina - Devoxx 2019
PDF
Making the most of your gradle build - vJUG24 2017
PDF
Making the most of your gradle build - BaselOne 2017
PPT
Gradle: The Build system you have been waiting for
PDF
Making the Most of Your Gradle Build
PDF
Making the Most of Your Gradle Build
PPTX
Faster Java EE Builds with Gradle
PDF
Gradle - time for a new build
PPTX
Faster Java EE Builds with Gradle
PDF
Introduction in Apache Maven2
PDF
Making the most of your gradle build - Gr8Conf 2017
PDF
Making the most of your gradle build - Greach 2017
ODP
Gradle - time for another build
PDF
Apache Maven - eXo TN presentation
PDF
ICONUK 2015 - Gradle Up!
PPTX
Faster java ee builds with gradle [con4921]
PPTX
How maven makes your development group look like a bunch of professionals.
PDF
Gradle Introduction
Andres Almiray - Gradle Ex Machina - Codemotion Rome 2019
Gradle ex-machina
Gradle Ex Machina - Devoxx 2019
Making the most of your gradle build - vJUG24 2017
Making the most of your gradle build - BaselOne 2017
Gradle: The Build system you have been waiting for
Making the Most of Your Gradle Build
Making the Most of Your Gradle Build
Faster Java EE Builds with Gradle
Gradle - time for a new build
Faster Java EE Builds with Gradle
Introduction in Apache Maven2
Making the most of your gradle build - Gr8Conf 2017
Making the most of your gradle build - Greach 2017
Gradle - time for another build
Apache Maven - eXo TN presentation
ICONUK 2015 - Gradle Up!
Faster java ee builds with gradle [con4921]
How maven makes your development group look like a bunch of professionals.
Gradle Introduction
Ad

More from Andres Almiray (20)

PDF
Dealing with JSON in the relational world
PDF
Deploying to production with confidence 🚀
PDF
Going beyond ORMs with JSON Relational Duality Views
PDF
Setting up data driven tests with Java tools
PDF
Creando, creciendo, y manteniendo una comunidad de codigo abierto
PDF
Liberando a produccion con confianza
PDF
Liberando a produccion con confidencia
PDF
OracleDB Ecosystem for Java Developers
PDF
Softcon.ph - Maven Puzzlers
PDF
Maven Puzzlers
PDF
Oracle Database Ecosystem for Java Developers
PDF
JReleaser - Releasing at the speed of light
PDF
Going Reactive with g rpc
PDF
What I wish I knew about Maven years ago
PDF
The impact of sci fi in tech
PDF
Interacting with the Oracle Cloud Java SDK with Gradle
PPTX
Go Java, Go!
PDF
Going Reactive with gRPC
PDF
The JavaFX Ecosystem
PDF
Understanding Reactive Programming
Dealing with JSON in the relational world
Deploying to production with confidence 🚀
Going beyond ORMs with JSON Relational Duality Views
Setting up data driven tests with Java tools
Creando, creciendo, y manteniendo una comunidad de codigo abierto
Liberando a produccion con confianza
Liberando a produccion con confidencia
OracleDB Ecosystem for Java Developers
Softcon.ph - Maven Puzzlers
Maven Puzzlers
Oracle Database Ecosystem for Java Developers
JReleaser - Releasing at the speed of light
Going Reactive with g rpc
What I wish I knew about Maven years ago
The impact of sci fi in tech
Interacting with the Oracle Cloud Java SDK with Gradle
Go Java, Go!
Going Reactive with gRPC
The JavaFX Ecosystem
Understanding Reactive Programming

Recently uploaded (20)

PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Big Data Technologies - Introduction.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
Spectroscopy.pptx food analysis technology
DOCX
The AUB Centre for AI in Media Proposal.docx
Understanding_Digital_Forensics_Presentation.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
Review of recent advances in non-invasive hemoglobin estimation
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Network Security Unit 5.pdf for BCA BBA.
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
NewMind AI Weekly Chronicles - August'25 Week I
Programs and apps: productivity, graphics, security and other tools
Spectral efficient network and resource selection model in 5G networks
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Big Data Technologies - Introduction.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Spectroscopy.pptx food analysis technology
The AUB Centre for AI in Media Proposal.docx

Creating Better Builds with Gradle

  • 5. @aalmiray POM.XML • POM stands for Project Object Model. • A POM file defines both how a project should be built and how consumers may interact with the published artifacts. • Maven delivers lots of features out of the box thanks to the hierarchical nature of the POM. • The Maven Super POM provides default configuration for common plugins such as compiler, resources, surefire, etc. • The strict nature of the structure found in the POM allows anyone to understand the configuration.
  • 7. @aalmiray BUILD.GRADLE • Gradle build files only specify how projects should be built. • The definition for consumers is delivered through a generated POM file. • Gradle builds are highly customizable, resulting in a wider range of build patterns.
  • 8. 
 CAN WE HAVE A MAVEN-LIKE STRUCTURE ON TOP OF GRADLE?
  • 11. @aalmiray STANDARD (MAVEN) . !"" pom.xml !"" guide #   $"" pom.xml !"" project1 #   $"" pom.xml $"" project2     $"" pom.xml
  • 12. @aalmiray STANDARD (MAVEN) <project>   <groupId>com.acme</groupId>   <artifactId>parent</artifactId>   <version>0.0.0</version>   <modules>     <module>guide</module>     <module>project1</module>     <module>project2</module>   </modules> </project> <project>   <parent>     <groupId>com.acme</groupId>     <artifactId>parent</ artifactId>     <version>0.0.0</version>   </parent> </project>
  • 13. @aalmiray TWO-LEVEL (MAVEN) . !"" pom.xml !"" docs #   $"" guide #       $"" pom.xml $"" subprojects     !"" project1     #   $"" pom.xml     $"" project2         $"" pom.xml
  • 14. @aalmiray TWO-LEVEL (MAVEN) <project>   <groupId>com.acme</groupId>   <artifactId>parent</artifactId>   <version>0.0.0</version>   <modules>     <module>docs/guide</module>     <module>subprojects/project2</module>     <module>subprojects/project3</module>   </modules> </project> <project>   <parent>     <groupId>com.acme</groupId>     <artifactId>parent</ artifactId>     <version>0.0.0</version> <path>../../pom.xml</path>   </parent> </project>
  • 15. @aalmiray MULTI-LEVEL (MAVEN) . !"" pom.xml !"" guide #   $"" pom.xml $"" subprojects     !"" project1     #   $"" pom.xml     $"" project2         $"" pom.xml
  • 16. @aalmiray MULTI-LEVEL (MAVEN) <project>   <groupId>com.acme</groupId>   <artifactId>parent</artifactId>   <version>0.0.0</version>   <modules>     <module>project1</module>     <module>subprojects/project2</module>     <module>subprojects/project3</module>   </modules> </project> <project>   <parent>     <groupId>com.acme</groupId>     <artifactId>parent</artifactId>     <version>0.0.0</version>   </parent> </project> <project>   <parent>     <groupId>com.acme</groupId>     <artifactId>parent</artifactId>     <version>0.0.0</version> <path>../../pom.xml</path>   </parent> </project>
  • 17. @aalmiray STANDARD (GRADLE) . !"" build.gradle !"" guide #   $"" build.gradle !"" project1 #   $"" build.gradle !"" project2 #   $"" build.gradle $"" settings.gradle . !"" build.gradle !"" guide #   $"" guide.gradle !"" project1 #   $"" project1.gradle !"" project2 #   $"" project2.gradle $"" settings.gradle
  • 18. @aalmiray STANDARD (GRADLE) $ cat settings.gradle include 'guide' include 'project1' include 'project2' $ cat settings.gradle include 'guide' include 'project1' include 'project2’ project(':guide').buildFileName = 'guide.gradle' project(':project1').buildFileName = 'project1.gradle' project(':project2').buildFileName = 'project2.gradle'
  • 19. @aalmiray STANDARD (GRADLE) $ cat settings.gradle buildscript {
 repositories {
 gradlePluginPortal()
 }
 dependencies {
 classpath ‘org.kordamp.gradle:settings-gradle-plugin:0.27.0
 }
 } 
 apply plugin: 'org.kordamp.gradle.settings'
 
 projects {
 layout = 'standard'
 }
  • 20. @aalmiray TWO-LEVEL (GRADLE) . !"" build.gradle !"" docs #   $"" guide #       $"" build.gradle $"" subprojects     !"" project1     #   $"" build.gradle     $"" project2         $"" build.gradle . !"" build.gradle !"" docs #   $"" guide #       $"" guide.gradle $"" subprojects     !"" project1     #   $"" project1.gradle     $"" project2         $"" project2.gradle
  • 21. @aalmiray TWO-LEVEL (GRADLE) $ cat settings.gradle include 'guide' include 'project1' include 'project2' project(':guide').projectDir = new File(“$settingsDir/docs/guide”) project(':project1').projectDir = new File(“$settingsDir/subprojects/project1”) project(':project2').projectDir = new File(“$settingsDir/subprojects/project2”)
  • 22. @aalmiray TWO-LEVEL (GRADLE) $ cat settings.gradle buildscript {
 repositories {
 gradlePluginPortal()
 }
 dependencies {
 classpath ‘org.kordamp.gradle:settings-gradle-plugin:0.27.0
 }
 } 
 apply plugin: 'org.kordamp.gradle.settings'
 
 projects {
 layout = 'two-level' directories = ['docs', 'subprojects']
 }
  • 23. @aalmiray MULTI-LEVEL (GRADLE) . !"" build.gradle !"" guide #   $"" build.gradle $"" subprojects     !"" project1     #   $"" build.gradle     $"" project2         $"" build.gradle . !"" build.gradle !"" guide #   $"" guide.gradle $"" subprojects     !"" project1     #   $"" project1.gradle     $"" project2         $"" project2.gradle
  • 24. @aalmiray MULTI-LEVEL (GRADLE) $ cat settings.gradle buildscript {
 repositories {
 gradlePluginPortal()
 }
 dependencies {
 classpath ‘org.kordamp.gradle:settings-gradle-plugin:0.27.0
 }
 } 
 apply plugin: 'org.kordamp.gradle.settings'
 
 projects {
 layout = 'multi-level'
 directories = [
 'guide',
 'subprojects/project1',
 'subprojects/project2'
 ]
 }
  • 27. @aalmiray THE PROJECT PLUGIN plugins {
 id 'org.kordamp.gradle.project' version ‘0.27.0’ }
 
 config {
 release = (rootProject.findProperty('release') ?: false).toBoolean()
 
 info {
 name = 'Sample'
 vendor = 'Acme'
 description = 'Sample project'
 
 links {
 website = 'https://github.com/joecool/sample'
 issueTracker = 'https://github.com/joecool/sample/issues'
 scm = 'https://github.com/joecool/sample.git'
 }
 
 people {
 person {
 id = 'joecool'
 name = 'Joe Cool'
 roles = ['developer']
 }
 }
 } … }
  • 28. @aalmiray PROVIDED BEHAVIOR • The project plugin applies the following plugins • org.kordamp.gradle.base • org.kordamp.gradle.build-info • org.kordamp.gradle.minpom • org.kordamp.gradle.jar • org.kordamp.gradle.source-jar • org.kordamp.gradle.javadoc • org.kordamp.gradle.license • org.kordamp.gradle.jacoco • org.kordamp.gradle.publishing • org.kordamp.gradle.testing • org.kordamp.gradle.apidoc • org.kordamp.gradle.source-stats • org.kordamp.gradle.source-html • org.kordamp.gradle.bintray
  • 30. @aalmiray ADDITIONAL PLUGINS • The following plugins can be applied explicitly • org.kordamp.gradle.kotlindoc • org.kordamp.gradle.scaladoc • org.kordamp.gradle.source-xref • org.kordamp.gradle.bom • org.kordamp.gradle.clirr • org.kordamp.gradle.guide • org.kordamp.gradle.integration-test • org.kordamp.gradle.functional-test
  • 33. @aalmiray THE MAVEN SUPER POM • POMs are hierarchical. • The chain resolves all the way to the top where you find the Maven Super POM. • Super POM configures lots of default & useful behavior.
  • 34. @aalmiray THE GRADLE SUPER POM • Gradle does not offer this behavior out of the box. • But it can be “faked” using a custom plugin. • The plugin applies the default behavior that consuming projects require.