Convention
Convention Module¶
The convention module provides a suite of Gradle plugins for standard build configurations across Kotlin, Java, Android, JavaScript, and Minecraft projects.
See also: Property Module for details on the property system used by these plugins.
Properties¶
Most plugins read configuration from gradle.properties using the klibs. prefix. Below is a complete list of properties used by the convention plugins.
Java properties¶
Project properties¶
klibs.project.name=MyProject
klibs.project.group=com.example.project
klibs.project.version.string=0.0.1-SNAPSHOT
klibs.project.version.code=1
klibs.project.description=This is my template project!
klibs.project.url=https://www.yourwebsite.com
# Split by [,] symbol. Format: id|name|email
klibs.project.developers=makeevrserg|Makeev Roman|makeevrserg@gmail.com
Publish properties¶
klibs.publish.name=MyProject
klibs.publish.description=My publish project description
klibs.publish.repo.org=Your-Organization
klibs.publish.repo.name=YourRepoName
klibs.publish.license=Apache-2.0
klibs.publish.groupId=io.github.yourname
Android properties¶
klibs.android.sdk.compile=36
klibs.android.sdk.min=24
klibs.android.sdk.target=36
klibs.android.kotlinCompilerExtensionVersion=1.5.1
Secret properties (local.properties or environment)¶
For CI/CD environment variables, replace
.with_(e.g.klibs_KEY_PASSWORD).
Getting pre-defined property models¶
// JInfo - Java version configuration
val jinfo = project.requireJinfo
// jinfo.jsource: JavaVersion, jinfo.jtarget: JavaVersion, jinfo.ktarget: JvmTarget
// ProjectInfo - Project metadata
val projectInfo = project.requireProjectInfo
// projectInfo.name, .group, .versionString, .description, .url, .developersList
// PublishInfo - Publication metadata
val publishInfo = project.requirePublishInfo
// publishInfo.libraryName, .description, .gitHubOrganization, .gitHubName, .license, .publishGroupId
// publishInfo.gitHubUrl, .sshUrl (derived)
// AndroidSdkInfo - Android SDK versions
val androidSdkInfo = project.requireAndroidSdkInfo
// androidSdkInfo.compile, .min, .target
// Version code
val versionCode: Int = project.requireVersionCode
// Hierarchy group - auto-generated namespace from module path
val namespace: String = project.hierarchyGroup
// e.g. :components:core:resource -> "com.example.components.core.resource"
Plugins¶
Detekt¶
ID: ru.astrainteractive.gradleplugin.detekt
Applies and configures Detekt static code analysis with a bundled detekt.yml configuration.
- Applies
dev.detektplugin - Registers
detektFormattask with auto-correction enabled - Writes bundled
detekt.ymlto root project build directory - Configures HTML reports, parallel execution, source includes/excludes
- Adds
detekt-rules-ktlint-wrapperandcompose-rules:detektplugins - Sets JVM target from
klibs.java.target
Dokka Module¶
ID: ru.astrainteractive.gradleplugin.dokka.module
Configures Dokka documentation generation for individual modules.
- Applies
org.jetbrains.dokkaplugin - Sets module name from
project.name - JDK version from
klibs.java.target - Supports
README.mdas module documentation entry point viaDokkaTaskPartial
Dokka Root¶
ID: ru.astrainteractive.gradleplugin.dokka.root
Configures multi-module Dokka documentation generation for root projects.
- Applies
org.jetbrains.dokkaplugin - Configures
DokkaMultiModuleTaskwithREADME.mdordokka.mdas entry points - Sets module name from
project.name
Java Version¶
ID: ru.astrainteractive.gradleplugin.java.version
Configures Java source/target compatibility and Kotlin JVM target.
- Sets
JavaPluginExtension.sourceCompatibilityfromklibs.java.source - Sets
JavaPluginExtension.targetCompatibilityfromklibs.java.target - Configures all
KotlinCompiletasks JVM target fromklibs.java.ktarget
Java UTF-8¶
ID: ru.astrainteractive.gradleplugin.java.utf8
Sets UTF-8 encoding for all Java compilation tasks.
- Sets
options.encoding = "UTF-8"for allJavaCompiletasks
Module Info¶
ID: ru.astrainteractive.gradleplugin.rootinfo
Applies project group, version, and description from properties.
- Sets
project.groupfromklibs.project.group - Sets
project.versionfromklibs.project.version.string - Sets
project.descriptionfromklibs.project.description - Warns if applied to a non-root project
Publication¶
ID: ru.astrainteractive.gradleplugin.publication
Configures Maven Central publication via Vanniktech Maven Publish.
- Applies
com.vanniktech.maven.publishplugin - Configures
publishToMavenCentral(automaticRelease = false) - Sets coordinates from
klibs.publish.groupId,project.name,klibs.project.version.string - Signs all publications
- Generates full POM (name, description, URL, license, developers, SCM) from project and publish properties
Required secret properties in local.properties:
OSSRH_USERNAME=your_username
OSSRH_PASSWORD=your_password
SIGNING_KEY=your_signing_key
SIGNING_KEY_ID=your_key_id
SIGNING_PASSWORD=your_signing_password
Kobweb Resources¶
ID: ru.astrainteractive.gradleplugin.js.kobweb.resources
Manages JavaScript resources copying for Kobweb applications.
plugins {
alias(libs.plugins.klibs.gradle.js.kobweb.resources)
}
jsResources {
projectsPaths = listOf(":shared", ":frontend")
}
- Creates
jsResourcesextension withprojectsPathsconfiguration - Registers
copyJsResourcestask copying fromsrc/jsMain/resources/publicof referenced projects - Wires Kobweb tasks (
KobwebStartTask,KobwebGenerateSiteIndexTask, etc.) to depend oncopyJsResources
Webpack No Source Maps¶
ID: ru.astrainteractive.gradleplugin.js.webpack.nosourcemaps
Disables source maps in Kotlin/JS Webpack builds.
- Sets
sourceMaps = falsefor allKotlinWebpacktasks
Tasks¶
SecretFileTask¶
A custom task that decodes a Base64 string into a file. Useful for secrets like keystore.jks or google-services.json in CI/CD.
tasks.register<SecretFileTask>("generateKeystore") {
targetFile.set(file("keystore.jks"))
base64.set(secretProperty("KEYSTORE_BASE64").requireString)
}
For custom property access, PropertyValue extensions, and caching details, see Property Module.