I try to build the project using gradle composite build. I already follow existing code and guide on the internet but the issue happen when I try to build the project
Unresolved reference: libs
Here is my project code
settings.gradle.kts(project)
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
}
includeBuild("build-logic/convention")
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.buildFileName = "build.gradle.kts"
rootProject.name = "basic"
include(":app")
include(":data:repository")
include(":data:local-datasource")
include(":data:remote-datasource")
include(":data:dto")
include(":domain")
include(":domain:model")
include(":domain:usecase")
include(":features")
settings.gradle.kts(build-logic module):
dependencyResolutionManagement {
repositories {
google()
gradlePluginPortal()
mavenCentral()
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
rootProject.name = "build-logic"
include(":convention")
build.gradle.kts(convention module inside build-logic
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
`version-catalog`
`kotlin-dsl`
`java-gradle-plugin`
}
repositories {
google()
gradlePluginPortal()
mavenCentral()
}
group = "com.basic.convention"
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_17
}
}
dependencies {
compileOnly(libs.android.gradlePlugin)
compileOnly(libs.android.tools.common)
compileOnly(libs.kotlin.gradlePlugin)
compileOnly(libs.ksp.gradlePlugin)
compileOnly(libs.room.gradlePlugin)
}
tasks {
validatePlugins {
enableStricterValidation = true
failOnWarning = true
}
}
gradlePlugin {
plugins {
register("androidApplication") {
id = "basic.application"
implementationClass = "AndroidApplicationConventionPlugin"
}
register("androidFeature") {
id = "basic.feature"
implementationClass = "AndroidFeatureConventionPlugin"
}
register("androidRoom") {
id = "basic.room"
implementationClass = "AndroidRoomConventionPlugin"
}
}
}
build.gradle.kts(app module)
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.jetbrains.kotlin.android)
alias(libs.plugins.basic.android.application)
}
libs.version.toml
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" }
android-tools-common = { group = "com.android.tools", name = "common", version.ref = "androidTools" }
compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" }
kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" }
room-gradlePlugin = { group = "androidx.room", name = "room-gradle-plugin", version.ref = "room" }
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" }
hilt-core = { group = "com.google.dagger", name = "hilt-core", version.ref = "hilt" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
jetbrains-kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "jetbrainsKotlinJvm" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
room = { id = "androidx.room", version.ref = "room" }
basic-android-application = { id = "basic.application", version = "unspecified" }
basic-android-feature = { id = "basic.feature", version = "unspecified" }
basic-android-room = { id = "basic.room", version = "unspecified" }
My project dependencies
I don't see any issues with my code, hope you guys know where is the issue. I had search for a few hours and the issue still occurred. Big thanks
I think, you cannot use the version catalogs by default in pre-compiled script plugins.
Since these plugins are pre-compiled, I think Gradle needs to compile the version catalogs first to make them type-safe by generating code
However there are a lot of workarounds for the same, mentioned in this
What has worked for me, is adding this weird looking dependency in your buildSrc
or similar build logic containing folder
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
See, what works for you
NowInAndroid, has PR for the same, which was closed, because this is definitely a hack or workaround and if you see the above issue, it's not going to be supported by Gradle, very soon