From eab0f068821e41b68eb983f631634950a7842f1d Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 19:48:37 +0100 Subject: [PATCH 1/9] Skip a SourceFileSet that belongs to another language `Renderer.renderSources()` filtered the given source set to the files written in the renderer's language, but still called `render()` when the filtered subset was empty because the set belonged to another language. Source and target roots are language-specific directories (e.g. `.../main/java`, `.../main/kotlin`), and every renderer is invoked on every set. So, with Kotlin enabled, a Java renderer received the Kotlin-only set rooted under `.../main/kotlin` and crashed while trying to look up a `.java` file there. Skip rendering when the set has files but none are in the renderer's language. An empty set is still passed through, so renderers that create files from scratch keep working. Remove the now-unnecessary per-file workaround in `UuidJavaRenderer`. Fixes #17. Co-Authored-By: Claude Opus 4.8 --- .../spine/tools/compiler/render/Renderer.kt | 19 +++++- .../tools/compiler/render/RendererSpec.kt | 61 ++++++++++++++++++- .../compiler/test/uuid/UuidJavaRenderer.java | 6 -- 3 files changed, 78 insertions(+), 8 deletions(-) diff --git a/api/src/main/kotlin/io/spine/tools/compiler/render/Renderer.kt b/api/src/main/kotlin/io/spine/tools/compiler/render/Renderer.kt index 6a1fde2532..54390ee180 100644 --- a/api/src/main/kotlin/io/spine/tools/compiler/render/Renderer.kt +++ b/api/src/main/kotlin/io/spine/tools/compiler/render/Renderer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, TeamDev. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,9 +44,26 @@ protected constructor(language: L) : Member(language) { /** * Performs required changes to the given source set. + * + * The renderer processes only the files written in its [language]. + * If [sources] contain files, but none of them are in this language, + * the set is assumed to belong to another language and is left untouched. + * + * An empty source set is still passed to [render] because a renderer may + * create new files from scratch rather than modify the existing ones. */ public fun renderSources(sources: SourceFileSet) { val relevantFiles = sources.subsetWhere { language.matches(it.relativePath) } + + // A non-empty source set with no files in this renderer's `language` + // belongs to another language. Skip it so that, for example, a Java + // renderer does not attempt to create or locate `.java` files under + // a directory that holds generated Kotlin code. + val belongsToAnotherLanguage = relevantFiles.isEmpty && !sources.isEmpty + if (belongsToAnotherLanguage) { + return + } + relevantFiles.prepareForQueries(this) render(relevantFiles) sources.mergeBack(relevantFiles) diff --git a/api/src/test/kotlin/io/spine/tools/compiler/render/RendererSpec.kt b/api/src/test/kotlin/io/spine/tools/compiler/render/RendererSpec.kt index 7d1437bccd..222b724f31 100644 --- a/api/src/test/kotlin/io/spine/tools/compiler/render/RendererSpec.kt +++ b/api/src/test/kotlin/io/spine/tools/compiler/render/RendererSpec.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, TeamDev. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,12 +31,18 @@ import io.spine.tools.compiler.backend.CodeGenerationContext import io.spine.tools.compiler.context.CodegenContext import io.spine.tools.compiler.type.TypeSystem import io.spine.tools.code.AnyLanguage +import io.spine.tools.code.Java +import java.nio.file.Path +import kotlin.io.path.createParentDirectories +import kotlin.io.path.div +import kotlin.io.path.writeText import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertDoesNotThrow import org.junit.jupiter.api.assertThrows +import org.junit.jupiter.api.io.TempDir @DisplayName("`Renderer` should") internal class RendererSpec { @@ -86,6 +92,46 @@ internal class RendererSpec { } } } + + @Test + fun `render a source set written in its language`( + @TempDir input: Path, + @TempDir output: Path + ) { + val javaRenderer = RecordingJavaRenderer() + javaRenderer.renderSources(sourceSetWith("corp/acme/Hello.java", input, output)) + javaRenderer.invoked shouldBe true + } + + @Test + fun `skip a source set written in another language`( + @TempDir input: Path, + @TempDir output: Path + ) { + val javaRenderer = RecordingJavaRenderer() + javaRenderer.renderSources(sourceSetWith("corp/acme/Hello.kt", input, output)) + javaRenderer.invoked shouldBe false + } + + @Test + fun `render an empty source set so that new files can be created`( + @TempDir input: Path, + @TempDir output: Path + ) { + val javaRenderer = RecordingJavaRenderer() + javaRenderer.renderSources(SourceFileSet.create(input, output)) + javaRenderer.invoked shouldBe true + } +} + +/** + * Creates a source set with a single file under the given [input] root, + * placing the processed file into the [output] root. + */ +private fun sourceSetWith(relativePath: String, input: Path, output: Path): SourceFileSet { + val file = (input / relativePath).apply { createParentDirectories() } + file.writeText("// A stub file for testing.") + return SourceFileSet.create(input, output) } private class StubRenderer : Renderer(AnyLanguage) { @@ -97,3 +143,16 @@ private class StubRenderer : Renderer(AnyLanguage) { override fun render(sources: SourceFileSet) = Unit } + +/** + * A [Java] renderer that records whether its [render] method was invoked. + */ +private class RecordingJavaRenderer : Renderer(Java) { + + var invoked: Boolean = false + private set + + override fun render(sources: SourceFileSet) { + invoked = true + } +} diff --git a/tests/compiler-extension/src/main/java/io/spine/tools/compiler/test/uuid/UuidJavaRenderer.java b/tests/compiler-extension/src/main/java/io/spine/tools/compiler/test/uuid/UuidJavaRenderer.java index 32e1f3d392..7f217f69db 100644 --- a/tests/compiler-extension/src/main/java/io/spine/tools/compiler/test/uuid/UuidJavaRenderer.java +++ b/tests/compiler-extension/src/main/java/io/spine/tools/compiler/test/uuid/UuidJavaRenderer.java @@ -79,12 +79,6 @@ protected void render(SourceFileSet sources) { var lines = METHOD_FORMAT.format(className, UUID.class.getName()); var javaFilePath = javaFileOf(typeName, file); - // If there are no Java files, we deal with another language. - // Have this workaround until we get access to the `sourceRoot` property. - if (sources.findFile(javaFilePath).isEmpty()) { - continue; - } - sources.file(javaFilePath) .at(classScope) .withExtraIndentation(INDENT_LEVEL) From bf4ba735bb3fd1f12ef6a58589e5d169a2d2facb Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 19:48:37 +0100 Subject: [PATCH 2/9] Bump version -> `2.0.0-SNAPSHOT.058` Co-Authored-By: Claude Opus 4.8 --- version.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle.kts b/version.gradle.kts index e6860dfd24..7d7b1687d5 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -30,7 +30,7 @@ * This version is also used by integration test projects. * E.g. see `tests/consumer/build.gradle.kts`. */ -val compilerVersion: String by extra("2.0.0-SNAPSHOT.057") +val compilerVersion: String by extra("2.0.0-SNAPSHOT.058") /** * The version, same as [compilerVersion], which is used for publishing From 2007dcb23808375fec8070ed9748173c1af79867 Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 19:48:37 +0100 Subject: [PATCH 3/9] Add memory on stale compiler in integration tests after a version bump Document that an incremental `integrationTest` can launch the previous compiler version after a version bump, because the Gradle plugin's embedded version resource is not regenerated. Verify integration with a clean build. Co-Authored-By: Claude Opus 4.8 --- .agents/memory/MEMORY.md | 1 + ...tests-stale-compiler-after-version-bump.md | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .agents/memory/project/integration-tests-stale-compiler-after-version-bump.md diff --git a/.agents/memory/MEMORY.md b/.agents/memory/MEMORY.md index d99777b3ac..a7e33675f5 100644 --- a/.agents/memory/MEMORY.md +++ b/.agents/memory/MEMORY.md @@ -10,6 +10,7 @@ See [README.md](README.md) for the format and routing rules. ## Project (durable context & rationale) - [which-fixer applied](which-fixer-applied.md) — bulk sweep done; skill now runs in incremental mode +- [integration tests stale compiler after version bump](project/integration-tests-stale-compiler-after-version-bump.md) — after a version bump, clean-build `integrationTest` or it may launch the old compiler ## Reference (external systems) diff --git a/.agents/memory/project/integration-tests-stale-compiler-after-version-bump.md b/.agents/memory/project/integration-tests-stale-compiler-after-version-bump.md new file mode 100644 index 0000000000..3a35840ffc --- /dev/null +++ b/.agents/memory/project/integration-tests-stale-compiler-after-version-bump.md @@ -0,0 +1,33 @@ +--- +name: integration-tests-stale-compiler-after-version-bump +description: After a version bump, an incremental `integrationTest` can silently launch the OLD compiler — clean-build it. +metadata: + type: project + since: 2026-06-30 +--- + +After bumping `compilerVersion` in `version.gradle.kts`, an **incremental** +`./gradlew integrationTest` can silently exercise the **previous** compiler +version, masking or falsely reproducing bugs. + +The Compiler Gradle plugin records its own version in a generated resource +(`version.txt` / `META-INF/io.spine/…compiler-gradle-plugin.meta`), and +`io.spine.tools.compiler.gradle.plugin.Plugin.version` reads it to decide which +`compiler-cli-all:` the consumer launches (`LaunchSpineCompiler`). That +resource is **not reliably regenerated** on an incremental build when only the +version changes, so a freshly published `…-N` plugin can still embed `…-(N-1)` +and launch the older CLI from Maven Local — even though the `…-N` `compiler-api` +/ `compiler-cli-all` jars themselves contain the new bytecode. + +**Why:** the version-bump step changes `version.gradle.kts` but the metadata +task's up-to-date check (and the build cache) may not treat that as an input, so +the stale resource survives. CI never hits this because it builds clean. + +**How to apply:** after a version bump, verify integration with a clean build — +`./gradlew clean integrationTest --no-build-cache` — not an incremental one. To +diagnose which compiler a consumer actually launches, run +`cd tests && ./gradlew :consumer:dependencies --configuration spineCompilerRawArtifact` +and confirm the resolved `compiler-cli-all` version matches `version.gradle.kts`. +To confirm a published jar has the expected code, `javap -l -p` the bundled +`io/spine/tools/compiler/render/*.class` and compare line numbers. The compiler +runs as the `compiler-cli-all` fat jar via the CLI, not the plain api jar. From 263139da8596ab757ecf3153bf7257968e623c5b Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 19:58:45 +0100 Subject: [PATCH 4/9] Update dependency reports Regenerated by the build after bumping the version to 2.0.0-SNAPSHOT.058. Co-Authored-By: Claude Opus 4.8 --- docs/dependencies/dependencies.md | 44 +++++++++++++++---------------- docs/dependencies/pom.xml | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index 3c7981933f..370eec917f 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.tools:compiler-api:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-api:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -1067,14 +1067,14 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-api-tests:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-api-tests:2.0.0-SNAPSHOT.058` ## Runtime ## Compile, tests, and tooling @@ -1444,14 +1444,14 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:23 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:14 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-backend:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-backend:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -2522,14 +2522,14 @@ This report was generated on **Sat Jun 27 23:12:23 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-cli:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-cli:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -3759,14 +3759,14 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-gradle-api:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-gradle-api:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -4783,14 +4783,14 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-gradle-plugin:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-gradle-plugin:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -5851,14 +5851,14 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-jvm:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-jvm:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -6946,14 +6946,14 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-params:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-params:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -8012,14 +8012,14 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-protoc-plugin:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-protoc-plugin:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -8852,14 +8852,14 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-test-env:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-test-env:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -9926,14 +9926,14 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:compiler-testlib:2.0.0-SNAPSHOT.057` +# Dependencies of `io.spine.tools:compiler-testlib:2.0.0-SNAPSHOT.058` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -11107,6 +11107,6 @@ This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Sat Jun 27 23:12:24 WEST 2026** using +This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index 7f838991c9..c373d89d90 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.tools compiler -2.0.0-SNAPSHOT.057 +2.0.0-SNAPSHOT.058 2015 From 3be5fac3a2ac9cf234986902b77edfc509e552ac Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 20:18:42 +0100 Subject: [PATCH 5/9] Keep per-file lookup in UuidJavaRenderer; address review nits Restore the `findFile` guard in `UuidJavaRenderer` (net change vs master is an improved comment). `select(UuidType.class)` returns UUID types from every source root, but a `SourceFileSet` covers a single root; when a Java-producing root other than `java` exists (e.g. `grpc`), `Renderer.renderSources()` still invokes this renderer because the set has `.java` files, so it must skip the types whose file is absent from the current set. Flagged in PR review. The framework guard in `Renderer.renderSources()` still fixes issue #17 (a Kotlin-only set is never passed to a Java renderer) and is covered by `RendererSpec`; the per-file guard handles the orthogonal multi-Java-root case. Review nits: - `Renderer.renderSources` KDoc: singular `sources contains`. - `RendererSpec`: name the `input`/`output` arguments at the `sourceSetWith` call sites to avoid silent swaps of the same-typed `Path` parameters. Co-Authored-By: Claude Opus 4.8 --- .../kotlin/io/spine/tools/compiler/render/Renderer.kt | 2 +- .../io/spine/tools/compiler/render/RendererSpec.kt | 6 ++++-- .../spine/tools/compiler/test/uuid/UuidJavaRenderer.java | 9 +++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/api/src/main/kotlin/io/spine/tools/compiler/render/Renderer.kt b/api/src/main/kotlin/io/spine/tools/compiler/render/Renderer.kt index 54390ee180..f04e8f0a1f 100644 --- a/api/src/main/kotlin/io/spine/tools/compiler/render/Renderer.kt +++ b/api/src/main/kotlin/io/spine/tools/compiler/render/Renderer.kt @@ -46,7 +46,7 @@ protected constructor(language: L) : Member(language) { * Performs required changes to the given source set. * * The renderer processes only the files written in its [language]. - * If [sources] contain files, but none of them are in this language, + * If [sources] contains files but none of them are in this language, * the set is assumed to belong to another language and is left untouched. * * An empty source set is still passed to [render] because a renderer may diff --git a/api/src/test/kotlin/io/spine/tools/compiler/render/RendererSpec.kt b/api/src/test/kotlin/io/spine/tools/compiler/render/RendererSpec.kt index 222b724f31..c539b6d1d4 100644 --- a/api/src/test/kotlin/io/spine/tools/compiler/render/RendererSpec.kt +++ b/api/src/test/kotlin/io/spine/tools/compiler/render/RendererSpec.kt @@ -99,7 +99,8 @@ internal class RendererSpec { @TempDir output: Path ) { val javaRenderer = RecordingJavaRenderer() - javaRenderer.renderSources(sourceSetWith("corp/acme/Hello.java", input, output)) + val sourceSet = sourceSetWith("corp/acme/Hello.java", input = input, output = output) + javaRenderer.renderSources(sourceSet) javaRenderer.invoked shouldBe true } @@ -109,7 +110,8 @@ internal class RendererSpec { @TempDir output: Path ) { val javaRenderer = RecordingJavaRenderer() - javaRenderer.renderSources(sourceSetWith("corp/acme/Hello.kt", input, output)) + val sourceSet = sourceSetWith("corp/acme/Hello.kt", input = input, output = output) + javaRenderer.renderSources(sourceSet) javaRenderer.invoked shouldBe false } diff --git a/tests/compiler-extension/src/main/java/io/spine/tools/compiler/test/uuid/UuidJavaRenderer.java b/tests/compiler-extension/src/main/java/io/spine/tools/compiler/test/uuid/UuidJavaRenderer.java index 7f217f69db..6abd493079 100644 --- a/tests/compiler-extension/src/main/java/io/spine/tools/compiler/test/uuid/UuidJavaRenderer.java +++ b/tests/compiler-extension/src/main/java/io/spine/tools/compiler/test/uuid/UuidJavaRenderer.java @@ -79,6 +79,15 @@ protected void render(SourceFileSet sources) { var lines = METHOD_FORMAT.format(className, UUID.class.getName()); var javaFilePath = javaFileOf(typeName, file); + // `select(UuidType.class)` returns UUID types from every source root, + // but a `SourceFileSet` covers a single root. A type's Java file may + // therefore live in a different Java root than the one being rendered + // (e.g., under `java` while this set holds `grpc` output). Skip the + // types whose file is absent from the current set. + if (sources.findFile(javaFilePath).isEmpty()) { + continue; + } + sources.file(javaFilePath) .at(classScope) .withExtraIndentation(INDENT_LEVEL) From a19c44ba759f602c9c870200584e2f55bbd4b10d Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 20:52:35 +0100 Subject: [PATCH 6/9] Re-trigger CI to clear a flaky build-cache failure In-place re-runs of "Build on Ubuntu" kept hitting the known feature-branch build-cache flake (green on master, reproduces on unrelated docs-only branches). This empty commit forces fresh CI runs on new runners. Co-Authored-By: Claude Opus 4.8 From a1e2a4695899415b6656a5ecd844de0c1e9626da Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 22:16:25 +0100 Subject: [PATCH 7/9] Bump Compiler -> `2.0.0-SNAPSHOT.057` --- .../src/main/kotlin/io/spine/dependency/local/Compiler.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 0de5a57129..8667b50e4d 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -72,7 +72,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.055" + private const val fallbackVersion = "2.0.0-SNAPSHOT.057" /** * The distinct version of the Compiler used by other build tools. @@ -81,7 +81,7 @@ object Compiler : Dependency() { * transitive dependencies, this is the version used to build the project itself. */ val dogfoodingVersion: String - private const val fallbackDfVersion = "2.0.0-SNAPSHOT.055" + private const val fallbackDfVersion = "2.0.0-SNAPSHOT.057" /** * The artifact for the Compiler Gradle plugin. From 5293eab5c0bb7753cdd270d5737025c0da94bcf5 Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 22:16:33 +0100 Subject: [PATCH 8/9] Update dependency reports --- docs/dependencies/dependencies.md | 22 +++++++++++----------- docs/dependencies/pom.xml | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index 370eec917f..281826f91c 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1067,7 +1067,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -1444,7 +1444,7 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:14 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -2522,7 +2522,7 @@ This report was generated on **Tue Jun 30 19:56:14 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -3759,7 +3759,7 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -4783,7 +4783,7 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -5851,7 +5851,7 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -6946,7 +6946,7 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -8012,7 +8012,7 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -8852,7 +8852,7 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -9926,7 +9926,7 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -11107,6 +11107,6 @@ This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 19:56:15 WEST 2026** using +This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index c373d89d90..d340626815 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -377,12 +377,12 @@ all modules and does not describe the project structure per-subproject. io.spine.tools compiler-cli-all - 2.0.0-SNAPSHOT.055 + 2.0.0-SNAPSHOT.057 io.spine.tools compiler-protoc-plugin - 2.0.0-SNAPSHOT.055 + 2.0.0-SNAPSHOT.057 io.spine.tools From ab70f1482fbd39a8b63da08a2afd5abc8e997306 Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Tue, 30 Jun 2026 23:20:02 +0100 Subject: [PATCH 9/9] Update `config` --- .github/workflows/build-on-ubuntu.yml | 2 +- .../src/main/kotlin/DependencyResolution.kt | 6 +- .../src/main/kotlin/dokka-setup.gradle.kts | 11 +- .../kotlin/io/spine/dependency/Dependency.kt | 11 + .../io/spine/dependency/boms/BomsPlugin.kt | 5 +- .../io/spine/dependency/local/Logging.kt | 2 +- .../kotlin/io/spine/dependency/storage/H2.kt | 40 ++ .../io/spine/dependency/storage/Hikari.kt | 40 ++ .../io/spine/dependency/storage/HsqlDb.kt | 41 ++ .../io/spine/dependency/storage/MySql.kt | 41 ++ .../io/spine/dependency/storage/PostgreSql.kt | 40 ++ .../io/spine/dependency/storage/QueryDsl.kt | 45 ++ .../spine/dependency/test/Testcontainers.kt | 28 +- .../io/spine/gradle/kotlin/KotlinConfig.kt | 20 +- .../gradle/report/pom/DependencyWriter.kt | 123 ++++-- .../gradle/report/pom/ProjectMetadata.kt | 8 +- .../src/main/kotlin/jacoco-kmm-jvm.gradle.kts | 87 ---- .../main/kotlin/jacoco-kotlin-jvm.gradle.kts | 80 ---- .../src/main/kotlin/jvm-module.gradle.kts | 6 +- .../src/main/kotlin/kmp-module.gradle.kts | 9 +- .../main/kotlin/uber-jar-module.gradle.kts | 9 +- .../src/main/kotlin/write-manifest.gradle.kts | 2 +- .../gradle/report/pom/DependencyWriterSpec.kt | 113 +++++ config | 2 +- docs/dependencies/dependencies.md | 410 ++++++++++++++---- docs/dependencies/pom.xml | 20 +- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 4 +- gradlew.bat | 4 +- 29 files changed, 887 insertions(+), 324 deletions(-) create mode 100644 buildSrc/src/main/kotlin/io/spine/dependency/storage/H2.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/dependency/storage/Hikari.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/dependency/storage/HsqlDb.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/dependency/storage/MySql.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/dependency/storage/PostgreSql.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/dependency/storage/QueryDsl.kt delete mode 100644 buildSrc/src/main/kotlin/jacoco-kmm-jvm.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts diff --git a/.github/workflows/build-on-ubuntu.yml b/.github/workflows/build-on-ubuntu.yml index 01f6fd71a8..b07bf0fb0a 100644 --- a/.github/workflows/build-on-ubuntu.yml +++ b/.github/workflows/build-on-ubuntu.yml @@ -87,7 +87,7 @@ jobs: # there anyway). - name: Upload code coverage report if: steps.codecov.outputs.available == 'true' || github.event_name == 'push' - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v7 with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true diff --git a/buildSrc/src/main/kotlin/DependencyResolution.kt b/buildSrc/src/main/kotlin/DependencyResolution.kt index 124adb3f55..7d76bbba90 100644 --- a/buildSrc/src/main/kotlin/DependencyResolution.kt +++ b/buildSrc/src/main/kotlin/DependencyResolution.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, TeamDev. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ import io.spine.dependency.build.Dokka import io.spine.dependency.build.ErrorProne import io.spine.dependency.build.FindBugs import io.spine.dependency.build.JSpecify +import io.spine.dependency.isDokka import io.spine.dependency.lib.Asm import io.spine.dependency.lib.AutoCommon import io.spine.dependency.lib.AutoService @@ -73,6 +74,9 @@ fun doForceVersions(configurations: ConfigurationContainer) { */ fun NamedDomainObjectContainer.forceVersions() { all { + if (isDokka) { + return@all + } resolutionStrategy { failOnVersionConflict() cacheChangingModulesFor(0, "seconds") diff --git a/buildSrc/src/main/kotlin/dokka-setup.gradle.kts b/buildSrc/src/main/kotlin/dokka-setup.gradle.kts index d34615c3fe..a1915cf0c3 100644 --- a/buildSrc/src/main/kotlin/dokka-setup.gradle.kts +++ b/buildSrc/src/main/kotlin/dokka-setup.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, TeamDev. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,6 +41,15 @@ tasks.withType().configureEach { } } +// The Dokka Javadoc format does not support Kotlin Multiplatform source sets, so its +// publication task fails for KMP modules ("No source set found for /jvmMain"). +// KMP modules publish HTML documentation, so skip the Javadoc publication for them. +plugins.withId("org.jetbrains.kotlin.multiplatform") { + tasks.matching { it.name == "dokkaGeneratePublicationJavadoc" }.configureEach { + enabled = false + } +} + afterEvaluate { dokka { configureForKotlin( diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt b/buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt index 372651128e..0eb1956bda 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt @@ -111,6 +111,17 @@ abstract class DependencyWithBom : Dependency() { fun Configuration.diagSuffix(project: Project): String = "the configuration `$name` in the project: `${project.path}`." +/** + * Tells if this configuration belongs to Dokka's own generator/plugin classpath. + * + * Dokka resolves these `dokka*` configurations using dependency versions pinned by + * Dokka itself (for example, Jackson or Kotlin), which legitimately differ from the + * project's. Forcing the project's versions onto them breaks `dokkaGenerate`, so such + * configurations must be excluded from the project's version forcing. + */ +val Configuration.isDokka: Boolean + get() = name.startsWith("dokka") + private fun ResolutionStrategy.forceWithLogging( project: Project, configuration: Configuration, diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/boms/BomsPlugin.kt b/buildSrc/src/main/kotlin/io/spine/dependency/boms/BomsPlugin.kt index c5444a00d5..e60d6dea54 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/boms/BomsPlugin.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/boms/BomsPlugin.kt @@ -29,6 +29,7 @@ package io.spine.dependency.boms import io.gitlab.arturbosch.detekt.getSupportedKotlinVersion import io.spine.dependency.DependencyWithBom import io.spine.dependency.diagSuffix +import io.spine.dependency.isDokka import io.spine.dependency.kotlinx.Coroutines import io.spine.dependency.lib.Kotlin import io.spine.dependency.test.JUnit @@ -88,7 +89,7 @@ class BomsPlugin : Plugin { applyBoms(project, Boms.core + Boms.testing) } - matching { !supportsBom(it.name) }.all { + matching { !supportsBom(it.name) && !it.isDokka }.all { resolutionStrategy.eachDependency { if (requested.group == Kotlin.group) { val kotlinVersion = Kotlin.runtimeVersion @@ -170,7 +171,7 @@ private fun supportsBom(name: String) = private fun Project.forceArtifacts() = configurations.all { resolutionStrategy { - if (!isDetekt) { + if (!isDetekt && !isDokka) { val rs = this@resolutionStrategy val project = this@forceArtifacts val cfg = this@all diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt index 04d19ea52d..e9f477ac3c 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt @@ -33,7 +33,7 @@ package io.spine.dependency.local */ @Suppress("ConstPropertyName", "unused") object Logging { - const val version = "2.0.0-SNAPSHOT.417" + const val version = "2.0.0-SNAPSHOT.419" const val group = Spine.group const val loggingArtifact = "spine-logging" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/storage/H2.kt b/buildSrc/src/main/kotlin/io/spine/dependency/storage/H2.kt new file mode 100644 index 0000000000..5232e63fa5 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/dependency/storage/H2.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.dependency.storage + +/** + * The H2 Database Engine — a fast, in-memory/embedded SQL database used for exercising + * the JDBC storage in tests. + * + * @see H2 Database Engine at GitHub + * @see H2 Database Engine site + */ +@Suppress("unused", "ConstPropertyName") +object H2 { + private const val version = "2.4.240" + const val lib = "com.h2database:h2:$version" +} diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/storage/Hikari.kt b/buildSrc/src/main/kotlin/io/spine/dependency/storage/Hikari.kt new file mode 100644 index 0000000000..5ab609ef35 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/dependency/storage/Hikari.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.dependency.storage + +/** + * HikariCP — a fast, lightweight JDBC connection pool. + * + * The JDBC storage uses it to pool database connections. + * + * @see HikariCP at GitHub + */ +@Suppress("unused", "ConstPropertyName") +object Hikari { + private const val version = "7.1.0" + const val lib = "com.zaxxer:HikariCP:$version" +} diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/storage/HsqlDb.kt b/buildSrc/src/main/kotlin/io/spine/dependency/storage/HsqlDb.kt new file mode 100644 index 0000000000..3a6b509ca7 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/dependency/storage/HsqlDb.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.dependency.storage + +/** + * HyperSQL DataBase (HSQLDB) — a relational database engine written in Java, used in its + * in-memory mode for exercising the JDBC storage in tests. + * + * HSQLDB is hosted on SourceForge rather than GitHub. + * + * @see HyperSQL Database site + */ +@Suppress("unused", "ConstPropertyName") +object HsqlDb { + private const val version = "2.7.4" + const val lib = "org.hsqldb:hsqldb:$version" +} diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/storage/MySql.kt b/buildSrc/src/main/kotlin/io/spine/dependency/storage/MySql.kt new file mode 100644 index 0000000000..78bbfc3b1a --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/dependency/storage/MySql.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.dependency.storage + +/** + * MySQL Connector/J — the official JDBC driver for MySQL. + * + * Used by the MySQL-based storage tests. Note the modern `com.mysql:mysql-connector-j` + * coordinates, which superseded the legacy `mysql:mysql-connector-java` artifact. + * + * @see MySQL Connector/J at GitHub + */ +@Suppress("unused", "ConstPropertyName") +object MySql { + private const val version = "9.7.0" + const val connector = "com.mysql:mysql-connector-j:$version" +} diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/storage/PostgreSql.kt b/buildSrc/src/main/kotlin/io/spine/dependency/storage/PostgreSql.kt new file mode 100644 index 0000000000..d4083c65c9 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/dependency/storage/PostgreSql.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.dependency.storage + +/** + * The PostgreSQL JDBC driver (pgJDBC). + * + * Used by the PostgreSQL-based storage tests to connect to a real PostgreSQL server. + * + * @see PostgreSQL JDBC Driver at GitHub + */ +@Suppress("unused", "ConstPropertyName") +object PostgreSql { + private const val version = "42.7.11" + const val connector = "org.postgresql:postgresql:$version" +} diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/storage/QueryDsl.kt b/buildSrc/src/main/kotlin/io/spine/dependency/storage/QueryDsl.kt new file mode 100644 index 0000000000..e22cd9a90b --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/dependency/storage/QueryDsl.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.dependency.storage + +/** + * QueryDSL — a framework for constructing type-safe SQL-like queries in Java. + * + * The JDBC storage uses the SQL module to build database queries. + * + * @see QueryDSL at GitHub + */ +@Suppress("unused", "ConstPropertyName") +object QueryDsl { + private const val version = "5.1.0" + private const val group = "com.querydsl" + + /** + * The SQL module of QueryDSL. + */ + const val sql = "$group:querydsl-sql:$version" +} diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/test/Testcontainers.kt b/buildSrc/src/main/kotlin/io/spine/dependency/test/Testcontainers.kt index bb3b22e39a..85c91b5048 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/test/Testcontainers.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/test/Testcontainers.kt @@ -26,12 +26,38 @@ package io.spine.dependency.test -// https://github.com/testcontainers/testcontainers-java +/** + * Testcontainers for Java — provides throwaway, lightweight instances of databases and other + * services running in Docker containers. + * + * The modules below are versioned and released together, so a single [version] applies to all + * of them. + * + * @see + * Testcontainers for Java at GitHub + */ @Suppress("unused", "ConstPropertyName") object Testcontainers { private const val version = "1.21.4" private const val group = "org.testcontainers" + + /** + * The core Testcontainers library. + */ const val lib = "$group:testcontainers:$version" + + /** + * The JUnit 5 (Jupiter) integration. + */ const val junitJupiter = "$group:junit-jupiter:$version" + + /** + * The Google Cloud (GCP) emulator container support. + */ const val gcloud = "$group:gcloud:$version" + + /** + * The MySQL container support. + */ + const val mySql = "$group:mysql:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/kotlin/KotlinConfig.kt b/buildSrc/src/main/kotlin/io/spine/gradle/kotlin/KotlinConfig.kt index 92b7a38743..0e5099a77f 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/kotlin/KotlinConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/kotlin/KotlinConfig.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, TeamDev. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,20 +55,26 @@ fun KotlinJvmProjectExtension.applyJvmToolchain(version: String) = */ @Suppress("unused") fun KotlinCommonCompilerOptions.setFreeCompilerArgs() { + val optIns = mutableListOf( + "kotlin.contracts.ExperimentalContracts", + "kotlin.ExperimentalUnsignedTypes", + "kotlin.ExperimentalStdlibApi", + "kotlin.experimental.ExperimentalTypeInference", + ) if (this is KotlinJvmCompilerOptions) { jvmDefault.set(JvmDefaultMode.NO_COMPATIBILITY) + // `kotlin.io.path` ships only in the JVM standard library, so for common + // and Native compilations this opt-in marker is unresolved and the compiler + // warns about it. Scope it to JVM compilations; multiplatform common and + // Native code cannot use the API anyway. + optIns.add("kotlin.io.path.ExperimentalPathApi") } freeCompilerArgs.addAll( listOf( "-Xskip-prerelease-check", "-Xexpect-actual-classes", "-Xcontext-parameters", - "-opt-in=" + - "kotlin.contracts.ExperimentalContracts," + - "kotlin.io.path.ExperimentalPathApi," + - "kotlin.ExperimentalUnsignedTypes," + - "kotlin.ExperimentalStdlibApi," + - "kotlin.experimental.ExperimentalTypeInference", + "-opt-in=" + optIns.joinToString(separator = ","), ) ) } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt index 64e46ef75b..2a2a4c1c32 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt @@ -34,6 +34,7 @@ import kotlin.reflect.full.isSubclassOf import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Dependency +import org.gradle.api.artifacts.result.ResolvedComponentResult import org.gradle.api.internal.artifacts.dependencies.AbstractExternalModuleDependency import org.gradle.kotlin.dsl.withGroovyBuilder @@ -54,6 +55,11 @@ import org.gradle.kotlin.dsl.withGroovyBuilder * * ``` * + * The version reported for each dependency is the one selected by Gradle's + * dependency resolution — the version actually placed on the classpath — rather + * than the version requested in the build script. This reflects `force(...)` + * directives, platform/BOM constraints, and conflict resolution. + * * When there are several versions of the same dependency, only the one with * the newest version is retained. If the retained version is used in several * configurations, the highest-ranking Maven scope is reported, e.g. `compile` @@ -107,38 +113,70 @@ private constructor( /** * Returns the [scoped dependencies][ScopedDependency] of a Gradle project. + * + * The version of each dependency is the one selected by dependency resolution + * for the project it comes from. See [resolvedVersions]. + */ +fun Project.dependencies(): SortedSet = + collectScopedDependencies { it.resolvedVersions() } + +/** + * Returns the [scoped dependencies][ScopedDependency] of a Gradle project, taking + * the version of each dependency from the given [resolvedVersions] map instead of + * resolving the project's own configurations. + * + * This overload exists for tests: a project created with `ProjectBuilder` cannot + * resolve its configurations against real repositories, so the resolved versions + * are supplied directly. The keys are the `"group:name"` of the modules. */ -fun Project.dependencies(): SortedSet { +internal fun Project.dependencies( + resolvedVersions: Map +): SortedSet = + collectScopedDependencies { resolvedVersions } + +/** + * Collects the [scoped dependencies][ScopedDependency] of this project and its + * subprojects, deduplicates them, and returns them in the conventional Maven order. + * + * The version of each dependency is taken from the map returned by the supplied + * `resolvedVersionsOf` function for the project the dependency comes from. + */ +private fun Project.collectScopedDependencies( + resolvedVersionsOf: (Project) -> Map +): SortedSet { val dependencies = mutableSetOf() - dependencies.addAll(this.depsFromAllConfigurations()) + dependencies.addAll(depsFromAllConfigurations(resolvedVersionsOf(this))) - this.subprojects.forEach { subproject -> - val subprojectDeps = subproject.depsFromAllConfigurations() + subprojects.forEach { subproject -> + val subprojectDeps = subproject.depsFromAllConfigurations(resolvedVersionsOf(subproject)) dependencies.addAll(subprojectDeps) } - val result = deduplicate(dependencies) + return deduplicate(dependencies) .map { it.scoped } .toSortedSet() - return result } /** * Returns the external dependencies of the project from all the project configurations. + * + * The version of each returned dependency is taken from [resolvedVersions] by its + * `"group:name"` key, falling back to the declared version when the module is on no + * resolvable configuration — for example, a version managed by a BOM, which carries + * no explicit version of its own. */ -private fun Project.depsFromAllConfigurations(): Set { +private fun Project.depsFromAllConfigurations( + resolvedVersions: Map +): Set { val result = mutableSetOf() - this.configurations.forEach { configuration -> + configurations.forEach { configuration -> configuration.dependencies .filter { it.isExternal() } .forEach { dependency -> - val forcedVersion = configuration.forcedVersionOf(dependency) + val version = resolvedVersions[moduleKey(dependency.group, dependency.name)] + ?: dependency.version val moduleDependency = - if (forcedVersion != null) { - ModuleDependency(project, configuration, dependency, forcedVersion) - } else { - ModuleDependency(project, configuration, dependency) - } + ModuleDependency(this, configuration, dependency, factualVersion = version) result.add(moduleDependency) } } @@ -146,20 +184,55 @@ private fun Project.depsFromAllConfigurations(): Set { } /** - * Searches for a forced version of given [dependency] in this [Configuration]. + * Returns the versions selected by dependency resolution for this project, keyed + * by the `"group:name"` of each module. + * + * The declared version of a dependency is what the build script *requested*, which + * may differ from what the build *uses*: a `force(...)`, a platform/BOM constraint, + * or Gradle's conflict resolution can all select another version. Reading the + * resolution result captures the selected version, so the report describes the + * dependencies actually on the classpath rather than the requested ones. * - * Returns `null`, if it wasn't forced. + * Only resolvable configurations contribute. When a module resolves to different + * versions across configurations, the newest one (by [VersionComparator]) is kept, + * matching the deduplication applied afterwards. A configuration that fails to + * resolve in isolation is skipped and logged, so the report never breaks the build. */ -private fun Configuration.forcedVersionOf(dependency: Dependency): String? { - val forcedModules = resolutionStrategy.forcedModules - val maybeForced = forcedModules.firstOrNull { - it.group == dependency.group - && it.name == dependency.name - && it.version != null - } - return maybeForced?.version +private fun Project.resolvedVersions(): Map { + // Resolving an individual configuration may fail for reasons unrelated to the + // report — missing repositories for a niche configuration, an unsatisfiable + // constraint, and the like. Such a configuration contributes no versions. + @Suppress("TooGenericExceptionCaught") // Any resolution failure is non-fatal here. + fun componentsOf(configuration: Configuration): Set = + try { + configuration.incoming.resolutionResult.allComponents + } catch (e: Exception) { + logger.info( + "Skipping configuration `${configuration.name}` " + + "while collecting resolved dependency versions.", + e + ) + emptySet() + } + + return configurations + .filter { it.isCanBeResolved } + .flatMap { componentsOf(it) } + .mapNotNull { it.moduleVersion } + .groupBy { moduleKey(it.group, it.name) } + .mapValues { (_, versions) -> versions.maxOfWith(VersionComparator) { it.version } } } +/** + * Builds the `"group:name"` key under which a module's resolved version is recorded + * and looked up. + * + * Forming the key in one place keeps the lookup in [depsFromAllConfigurations] + * consistent with what [resolvedVersions] records and with the grouping done by + * [deduplicate]. + */ +private fun moduleKey(group: String?, name: String): String = "$group:$name" + /** * Tells whether the dependency is an external module dependency. */ @@ -193,7 +266,7 @@ private fun Dependency.isExternal(): Boolean { * The rejected duplicates are logged. */ private fun Project.deduplicate(dependencies: Set): List { - val groups = dependencies.groupBy { it.run { "$group:$name" } } + val groups = dependencies.groupBy { moduleKey(it.group, it.name) } logDuplicates(groups.mapValues { (_, deps) -> deps.distinctBy { it.gav } }) diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ProjectMetadata.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ProjectMetadata.kt index ffb89a263f..66e3400e28 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ProjectMetadata.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ProjectMetadata.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, TeamDev. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,9 +30,7 @@ import groovy.xml.MarkupBuilder import java.io.StringWriter import kotlin.reflect.KProperty import org.gradle.api.Project -import org.gradle.kotlin.dsl.PropertyDelegate import org.gradle.kotlin.dsl.extra -import org.gradle.kotlin.dsl.provideDelegate import org.gradle.kotlin.dsl.withGroovyBuilder /** @@ -90,10 +88,10 @@ private fun Project.nonEmptyValue(prop: Any): NonEmptyValue { private class NonEmptyValue( private val defaultValue: String, private val project: Project -) : PropertyDelegate { +) { @Suppress("UNCHECKED_CAST") - override fun getValue(receiver: Any?, property: KProperty<*>): T { + operator fun getValue(receiver: Any?, property: KProperty<*>): T { if (defaultValue.isNotEmpty()) { return defaultValue as T } diff --git a/buildSrc/src/main/kotlin/jacoco-kmm-jvm.gradle.kts b/buildSrc/src/main/kotlin/jacoco-kmm-jvm.gradle.kts deleted file mode 100644 index 7334ef97f0..0000000000 --- a/buildSrc/src/main/kotlin/jacoco-kmm-jvm.gradle.kts +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2026, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -import java.io.File -import org.gradle.kotlin.dsl.getValue -import org.gradle.kotlin.dsl.getting -import org.gradle.kotlin.dsl.jacoco -import org.gradle.testing.jacoco.tasks.JacocoReport - -// DEPRECATED: this script plugin distributes vanilla JaCoCo. -// New code should apply `kmp-module`, which configures Kover via -// `useJacoco(version = Jacoco.version)` and writes JaCoCo-format XML at -// `build/reports/kover/report.xml`. (Same task and path as Kotlin-JVM — -// `kmp-module` configures only Kover's `total` report, so no -// `koverXmlReport` task is generated.) The `raise-coverage` skill -// migrates existing consumers automatically. Kept so older consumer repos -// continue to build; will be removed in a future release. -// See: .agents/skills/raise-coverage/references/migrate-to-kover.md - -plugins { - jacoco -} - -logger.warn( - "'jacoco-kmm-jvm' is deprecated; use 'kmp-module' which applies Kover. " + - "See .agents/skills/raise-coverage/references/migrate-to-kover.md." -) - -/** - * Configures [JacocoReport] task to run in a Kotlin KMM project for `commonMain` and `jvmMain` - * source sets. - * - * This script plugin must be applied using the following construct at the end of - * a `build.gradle.kts` file of a module: - * - * ```kotlin - * apply(plugin="jacoco-kmm-jvm") - * ``` - * Please do not apply this script plugin in the `plugins {}` block because `jacocoTestReport` - * task is not yet available at this stage. - */ -@Suppress("unused") -private val about = "" - -/** - * Configure the Jacoco task with custom input a KMM project - * to which this convention plugin is applied. - */ -@Suppress("unused") -val jacocoTestReport: JacocoReport by tasks.getting(JacocoReport::class) { - val buildDir = project.layout.buildDirectory.get().asFile.absolutePath - val classFiles = File("${buildDir}/classes/kotlin/jvm/") - .walkBottomUp() - .toSet() - classDirectories.setFrom(classFiles) - - val coverageSourceDirs = arrayOf( - "src/commonMain", - "src/jvmMain" - ) - sourceDirectories.setFrom(files(coverageSourceDirs)) - - executionData.setFrom(files("${buildDir}/jacoco/jvmTest.exec")) -} diff --git a/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts b/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts deleted file mode 100644 index 185c9cdfdd..0000000000 --- a/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2026, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -import io.spine.gradle.buildDirectory - -// DEPRECATED: this script plugin distributes vanilla JaCoCo. -// New code should apply `jvm-module`, which configures Kover via -// `useJacoco(version = Jacoco.version)` and writes JaCoCo-format XML at -// `build/reports/kover/report.xml`. The `raise-coverage` skill migrates -// existing consumers automatically. Kept so older consumer repos continue to -// build; will be removed in a future release. -// See: .agents/skills/raise-coverage/references/migrate-to-kover.md - -plugins { - jacoco -} - -logger.warn( - "'jacoco-kotlin-jvm' is deprecated; use 'jvm-module' which applies Kover. " + - "See .agents/skills/raise-coverage/references/migrate-to-kover.md." -) - -/** - * Configures [JacocoReport] task to run in a Kotlin Multiplatform project for - * `commonMain` and `jvmMain` source sets. - * - * This script plugin must be applied using the following construct at the end of - * a `build.gradle.kts` file of a module: - * - * ```kotlin - * apply(plugin="jacoco-kotlin-jvm") - * ``` - * Please do not apply this script plugin in the `plugins {}` block because `jacocoTestReport` - * task is not yet available at this stage. - */ -@Suppress("unused") -private val about = "" - -/** - * Configure Jacoco task with custom input from this Kotlin Multiplatform project. - */ -@Suppress("unused") -val jacocoTestReport: JacocoReport by tasks.getting(JacocoReport::class) { - - val classFiles = File("$buildDirectory/classes/kotlin/jvm/") - .walkBottomUp() - .toSet() - classDirectories.setFrom(classFiles) - - val coverageSourceDirs = arrayOf( - "src/commonMain", - "src/jvmMain" - ) - sourceDirectories.setFrom(files(coverageSourceDirs)) - - executionData.setFrom(files("$buildDirectory/jacoco/jvmTest.exec")) -} diff --git a/buildSrc/src/main/kotlin/jvm-module.gradle.kts b/buildSrc/src/main/kotlin/jvm-module.gradle.kts index a7b3113092..1438116b77 100644 --- a/buildSrc/src/main/kotlin/jvm-module.gradle.kts +++ b/buildSrc/src/main/kotlin/jvm-module.gradle.kts @@ -29,6 +29,7 @@ import io.spine.dependency.build.CheckerFramework import io.spine.dependency.build.Dokka import io.spine.dependency.build.ErrorProne import io.spine.dependency.build.JSpecify +import io.spine.dependency.isDokka import io.spine.dependency.lib.Guava import io.spine.dependency.lib.Jackson import io.spine.dependency.lib.Kotlin @@ -132,6 +133,9 @@ fun Module.forceConfigurations() { forceVersions() excludeProtobufLite() all { + if (isDokka) { + return@all + } resolutionStrategy { val cfg = this@all val rs = this@resolutionStrategy @@ -150,7 +154,7 @@ fun Module.forceConfigurations() { fun Module.setTaskDependencies(generatedDir: String) { tasks { - val cleanGenerated by registering(Delete::class) { + val cleanGenerated = register("cleanGenerated") { group = SpineTaskGroup.name description = "Deletes the directory with generated sources" delete(generatedDir) diff --git a/buildSrc/src/main/kotlin/kmp-module.gradle.kts b/buildSrc/src/main/kotlin/kmp-module.gradle.kts index a2e6d82e58..089722e612 100644 --- a/buildSrc/src/main/kotlin/kmp-module.gradle.kts +++ b/buildSrc/src/main/kotlin/kmp-module.gradle.kts @@ -25,6 +25,7 @@ */ import io.spine.dependency.boms.BomsPlugin +import io.spine.dependency.isDokka import io.spine.dependency.lib.Jackson import io.spine.dependency.lib.Kotlin import io.spine.dependency.local.Reflect @@ -83,6 +84,9 @@ fun Project.forceConfigurations() { with(configurations) { forceVersions() all { + if (isDokka) { + return@all + } resolutionStrategy { val cfg = this@all val rs = this@resolutionStrategy @@ -122,9 +126,8 @@ kotlin { // Dependencies are specified per-target. // Please note, common sources are implicitly available in all targets. - @Suppress("unused") // source set `val`s are used implicitly. sourceSets { - val commonTest by getting { + getByName("commonTest") { dependencies { implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) @@ -132,7 +135,7 @@ kotlin { implementation(Kotest.frameworkEngine) } } - val jvmTest by getting { + getByName("jvmTest") { dependencies { implementation(dependencies.enforcedPlatform(JUnit.bom)) implementation(TestLib.lib) diff --git a/buildSrc/src/main/kotlin/uber-jar-module.gradle.kts b/buildSrc/src/main/kotlin/uber-jar-module.gradle.kts index 0cace2ebe3..e59e30ef82 100644 --- a/buildSrc/src/main/kotlin/uber-jar-module.gradle.kts +++ b/buildSrc/src/main/kotlin/uber-jar-module.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, TeamDev. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -70,11 +70,8 @@ publishing { } } -/** - * Declare dependency explicitly to address the Gradle error. - */ -@Suppress("unused") -val publishFatJarPublicationToMavenLocal: Task by tasks.getting { +// Declare dependency explicitly to address the Gradle error. +tasks.getByName("publishFatJarPublicationToMavenLocal") { dependsOn(tasks.shadowJar) } diff --git a/buildSrc/src/main/kotlin/write-manifest.gradle.kts b/buildSrc/src/main/kotlin/write-manifest.gradle.kts index 49130c0c4b..2c49daa7cc 100644 --- a/buildSrc/src/main/kotlin/write-manifest.gradle.kts +++ b/buildSrc/src/main/kotlin/write-manifest.gradle.kts @@ -104,7 +104,7 @@ val manifestAttributes = mapOf( * when running tests. We cannot depend on the `Jar` from `resources` because it would * form a circular dependency. */ -val exposeManifestForTests by tasks.registering { +val exposeManifestForTests = tasks.register("exposeManifestForTests") { group = SpineTaskGroup.name description = "Writes a `MANIFEST.MF` to `resources/main` so that it is visible to tests" diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/DependencyWriterSpec.kt b/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/DependencyWriterSpec.kt index 0c4b23355f..baec7877dd 100644 --- a/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/DependencyWriterSpec.kt +++ b/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/DependencyWriterSpec.kt @@ -31,12 +31,16 @@ import io.kotest.matchers.ints.shouldBeLessThan import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldContain import io.kotest.matchers.string.shouldNotContain +import java.io.File import java.io.StringWriter +import org.gradle.api.Action import org.gradle.api.Project +import org.gradle.api.artifacts.repositories.MavenArtifactRepository import org.gradle.testfixtures.ProjectBuilder import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir @DisplayName("`DependencyWriter` should") internal class DependencyWriterSpec { @@ -246,6 +250,112 @@ internal class DependencyWriterSpec { } } + @Nested inner class + `report the version selected by dependency resolution` { + + /** + * A `force(...)` pins an artifact to a version that is *older* than one of + * the declared ones. The report must show the resolved version — the one + * actually on the classpath — and not the newest of the declared ones, + * which the deduplication would otherwise pick. + */ + @Test + fun `preferring it over a newer declared version`() { + val older = "$VALIDATION_RUNTIME:2.0.0-SNAPSHOT.40" + val newer = "$VALIDATION_RUNTIME:2.0.0-SNAPSHOT.61" + subproject("a-text").declare("implementation", newer) + subproject("b-text").declare("implementation", older) + + val resolved = mapOf(VALIDATION_RUNTIME to "2.0.0-SNAPSHOT.40") + val dependency = rootProject.dependencies(resolved).single() + + dependency.dependency().version shouldBe "2.0.0-SNAPSHOT.40" + } + + /** + * Two versions of the same artifact declared in a single module and + * configuration — the case that used to log a spurious "several versions" + * warning — collapse to the single resolved version. + */ + @Test + fun `collapsing several declarations within one configuration`() { + val text = subproject("text") + text.declare("implementation", "$VALIDATION_RUNTIME:2.0.0-SNAPSHOT.61") + text.declare("implementation", "$VALIDATION_RUNTIME:2.0.0-SNAPSHOT.40") + + val resolved = mapOf(VALIDATION_RUNTIME to "2.0.0-SNAPSHOT.61") + val dependency = rootProject.dependencies(resolved).single() + + dependency.dependency().version shouldBe "2.0.0-SNAPSHOT.61" + } + + @Test + fun `falling back to the declared version when it is not resolved`() { + subproject("lib").declare("api", SPINE_BASE) + + val dependency = rootProject.dependencies(emptyMap()).single() + + dependency.dependency().version shouldBe "2.0.0" + } + } + + @Nested inner class + `read the version from a resolved configuration` { + + /** + * Drives the real (non-injected) `dependencies()` entry point against an + * actually resolved configuration. A module is declared at one version but + * `force`d to an older one; the report must show the forced, i.e. resolved, + * version. The forcing is observable only through resolution, so the module + * is resolved from a local repository of metadata-only POMs. + */ + @Test + fun `honoring a forced version over the declared one`(@TempDir repoDir: File) { + val group = "io.spine.validation" + val name = "spine-validation-java-runtime" + publishPom(repoDir, group, name, "1.0.40") + publishPom(repoDir, group, name, "1.0.61") + + val text = subproject("text") + text.addMavenRepository(repoDir) + val api = text.configurations.create("api") + api.isCanBeResolved = true + api.resolutionStrategy.force("$group:$name:1.0.40") + text.dependencies.add("api", "$group:$name:1.0.61") + + val dependency = rootProject.dependencies().single() + + dependency.dependency().version shouldBe "1.0.40" + } + + /** Writes a metadata-only Maven POM for the module under [repoDir]. */ + private fun publishPom(repoDir: File, group: String, name: String, version: String) { + val dir = File(repoDir, "${group.replace('.', '/')}/$name/$version") + dir.mkdirs() + File(dir, "$name-$version.pom").writeText( + """ + + 4.0.0 + $group + $name + $version + + """.trimIndent() + ) + } + + private fun Project.addMavenRepository(dir: File) { + // The `org.gradle.kotlin.dsl` `maven { }` accessors are not on the + // `buildSrc` test compile classpath, so the core `Action` overload is + // used directly rather than the DSL lambda. + repositories.maven(object : Action { + override fun execute(repository: MavenArtifactRepository) { + repository.setUrl(dir.toURI()) + } + }) + } + } + @Test fun `omit the scope of a dependency coming only from an unknown configuration`() { subproject("lib").declare("spineCompiler", SPINE_BASE) @@ -308,5 +418,8 @@ internal class DependencyWriterSpec { private companion object { const val SPINE_BASE = "io.spine:spine-base:2.0.0" const val SPINE_BASE_NEWER = "io.spine:spine-base:2.0.1" + + /** The `"group:name"` of the validation runtime artifact, without a version. */ + const val VALIDATION_RUNTIME = "io.spine.validation:spine-validation-java-runtime" } } diff --git a/config b/config index 8068c5d2a2..fdf78d7a2c 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 8068c5d2a291925a3207d2d881165c714cc364a3 +Subproject commit fdf78d7a2c2372cead94ea29e9155707e200b94e diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index 281826f91c..eda7690486 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -190,11 +190,11 @@ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -674,13 +674,13 @@ * **Project URL:** [https://github.com/trustin/os-maven-plugin/](https://github.com/trustin/os-maven-plugin/) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.apiguardian. **Name** : apiguardian-api. **Version** : 1.1.2. * **Project URL:** [https://github.com/apiguardian-team/apiguardian](https://github.com/apiguardian-team/apiguardian) @@ -848,6 +848,10 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -880,6 +884,10 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -888,10 +896,18 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -900,6 +916,10 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -932,10 +952,18 @@ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -944,6 +972,10 @@ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -956,11 +988,11 @@ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1067,7 +1099,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -1304,13 +1336,13 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [http://junit.org](http://junit.org) * **License:** [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.apiguardian. **Name** : apiguardian-api. **Version** : 1.1.2. * **Project URL:** [https://github.com/apiguardian-team/apiguardian](https://github.com/apiguardian-team/apiguardian) @@ -1384,11 +1416,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1444,7 +1476,7 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -1645,11 +1677,11 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2129,13 +2161,13 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://github.com/trustin/os-maven-plugin/](https://github.com/trustin/os-maven-plugin/) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.apiguardian. **Name** : apiguardian-api. **Version** : 1.1.2. * **Project URL:** [https://github.com/apiguardian-team/apiguardian](https://github.com/apiguardian-team/apiguardian) @@ -2303,6 +2335,10 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2335,6 +2371,10 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2343,10 +2383,18 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2355,6 +2403,10 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2387,10 +2439,18 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2399,6 +2459,10 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2411,11 +2475,11 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2522,7 +2586,7 @@ This report was generated on **Tue Jun 30 21:29:05 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -2809,11 +2873,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3366,13 +3430,13 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [LGPL-2.1-or-later](https://www.gnu.org/licenses/old-licenses/lgpl-2.1) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.apiguardian. **Name** : apiguardian-api. **Version** : 1.1.2. * **Project URL:** [https://github.com/apiguardian-team/apiguardian](https://github.com/apiguardian-team/apiguardian) @@ -3540,6 +3604,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3572,6 +3640,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3580,10 +3652,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3592,6 +3672,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3624,10 +3708,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3636,6 +3728,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3648,11 +3744,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3759,7 +3855,7 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -3956,11 +4052,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4672,11 +4768,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4783,7 +4879,7 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -4980,11 +5076,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -5736,11 +5832,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -5851,7 +5947,7 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -6069,11 +6165,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6553,13 +6649,13 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/trustin/os-maven-plugin/](https://github.com/trustin/os-maven-plugin/) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.apiguardian. **Name** : apiguardian-api. **Version** : 1.1.2. * **Project URL:** [https://github.com/apiguardian-team/apiguardian](https://github.com/apiguardian-team/apiguardian) @@ -6727,6 +6823,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6759,6 +6859,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6767,10 +6871,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6779,6 +6891,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6811,10 +6927,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6823,6 +6947,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6835,11 +6963,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6946,7 +7074,7 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -7143,11 +7271,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7793,6 +7921,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7825,6 +7957,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7833,10 +7969,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7845,6 +7989,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7877,10 +8025,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7889,6 +8045,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7901,11 +8061,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8012,7 +8172,7 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -8745,11 +8905,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8852,7 +9012,7 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -9053,11 +9213,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9707,6 +9867,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9739,6 +9903,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9747,10 +9915,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9759,6 +9935,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9791,10 +9971,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9803,6 +9991,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9815,11 +10007,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9926,7 +10118,7 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -10141,13 +10333,13 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [http://junit.org](http://junit.org) * **License:** [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) @@ -10209,11 +10401,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10714,13 +10906,13 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/trustin/os-maven-plugin/](https://github.com/trustin/os-maven-plugin/) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-api. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.20.0. - * **Project URL:** [https://www.apache.org/](https://www.apache.org/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.logging.log4j. **Name** : log4j-core. **Version** : 2.26.0. + * **Project URL:** [https://logging.apache.org/log4j/2.x/](https://logging.apache.org/log4j/2.x/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.apiguardian. **Name** : apiguardian-api. **Version** : 1.1.2. * **Project URL:** [https://github.com/apiguardian-team/apiguardian](https://github.com/apiguardian-team/apiguardian) @@ -10888,6 +11080,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10920,6 +11116,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10928,10 +11128,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.1.21. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.3.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10940,6 +11148,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.8.20. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.0.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10972,10 +11184,18 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10984,6 +11204,10 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.7.3. + * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.10.2. * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10996,11 +11220,11 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.7.1. +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime-jvm. **Version** : 0.8.0. * **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11107,6 +11331,6 @@ This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Jun 30 21:29:06 WEST 2026** using +This report was generated on **Tue Jun 30 23:13:38 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index d340626815..93d68f4c7b 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -38,6 +38,7 @@ all modules and does not describe the project structure per-subproject. com.fasterxml.jackson.dataformat jackson-dataformat-yaml + 2.22.0 compile @@ -91,11 +92,13 @@ all modules and does not describe the project structure per-subproject. io.grpc grpc-protobuf + 1.81.0 compile io.grpc grpc-stub + 1.81.0 compile @@ -119,13 +122,13 @@ all modules and does not describe the project structure per-subproject. io.spine spine-logging - 2.0.0-SNAPSHOT.417 + 2.0.0-SNAPSHOT.419 compile io.spine spine-logging-jvm - 2.0.0-SNAPSHOT.417 + 2.0.0-SNAPSHOT.419 compile @@ -179,7 +182,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools logging-testlib - 2.0.0-SNAPSHOT.417 + 2.0.0-SNAPSHOT.419 compile @@ -347,6 +350,7 @@ all modules and does not describe the project structure per-subproject. org.junit.platform junit-platform-launcher + 6.1.0 test @@ -449,6 +453,11 @@ all modules and does not describe the project structure per-subproject. templating-plugin 2.2.0 + + org.jetbrains.kotlin + abi-tools + 2.3.21 + org.jetbrains.kotlin kotlin-build-tools-compat @@ -459,6 +468,11 @@ all modules and does not describe the project structure per-subproject. kotlin-build-tools-impl 2.3.21 + + org.jetbrains.kotlin + kotlin-klib-commonizer-embeddable + 2.3.21 + org.jetbrains.kotlin kotlin-scripting-compiler-embeddable diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df6a6ad763..a9db11550c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip networkTimeout=10000 retries=0 retryBackOffMs=500 diff --git a/gradlew b/gradlew index b9bb139f79..249efbb032 100755 --- a/gradlew +++ b/gradlew @@ -20,7 +20,7 @@ ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -29,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: diff --git a/gradlew.bat b/gradlew.bat index 24c62d56f2..a51ec4f588 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,7 +19,7 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## @@ -72,7 +72,7 @@ echo location of your Java installation. 1>&2 -@rem Execute Gradle +@rem Execute gradlew @rem endlocal doesn't take effect until after the line is parsed and variables are expanded @rem which allows us to clear the local environment before executing the java command endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel