I’m trying to write gradle plugin in my android project. I have a build-logic module which contains convenion module. I wrote a small plugin JvmLibraryPlugin and registered it in the convention module build.gradle.kts file. I’m trying to specify a com.android.tools.build:gradle plugin dependency in the convention module in the build.gradle.kts file, but I’m having trouble keeping the project in sync. I get an error:
I tried changing the version from 7.4.2 to 8.x.x, but it didn’t help. I’m getting a similar error.
I tried changing the gradle JDK in the settings to versions 11, 15, 17, 19, but it didn’t help.
Hierarchy of build-logic modules:
build.gradle.kts(build-logic:convention):
plugins {
`kotlin-dsl`
}
group = "***.android.scandroid_2.buildlogic"
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
tasks.withType<KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
dependencies {
compileOnly(libs.kotlin.gradle.plugin)
compileOnly(libs.android.gradlePlugin)
}
gradlePlugin {
plugins {
register("jvmLibraryPlugin") {
id = "JvmLibraryPlugin"
implementationClass = "JvmLibraryPlugin"
}
}
}
settings.gradle.kts (build-logic):
repositories {
google()
mavenCentral()
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
rootProject.name = "build-logic"
include(":convention")
JvmLibraryPlugin:
class JvmLibraryPlugin : Plugin<Project> {
override fun apply(target: Project) = with(target) {
applyPlugins()
}
private fun Project.applyPlugins() {
with(pluginManager) {
apply("org.jetbrains.kotlin.jvm")
}
}
}
build.gradle.kts (Project):
plugins {
alias(libs.plugins.ksp) apply false
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.jvm) apply false
}
settings.gradle Project
pluginManagement {
includeBuild("build-logic")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "Scandroid_2"
include(":app")
include(":core-db-impl")
include(":core-domain")
include(":feature:settings-impl")
include(":feature:scanner-api")
include(":feature:scanner-impl")
include(":feature:code-list-api")
include(":feature:code-list-impl")
include(":feature:code-details-api")
include(":feature:code-details-impl")
include(":core-ui")
include(":core-resources")
include(":feature:settings-api")
include(":core-utils")
include(":core-executor")
include(":core-mvi")
gradle-wrapper.properties:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-7.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
What am I doing wrong? Tell me please.