You can open this sample inside an IDE using the IntelliJ native importer or Eclipse Buildship.

This sample shows how convention plugins can be shared and applied to both the production code and the build logic code in buildSrc.

Let’s use the following project structure:

Project structure
├── application
│   ├── src
│   │   └── main
│   └── build.gradle
├── build-conventions
│   ├── src
│   │   ...
│   ├── build.gradle
│   └── settings.gradle
├── buildSrc
│   ├── src
│   │   ...
│   └── build.gradle
├── list
│   ├── src
│   │   ...
│   └── build.gradle
├── utilities
│   ├── src
│   │   ...
│   └── build.gradle
└── settings.gradle
Project structure
├── application
│   ├── src
│   │   └── main
│   └── build.gradle.kts
├── build-conventions
│   ├── src
│   │   ...
│   ├── build.gradle.kts
│   └── settings.gradle.kts
├── buildSrc
│   ├── src
│   │   ...
│   └── build.gradle.kts
├── list
│   ├── src
│   │   ...
│   └── build.gradle.kts
├── utilities
│   ├── src
│   │   ...
│   └── build.gradle.kts
└── settings.gradle.kts

The build is configured as follows:

settings.gradle
rootProject.name = 'sample'
includeBuild 'build-conventions'
include 'application', 'utilities', 'list'
settings.gradle.kts
rootProject.name = "sample"
includeBuild("build-conventions")
include("application", "utilities", "list")

The shared convention plugin myproject.java-conventions is implemented in an included build called build-conventions. The build is then included in the root project’s settings file as seen in the above snippet. For more details about included builds, see Composing Builds chapter.

The myproject.java-conventions plugin is then applied to the buildSrc build:

buildSrc/build.gradle
plugins {
    id 'myproject.java-conventions'
    id 'groovy-gradle-plugin'
}
buildSrc/build.gradle.kts
plugins {
    id("myproject.java-conventions")
    `kotlin-dsl`
}

repositories {
    // for kotlin-dsl plugin
    gradlePluginPortal()
}

It is also applied in the subprojects of the root project:

application/build.gradle
plugins {
    id 'myproject.java-conventions'
    // myproject.greeting is implemented in the buildSrc project that has myproject.java-conventions applied as well
    id 'myproject.greeting'
    id 'application'
}
utilities/build.gradle
plugins {
    id 'myproject.java-conventions'
    id 'java-library'
}
list/build.gradle
plugins {
    id 'myproject.java-conventions'
    id 'java-library'
}
application/build.gradle.kts
plugins {
    id("myproject.java-conventions")
    // myproject.greeting is implemented in the buildSrc project that has myproject.java-conventions applied as well
    id("myproject.greeting")
    id("application")
}
utilities/build.gradle.kts
plugins {
    id("myproject.java-conventions")
    id("java-library")
}
list/build.gradle.kts
plugins {
    id("myproject.java-conventions")
    id("java-library")
}

For more details on authoring custom Gradle plugins, consult the user manual.