diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-05-07 13:34:51 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-05-07 13:34:51 +0200 |
| commit | efea162372be99beb4de90929629c7ebccdb8d84 (patch) | |
| tree | 068a38613d29bdbd4fe39aee90fde86343c656f3 /buildSrc | |
| parent | 324d7eccf5892a509dc76c7abcecf20fec09a877 (diff) | |
build: Access version catalog from buildSrc
This change adds a workaround to the build configuration so that we can
access the version catalog from pre-compiled scripts in buildSrc. In
this way, we can use the version catalog everywhere.
This workaround is necessary until
https://github.com/gradle/gradle/issues/15383 is fixed.
Diffstat (limited to 'buildSrc')
| -rw-r--r-- | buildSrc/src/main/kotlin/Libs.kt (renamed from buildSrc/src/main/kotlin/Versions.kt) | 40 | ||||
| -rw-r--r-- | buildSrc/src/main/kotlin/ProjectExtensions.kt | 34 | ||||
| -rw-r--r-- | buildSrc/src/main/kotlin/benchmark-conventions.gradle.kts | 9 | ||||
| -rw-r--r-- | buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts | 4 | ||||
| -rw-r--r-- | buildSrc/src/main/kotlin/testing-conventions.gradle.kts | 10 |
5 files changed, 30 insertions, 67 deletions
diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Libs.kt index bb187a40..9567845a 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Libs.kt @@ -24,41 +24,35 @@ import org.gradle.api.JavaVersion import org.gradle.api.Project -import org.gradle.kotlin.dsl.extra +import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.kotlin.dsl.getByType import kotlin.properties.ReadOnlyProperty /** - * This class contains the versions of the dependencies shared by the different - * subprojects. + * This class makes the version catalog accessible for the build scripts until Gradle adds support for it. + * + * See https://github.com/gradle/gradle/issues/15383 */ -public class Versions(private val project: Project) { +@Suppress("UnstableApiUsage") +public class Libs(project: Project) { + /** + * The version catalog of the project. + */ + private val versionCatalog = project.extensions.getByType(VersionCatalogsExtension::class).named("libs") + /** * A delegate for obtaining configuration values from a [Project] instance. */ - private fun version(name: String? = null): ReadOnlyProperty<Versions, String> = + private fun lib(name: String? = null): ReadOnlyProperty<Libs, String> = ReadOnlyProperty { _, property -> get(name ?: property.name) } - val junitJupiter by version(name = "junit-jupiter") - val junitPlatform by version(name = "junit-platform") - val mockk by version() - - val slf4j by version() - val kotlinLogging by version(name = "kotlin-logging") - val log4j by version() - val config by version() - - val kotlinxCoroutines by version(name = "kotlinx-coroutines") - - val otelApi by version(name = "opentelemetry-api") - val otelApiMetrics by version(name = "opentelemetry-api-metrics") - val otelSdk by version(name = "opentelemetry-sdk") - val otelSdkMetrics by version(name = "opentelemetry-sdk-metrics") - - /** * Obtain the version for the specified [dependency][name]. */ - operator fun get(name: String) = project.extra.get("$name.version") as String + operator fun get(name: String): String { + val dep = versionCatalog.findDependency(name).get().get() + return "${dep.module.group}:${dep.module.name}:${dep.versionConstraint.displayName}" + } companion object { /** diff --git a/buildSrc/src/main/kotlin/ProjectExtensions.kt b/buildSrc/src/main/kotlin/ProjectExtensions.kt deleted file mode 100644 index ddf643f6..00000000 --- a/buildSrc/src/main/kotlin/ProjectExtensions.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2021 AtLarge Research - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -import org.gradle.api.Project -import org.gradle.kotlin.dsl.extra -import org.gradle.kotlin.dsl.provideDelegate - -/** - * Obtain the [Versions] object for the specified [Project] instance. - */ -val Project.versions: Versions - get() { - var versions: Versions? by rootProject.extra - return versions ?: Versions(rootProject).also { versions = it } - } diff --git a/buildSrc/src/main/kotlin/benchmark-conventions.gradle.kts b/buildSrc/src/main/kotlin/benchmark-conventions.gradle.kts index 8623e8da..4e73d4d3 100644 --- a/buildSrc/src/main/kotlin/benchmark-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/benchmark-conventions.gradle.kts @@ -55,13 +55,14 @@ benchmark { } } +dependencies { + val libs = Libs(project) + implementation(libs["kotlinx-benchmark-runtime-jvm"]) +} + // Workaround for https://github.com/Kotlin/kotlinx-benchmark/issues/39 afterEvaluate { tasks.named<org.gradle.jvm.tasks.Jar>("jmhBenchmarkJar") { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } } - -dependencies { - implementation("org.jetbrains.kotlinx:kotlinx-benchmark-runtime-jvm:0.3.0") -} diff --git a/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts b/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts index 7bab52fc..703e9938 100644 --- a/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/kotlin-conventions.gradle.kts @@ -34,11 +34,11 @@ repositories { } java { - sourceCompatibility = Versions.jvmTarget + sourceCompatibility = Libs.jvmTarget } tasks.withType<KotlinCompile>().configureEach { - kotlinOptions.jvmTarget = Versions.jvmTarget.toString() + kotlinOptions.jvmTarget = Libs.jvmTarget.toString() kotlinOptions.useIR = true kotlinOptions.freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn" } diff --git a/buildSrc/src/main/kotlin/testing-conventions.gradle.kts b/buildSrc/src/main/kotlin/testing-conventions.gradle.kts index f129c282..7d344500 100644 --- a/buildSrc/src/main/kotlin/testing-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/testing-conventions.gradle.kts @@ -34,8 +34,10 @@ tasks.test { } dependencies { - testImplementation("org.junit.jupiter:junit-jupiter-api:${versions.junitJupiter}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${versions.junitJupiter}") - testImplementation("org.junit.jupiter:junit-jupiter-params:${versions.junitJupiter}") - testImplementation("io.mockk:mockk:${versions.mockk}") + val libs = Libs(project) + + testImplementation(libs["junit-jupiter-api"]) + testImplementation(libs["junit-jupiter-params"]) + testImplementation(libs["mockk"]) + testRuntimeOnly(libs["junit-jupiter-engine"]) } |
