# Sharing convention plugins with build logic build Sample

version 7.6.6-20260801035835+0000

- Groovy DSL

- Kotlin DSL

| 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.