From 4301b9904b8cfd400760716c2ba7b62114fb50c5 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Mon, 12 Jun 2023 17:40:42 +0100 Subject: [PATCH 01/25] Update to the latest (updated at the moment) `core-java` version (`2.0.0-SNAPSHOT.149`), bump own version to `2.0.0-SNAPSHOT.149`. Modify and force the dependencies to resolve conflicts (use those from `core-java@...149`). --- build.gradle.kts | 74 ++++++++++++------- .../io/spine/internal/dependency/Jackson.kt | 26 +++++-- version.gradle.kts | 13 ++-- 3 files changed, 74 insertions(+), 39 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 431803d4..e907853c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -59,7 +59,11 @@ buildscript { } apply(from = "$rootDir/version.gradle.kts") + val spineBaseVersion: String by extra + val spineToolBaseVersion: String by extra + val spineTimeVersion: String by extra val mcJavaVersion: String by extra + val validationVersion: String by extra dependencies { classpath("io.spine.tools:spine-mc-java:$mcJavaVersion") @@ -68,14 +72,26 @@ buildscript { io.spine.internal.gradle.doForceVersions(configurations) - @Suppress("LocalVariableName") // For better readability. + @Suppress("LocalVariableName" /* For better readability. */) val Kotlin = io.spine.internal.dependency.Kotlin + @Suppress("LocalVariableName" /* For better readability. */) + val Jackson = io.spine.internal.dependency.Jackson + configurations.all { resolutionStrategy { force( Kotlin.stdLib, Kotlin.stdLibCommon, - ) + Jackson.databind, + Jackson.annotations, + Jackson.bom, + Jackson.core, + "io.spine:spine-base:$spineBaseVersion", + "io.spine.tools:spine-tool-base:$spineToolBaseVersion", + "io.spine.tools:spine-plugin-base:$spineToolBaseVersion", + "io.spine.validation:spine-validation-java-runtime:$validationVersion", + "io.spine:spine-time:$spineTimeVersion", + ) } } } @@ -107,6 +123,8 @@ spinePublishing { } val spineBaseVersion: String by extra +val spineToolBaseVersion: String by extra +val validationVersion: String by extra allprojects { apply(from = "$rootDir/version.gradle.kts") @@ -122,6 +140,33 @@ allprojects { version = extra["versionToPublish"]!! repositories.applyStandard() + + configurations { + forceVersions() + excludeProtobufLite() + all { + resolutionStrategy { + force( + ApacheHttp.core, + CommonsCodec.lib, + Grpc.api, + Grpc.auth, + Grpc.core, + Grpc.context, + Grpc.stub, + Grpc.protobuf, + Grpc.protobufLite, + PerfMark.api, + GoogleApis.AuthLibrary.credentials, + GoogleApis.commonProtos, + "io.spine:spine-base:$spineBaseVersion", + "io.spine.validation:spine-validation-java-runtime:$validationVersion", + "io.spine.tools:spine-tool-base:$spineToolBaseVersion", + "io.spine.tools:spine-testlib:$spineBaseVersion" + ) + } + } + } } subprojects { @@ -167,31 +212,6 @@ subprojects { google() } - configurations { - forceVersions() - excludeProtobufLite() - all { - resolutionStrategy { - force( - ApacheHttp.core, - CommonsCodec.lib, - Grpc.api, - Grpc.auth, - Grpc.core, - Grpc.context, - Grpc.stub, - Grpc.protobuf, - Grpc.protobufLite, - PerfMark.api, - GoogleApis.AuthLibrary.credentials, - GoogleApis.commonProtos, - "io.spine:spine-base:$spineBaseVersion", - "io.spine.tools:spine-testlib:$spineBaseVersion" - ) - } - } - } - val spineCoreVersion: String by extra dependencies { ErrorProne.apply { diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt index 71f7e08c..2ed3df8a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt @@ -28,16 +28,28 @@ package io.spine.internal.dependency @Suppress("unused") object Jackson { - private const val version = "2.13.2" - private const val databindVersion = "2.13.2.2" + const val version = "2.13.4" + private const val databindVersion = "2.13.4.2" + + private const val coreGroup = "com.fasterxml.jackson.core" + private const val dataformatGroup = "com.fasterxml.jackson.dataformat" + private const val moduleGroup = "com.fasterxml.jackson.module" + // https://github.com/FasterXML/jackson-core - const val core = "com.fasterxml.jackson.core:jackson-core:${version}" + const val core = "$coreGroup:jackson-core:${version}" // https://github.com/FasterXML/jackson-databind - const val databind = "com.fasterxml.jackson.core:jackson-databind:${databindVersion}" + const val databind = "$coreGroup:jackson-databind:${databindVersion}" + // https://github.com/FasterXML/jackson-annotations + const val annotations = "$coreGroup:jackson-annotations:${version}" + // https://github.com/FasterXML/jackson-dataformat-xml/releases - const val dataformatXml = "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${version}" + const val dataformatXml = "$dataformatGroup:jackson-dataformat-xml:${version}" // https://github.com/FasterXML/jackson-dataformats-text/releases - const val dataformatYaml = "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${version}" + const val dataformatYaml = "$dataformatGroup:jackson-dataformat-yaml:${version}" + // https://github.com/FasterXML/jackson-module-kotlin/releases - const val moduleKotlin = "com.fasterxml.jackson.module:jackson-module-kotlin:${version}" + const val moduleKotlin = "$moduleGroup:jackson-module-kotlin:${version}" + + // https://github.com/FasterXML/jackson-bom + const val bom = "com.fasterxml.jackson:jackson-bom:${version}" } diff --git a/version.gradle.kts b/version.gradle.kts index c69419a7..f01a1e01 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -24,9 +24,12 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -val spineBaseVersion: String by extra("2.0.0-SNAPSHOT.88") -val spineBaseTypesVersion: String by extra("2.0.0-SNAPSHOT.88") -val spineCoreVersion: String by extra("2.0.0-SNAPSHOT.94") -val mcJavaVersion: String by extra("2.0.0-SNAPSHOT.83") +val spineBaseVersion: String by extra("2.0.0-SNAPSHOT.150") +val spineBaseTypesVersion: String by extra("2.0.0-SNAPSHOT.113") +val spineToolBaseVersion: String by extra("2.0.0-SNAPSHOT.156") +val spineTimeVersion: String by extra("2.0.0-SNAPSHOT.121") +val spineCoreVersion: String by extra("2.0.0-SNAPSHOT.149") +val mcJavaVersion: String by extra("2.0.0-SNAPSHOT.132") +val validationVersion: String by extra("2.0.0-SNAPSHOT.80") -val versionToPublish: String by extra("2.0.0-SNAPSHOT.94") +val versionToPublish: String by extra("2.0.0-SNAPSHOT.149") From c6c134c852c9f92f9c7ee80a5699c6a554b92feb Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Mon, 12 Jun 2023 17:42:18 +0100 Subject: [PATCH 02/25] Update the year to `2023` in the copyright headers. --- .gitignore | 2 +- build.gradle.kts | 2 +- buildSrc/build.gradle.kts | 2 +- buildSrc/src/main/groovy/checkstyle.gradle | 2 +- buildSrc/src/main/groovy/dart/build-tasks.gradle | 2 +- buildSrc/src/main/groovy/dart/pub-publish-tasks.gradle | 2 +- buildSrc/src/main/groovy/dependencies.gradle | 2 +- buildSrc/src/main/groovy/filter-internal-javadoc.gradle | 2 +- buildSrc/src/main/groovy/generate-pom.gradle | 2 +- buildSrc/src/main/groovy/jacoco.gradle | 2 +- buildSrc/src/main/groovy/javac-args.gradle | 2 +- buildSrc/src/main/groovy/javadoc-options.gradle | 2 +- buildSrc/src/main/groovy/js/build-tasks.gradle | 2 +- buildSrc/src/main/groovy/js/configure-proto.gradle | 2 +- buildSrc/src/main/groovy/js/js.gradle | 2 +- buildSrc/src/main/groovy/js/npm-cli.gradle | 2 +- buildSrc/src/main/groovy/js/npm-publish-tasks.gradle | 2 +- buildSrc/src/main/groovy/js/update-package-version.gradle | 2 +- buildSrc/src/main/groovy/license-report-common.gradle | 2 +- buildSrc/src/main/groovy/license-report-project.gradle | 2 +- buildSrc/src/main/groovy/license-report-repo.gradle | 2 +- buildSrc/src/main/groovy/model-compiler.gradle | 2 +- buildSrc/src/main/groovy/pmd.gradle | 2 +- buildSrc/src/main/groovy/publish-proto.gradle | 2 +- buildSrc/src/main/groovy/publish.gradle | 2 +- buildSrc/src/main/groovy/run-build.gradle | 2 +- buildSrc/src/main/groovy/slow-tests.gradle | 2 +- buildSrc/src/main/groovy/test-artifacts.gradle | 2 +- buildSrc/src/main/groovy/test-output.gradle | 2 +- buildSrc/src/main/groovy/update-gh-pages.gradle | 2 +- buildSrc/src/main/kotlin/force-jacoco.gradle.kts | 2 +- .../main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/AppEngine.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/AssertK.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/AutoCommon.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/AutoService.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/AutoValue.kt | 2 +- .../main/kotlin/io/spine/internal/dependency/BouncyCastle.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt | 2 +- .../kotlin/io/spine/internal/dependency/CheckerFramework.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt | 2 +- .../main/kotlin/io/spine/internal/dependency/CommonsCodec.kt | 2 +- .../main/kotlin/io/spine/internal/dependency/CommonsLogging.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt | 2 +- .../main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/FindBugs.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/Firebase.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/Flogger.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/HttpClient.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/Jackson.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt | 2 +- .../main/kotlin/io/spine/internal/dependency/KotlinSemver.kt | 2 +- .../main/kotlin/io/spine/internal/dependency/LicenseReport.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/OsDetector.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/PerfMark.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/Protobuf.kt | 2 +- .../src/main/kotlin/io/spine/internal/dependency/Roaster.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Slf4J.kt | 2 +- .../main/kotlin/io/spine/internal/dependency/TestKitTruth.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/Build.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/Clean.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt | 2 +- .../kotlin/io/spine/internal/gradle/DependencyResolution.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/RepoSlug.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/Repositories.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/RunBuild.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/Scripts.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/StringExtensions.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/TaskName.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/base/Tasks.kt | 2 +- .../io/spine/internal/gradle/checkstyle/CheckStyleConfig.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/dart/DartContext.kt | 2 +- .../kotlin/io/spine/internal/gradle/dart/DartEnvironment.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/dart/DartExtension.kt | 2 +- .../kotlin/io/spine/internal/gradle/dart/plugin/DartPlugins.kt | 2 +- .../kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/dart/task/Build.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/dart/task/DartTasks.kt | 2 +- .../io/spine/internal/gradle/dart/task/IntegrationTest.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt | 2 +- .../kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt | 2 +- .../kotlin/io/spine/internal/gradle/github/pages/TaskName.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/github/pages/Update.kt | 2 +- .../io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt | 2 +- .../internal/gradle/github/pages/UpdateGitHubPagesExtension.kt | 2 +- buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Tasks.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/javac/Javac.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/javadoc/Encoding.kt | 2 +- .../io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt | 2 +- .../kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/javadoc/JavadocTag.kt | 2 +- .../io/spine/internal/gradle/javadoc/TaskContainerExtensions.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/JsContext.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/JsEnvironment.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/JsExtension.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt | 2 +- .../io/spine/internal/gradle/javascript/plugin/JsPlugins.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/plugin/McJs.kt | 2 +- .../io/spine/internal/gradle/javascript/plugin/Protobuf.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/task/Assemble.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/task/Check.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/task/Clean.kt | 2 +- .../io/spine/internal/gradle/javascript/task/IntegrationTest.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/task/JsTasks.kt | 2 +- .../io/spine/internal/gradle/javascript/task/LicenseReport.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/task/Publish.kt | 2 +- .../kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt | 2 +- .../io/spine/internal/gradle/publish/CheckVersionIncrement.kt | 2 +- .../io/spine/internal/gradle/publish/CloudArtifactRegistry.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt | 2 +- .../kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt | 2 +- .../kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt | 2 +- .../io/spine/internal/gradle/publish/MavenJavaPublication.kt | 2 +- .../main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt | 2 +- .../kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt | 2 +- .../kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt | 2 +- .../kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt | 2 +- .../kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt | 2 +- .../io/spine/internal/gradle/report/coverage/CodebaseFilter.kt | 2 +- .../io/spine/internal/gradle/report/coverage/FileExtension.kt | 2 +- .../io/spine/internal/gradle/report/coverage/FileExtensions.kt | 2 +- .../io/spine/internal/gradle/report/coverage/FileFilter.kt | 2 +- .../io/spine/internal/gradle/report/coverage/JacocoConfig.kt | 2 +- .../io/spine/internal/gradle/report/coverage/PathMarker.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/coverage/TaskName.kt | 2 +- .../io/spine/internal/gradle/report/license/Configuration.kt | 2 +- .../io/spine/internal/gradle/report/license/LicenseReporter.kt | 2 +- .../internal/gradle/report/license/MarkdownReportRenderer.kt | 2 +- .../internal/gradle/report/license/ModuleDataExtensions.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/license/Paths.kt | 2 +- .../spine/internal/gradle/report/license/ProjectDependencies.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/license/Tasks.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/license/Template.kt | 2 +- .../io/spine/internal/gradle/report/pom/DependencyScope.kt | 2 +- .../io/spine/internal/gradle/report/pom/DependencyWriter.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/pom/InceptionYear.kt | 2 +- .../io/spine/internal/gradle/report/pom/MarkupExtensions.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/pom/PomXmlWriter.kt | 2 +- .../io/spine/internal/gradle/report/pom/ProjectMetadata.kt | 2 +- .../io/spine/internal/gradle/report/pom/ScopedDependency.kt | 2 +- .../kotlin/io/spine/internal/gradle/report/pom/SpineLicense.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/testing/Logging.kt | 2 +- .../kotlin/io/spine/internal/gradle/testing/Multiproject.kt | 2 +- .../src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt | 2 +- .../main/kotlin/io/spine/internal/markup/MarkdownDocument.kt | 2 +- buildSrc/src/main/kotlin/pmd-settings.gradle.kts | 2 +- buildSrc/src/main/kotlin/travis-warnings.gradle.kt | 2 +- buildSrc/src/main/resources/pmd.xml | 2 +- datastore/build.gradle.kts | 2 +- .../java/io/spine/server/storage/datastore/DatastoreMedium.java | 2 +- .../spine/server/storage/datastore/DatastoreStorageFactory.java | 2 +- .../io/spine/server/storage/datastore/DatastoreWrapper.java | 2 +- .../java/io/spine/server/storage/datastore/DsIdentifier.java | 2 +- .../java/io/spine/server/storage/datastore/DsQueryIterator.java | 2 +- .../io/spine/server/storage/datastore/DsQueryPageIterator.java | 2 +- .../java/io/spine/server/storage/datastore/DsReaderLookup.java | 2 +- .../src/main/java/io/spine/server/storage/datastore/Kind.java | 2 +- .../main/java/io/spine/server/storage/datastore/ProjectId.java | 2 +- .../io/spine/server/storage/datastore/TransactionWrapper.java | 2 +- .../server/storage/datastore/config/CreateEntityStorage.java | 2 +- .../server/storage/datastore/config/CreateRecordStorage.java | 2 +- .../io/spine/server/storage/datastore/config/CreateStorage.java | 2 +- .../spine/server/storage/datastore/config/CustomStorages.java | 2 +- .../spine/server/storage/datastore/config/DsColumnMapping.java | 2 +- .../server/storage/datastore/config/EntityGroupLayout.java | 2 +- .../io/spine/server/storage/datastore/config/FlatLayout.java | 2 +- .../io/spine/server/storage/datastore/config/RecordLayout.java | 2 +- .../io/spine/server/storage/datastore/config/RecordLayouts.java | 2 +- .../java/io/spine/server/storage/datastore/config/Settings.java | 2 +- .../server/storage/datastore/config/StorageConfiguration.java | 2 +- .../io/spine/server/storage/datastore/config/TxSetting.java | 2 +- .../io/spine/server/storage/datastore/config/TxSettings.java | 2 +- .../io/spine/server/storage/datastore/config/package-info.java | 2 +- .../server/storage/datastore/delivery/DsSessionStorage.java | 2 +- .../storage/datastore/delivery/DsShardProcessingSession.java | 2 +- .../storage/datastore/delivery/DsShardedWorkRegistry.java | 2 +- .../server/storage/datastore/delivery/InboxStorageLayout.java | 2 +- .../server/storage/datastore/delivery/PrepareForWrite.java | 2 +- .../server/storage/datastore/delivery/SessionRecordColumn.java | 2 +- .../server/storage/datastore/delivery/SetWorkerIfAbsent.java | 2 +- .../spine/server/storage/datastore/delivery/package-info.java | 2 +- .../java/io/spine/server/storage/datastore/package-info.java | 2 +- .../spine/server/storage/datastore/query/ColumnPredicate.java | 2 +- .../io/spine/server/storage/datastore/query/ConvertAsIs.java | 2 +- .../java/io/spine/server/storage/datastore/query/DsFilters.java | 2 +- .../java/io/spine/server/storage/datastore/query/DsLookup.java | 2 +- .../io/spine/server/storage/datastore/query/DsLookupByIds.java | 2 +- .../spine/server/storage/datastore/query/DsLookupByQueries.java | 2 +- .../io/spine/server/storage/datastore/query/FilterAdapter.java | 2 +- .../server/storage/datastore/query/IntermediateResult.java | 2 +- .../io/spine/server/storage/datastore/query/PreparedQuery.java | 2 +- .../spine/server/storage/datastore/query/QueryWithFilter.java | 2 +- .../io/spine/server/storage/datastore/query/SortAndLimit.java | 2 +- .../java/io/spine/server/storage/datastore/query/ToRecords.java | 2 +- .../io/spine/server/storage/datastore/query/package-info.java | 2 +- .../server/storage/datastore/record/DsEntityComparator.java | 2 +- .../io/spine/server/storage/datastore/record/DsEntitySpec.java | 2 +- .../spine/server/storage/datastore/record/DsRecordStorage.java | 2 +- .../java/io/spine/server/storage/datastore/record/Entities.java | 2 +- .../spine/server/storage/datastore/record/FieldMaskApplier.java | 2 +- .../java/io/spine/server/storage/datastore/record/Indexes.java | 2 +- .../io/spine/server/storage/datastore/record/ReadOperation.java | 2 +- .../java/io/spine/server/storage/datastore/record/RecordId.java | 2 +- .../spine/server/storage/datastore/record/WriteOperation.java | 2 +- .../io/spine/server/storage/datastore/record/package-info.java | 2 +- .../spine/server/storage/datastore/tenant/DatastoreTenants.java | 2 +- .../storage/datastore/tenant/DefaultNamespaceConverter.java | 2 +- .../storage/datastore/tenant/MultitenantNamespaceSupplier.java | 2 +- .../io/spine/server/storage/datastore/tenant/Namespace.java | 2 +- .../server/storage/datastore/tenant/NamespaceConverter.java | 2 +- .../server/storage/datastore/tenant/NamespaceConverters.java | 2 +- .../spine/server/storage/datastore/tenant/NamespaceIndex.java | 2 +- .../server/storage/datastore/tenant/NamespaceSupplier.java | 2 +- .../server/storage/datastore/tenant/NsConverterFactory.java | 2 +- .../storage/datastore/tenant/PrefixedNsConverterFactory.java | 2 +- .../storage/datastore/tenant/SingleTenantNamespaceSupplier.java | 2 +- .../io/spine/server/storage/datastore/tenant/package-info.java | 2 +- .../java/io/spine/server/storage/datastore/BigDataTester.java | 2 +- .../storage/datastore/DatastoreStorageFactoryBuilderTest.java | 2 +- .../server/storage/datastore/DatastoreStorageFactoryTest.java | 2 +- .../io/spine/server/storage/datastore/DatastoreWrapperTest.java | 2 +- .../io/spine/server/storage/datastore/DsEventStoreTest.java | 2 +- .../io/spine/server/storage/datastore/DsInboxStorageTest.java | 2 +- .../test/java/io/spine/server/storage/datastore/KindTest.java | 2 +- .../java/io/spine/server/storage/datastore/ProjectIdTest.java | 2 +- .../java/io/spine/server/storage/datastore/RecordIdTest.java | 2 +- .../spine/server/storage/datastore/TransactionWrapperTest.java | 2 +- .../server/storage/datastore/TransactionalInboxStorageTest.java | 2 +- .../server/storage/datastore/config/DsColumnMappingTest.java | 2 +- .../server/storage/datastore/delivery/DsCatchUpSmokeTest.java | 2 +- .../server/storage/datastore/delivery/DsDeliverySmokeTest.java | 2 +- .../storage/datastore/delivery/DsShardedWorkRegistryTest.java | 2 +- .../storage/datastore/delivery/SessionRecordColumnTest.java | 2 +- .../storage/datastore/given/DatastoreStorageFactoryTestEnv.java | 2 +- .../server/storage/datastore/given/DatastoreWrapperTestEnv.java | 2 +- .../spine/server/storage/datastore/given/TestColumnMapping.java | 2 +- .../spine/server/storage/datastore/given/TestEnvironment.java | 2 +- .../server/storage/datastore/given/TestNamespaceSuppliers.java | 2 +- .../io/spine/server/storage/datastore/given/TestRecordSpec.java | 2 +- .../io/spine/server/storage/datastore/given/TestShardIndex.java | 2 +- .../io/spine/server/storage/datastore/given/package-info.java | 2 +- .../io/spine/server/storage/datastore/query/DsFiltersTest.java | 2 +- .../server/storage/datastore/record/DsAggregateStorageTest.java | 2 +- .../datastore/record/DsAggregateStorageTruncationTest.java | 2 +- .../server/storage/datastore/record/DsRecordStorageTest.java | 2 +- .../io/spine/server/storage/datastore/record/EntitiesTest.java | 2 +- .../io/spine/server/storage/datastore/record/IndexesTest.java | 2 +- .../server/storage/datastore/tenant/DatastoreTenantsTest.java | 2 +- .../storage/datastore/tenant/NamespaceConvertersTest.java | 2 +- .../server/storage/datastore/tenant/NamespaceIndexTest.java | 2 +- .../io/spine/server/storage/datastore/tenant/NamespaceTest.java | 2 +- .../datastore/tenant/NamespaceWithCustomConverterTest.java | 2 +- .../datastore/tenant/PrefixedNsConverterFactoryTest.java | 2 +- .../datastore/tenant/SingleTenantNamespaceSupplierTest.java | 2 +- .../server/storage/datastore/tenant/TestNamespaceIndex.java | 2 +- .../storage/datastore/tenant/given/CollegeProjection.java | 2 +- .../server/storage/datastore/tenant/given/package-info.java | 2 +- datastore/src/test/proto/spine/test/datastore/college.proto | 2 +- gcs.properties | 2 +- gradle.properties | 2 +- pubsub/build.gradle.kts | 2 +- pubsub/src/main/proto/spine/messaging/pubsub/push.proto | 2 +- scripts/create-indexes.sh | 2 +- scripts/fetch-test-report.sh | 2 +- scripts/install-gcloud.sh | 2 +- scripts/start-datastore.bat | 2 +- scripts/start-datastore.sh | 2 +- scripts/upload-artifacts.sh | 2 +- settings.gradle.kts | 2 +- stackdriver-trace/build.gradle.kts | 2 +- .../io/spine/server/trace/stackdriver/AsyncTraceService.java | 2 +- .../main/java/io/spine/server/trace/stackdriver/ProjectId.java | 2 +- .../java/io/spine/server/trace/stackdriver/ProjectName.java | 2 +- .../io/spine/server/trace/stackdriver/ShortTraceApiString.java | 2 +- .../main/java/io/spine/server/trace/stackdriver/SignalSpan.java | 2 +- .../java/io/spine/server/trace/stackdriver/SpanAttribute.java | 2 +- .../src/main/java/io/spine/server/trace/stackdriver/SpanId.java | 2 +- .../main/java/io/spine/server/trace/stackdriver/SpanName.java | 2 +- .../io/spine/server/trace/stackdriver/StackdriverTracer.java | 2 +- .../server/trace/stackdriver/StackdriverTracerFactory.java | 2 +- .../io/spine/server/trace/stackdriver/SyncTraceService.java | 2 +- .../java/io/spine/server/trace/stackdriver/TraceApiString.java | 2 +- .../main/java/io/spine/server/trace/stackdriver/TraceId.java | 2 +- .../java/io/spine/server/trace/stackdriver/TraceService.java | 2 +- .../main/java/io/spine/server/trace/stackdriver/Truncate.java | 2 +- .../java/io/spine/server/trace/stackdriver/package-info.java | 2 +- .../java/io/spine/server/trace/stackdriver/SignalSpanTest.java | 2 +- .../server/trace/stackdriver/StackdriverTracerFactoryTest.java | 2 +- .../server/trace/stackdriver/given/CountingInterceptor.java | 2 +- .../io/spine/server/trace/stackdriver/given/package-info.java | 2 +- .../src/test/proto/spine/test/stackdriver/commands.proto | 2 +- testutil-gcloud/build.gradle.kts | 2 +- .../testing/server/storage/datastore/SpyStorageFactory.java | 2 +- .../server/storage/datastore/TestDatastoreStorageFactory.java | 2 +- .../testing/server/storage/datastore/TestDatastoreWrapper.java | 2 +- .../spine/testing/server/storage/datastore/TestDatastores.java | 2 +- .../io/spine/testing/server/storage/datastore/package-info.java | 2 +- .../testing/server/storage/datastore/SpyStorageFactoryTest.java | 2 +- .../storage/datastore/TestDatastoreStorageFactoryTest.java | 2 +- .../server/storage/datastore/TestDatastoreWrapperTest.java | 2 +- .../testing/server/storage/datastore/TestDatastoresTest.java | 2 +- .../server/storage/datastore/given/ATestDatastoreWrapper.java | 2 +- .../spine/testing/server/storage/datastore/given/AnEntity.java | 2 +- .../testing/server/storage/datastore/given/package-info.java | 2 +- version.gradle.kts | 2 +- 336 files changed, 336 insertions(+), 336 deletions(-) diff --git a/.gitignore b/.gitignore index 7d44a27b..d0d15199 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # -# Copyright 2022, TeamDev. All rights reserved. +# Copyright 2023, 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. diff --git a/build.gradle.kts b/build.gradle.kts index e907853c..8d5c41ce 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 591c5ae3..3e491d95 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/checkstyle.gradle b/buildSrc/src/main/groovy/checkstyle.gradle index db3d5c52..ebfda1a9 100644 --- a/buildSrc/src/main/groovy/checkstyle.gradle +++ b/buildSrc/src/main/groovy/checkstyle.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/dart/build-tasks.gradle b/buildSrc/src/main/groovy/dart/build-tasks.gradle index 6206a93b..790f3254 100644 --- a/buildSrc/src/main/groovy/dart/build-tasks.gradle +++ b/buildSrc/src/main/groovy/dart/build-tasks.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/dart/pub-publish-tasks.gradle b/buildSrc/src/main/groovy/dart/pub-publish-tasks.gradle index 7e625e57..d35e3e56 100644 --- a/buildSrc/src/main/groovy/dart/pub-publish-tasks.gradle +++ b/buildSrc/src/main/groovy/dart/pub-publish-tasks.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/dependencies.gradle b/buildSrc/src/main/groovy/dependencies.gradle index 793d71ce..6cd0d254 100644 --- a/buildSrc/src/main/groovy/dependencies.gradle +++ b/buildSrc/src/main/groovy/dependencies.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/filter-internal-javadoc.gradle b/buildSrc/src/main/groovy/filter-internal-javadoc.gradle index 87f86142..abe28180 100644 --- a/buildSrc/src/main/groovy/filter-internal-javadoc.gradle +++ b/buildSrc/src/main/groovy/filter-internal-javadoc.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/generate-pom.gradle b/buildSrc/src/main/groovy/generate-pom.gradle index 2cd39810..60e30a21 100644 --- a/buildSrc/src/main/groovy/generate-pom.gradle +++ b/buildSrc/src/main/groovy/generate-pom.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/jacoco.gradle b/buildSrc/src/main/groovy/jacoco.gradle index cef391a4..68019aa2 100644 --- a/buildSrc/src/main/groovy/jacoco.gradle +++ b/buildSrc/src/main/groovy/jacoco.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/javac-args.gradle b/buildSrc/src/main/groovy/javac-args.gradle index 9bfb780e..bcafe10e 100644 --- a/buildSrc/src/main/groovy/javac-args.gradle +++ b/buildSrc/src/main/groovy/javac-args.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/javadoc-options.gradle b/buildSrc/src/main/groovy/javadoc-options.gradle index 0c3bcbbf..cb70a842 100644 --- a/buildSrc/src/main/groovy/javadoc-options.gradle +++ b/buildSrc/src/main/groovy/javadoc-options.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/js/build-tasks.gradle b/buildSrc/src/main/groovy/js/build-tasks.gradle index 78202430..e9cc1248 100644 --- a/buildSrc/src/main/groovy/js/build-tasks.gradle +++ b/buildSrc/src/main/groovy/js/build-tasks.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/js/configure-proto.gradle b/buildSrc/src/main/groovy/js/configure-proto.gradle index d0966a41..95db6ce2 100644 --- a/buildSrc/src/main/groovy/js/configure-proto.gradle +++ b/buildSrc/src/main/groovy/js/configure-proto.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/js/js.gradle b/buildSrc/src/main/groovy/js/js.gradle index 963f6b87..e99ee8ce 100644 --- a/buildSrc/src/main/groovy/js/js.gradle +++ b/buildSrc/src/main/groovy/js/js.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/js/npm-cli.gradle b/buildSrc/src/main/groovy/js/npm-cli.gradle index cc273357..83d520b7 100644 --- a/buildSrc/src/main/groovy/js/npm-cli.gradle +++ b/buildSrc/src/main/groovy/js/npm-cli.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/js/npm-publish-tasks.gradle b/buildSrc/src/main/groovy/js/npm-publish-tasks.gradle index 63abf673..f41bbd01 100644 --- a/buildSrc/src/main/groovy/js/npm-publish-tasks.gradle +++ b/buildSrc/src/main/groovy/js/npm-publish-tasks.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/js/update-package-version.gradle b/buildSrc/src/main/groovy/js/update-package-version.gradle index b6b64b8f..eabcf6d9 100644 --- a/buildSrc/src/main/groovy/js/update-package-version.gradle +++ b/buildSrc/src/main/groovy/js/update-package-version.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/license-report-common.gradle b/buildSrc/src/main/groovy/license-report-common.gradle index f506cf24..cae7e361 100644 --- a/buildSrc/src/main/groovy/license-report-common.gradle +++ b/buildSrc/src/main/groovy/license-report-common.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/license-report-project.gradle b/buildSrc/src/main/groovy/license-report-project.gradle index d6cfb9f8..d4257589 100644 --- a/buildSrc/src/main/groovy/license-report-project.gradle +++ b/buildSrc/src/main/groovy/license-report-project.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/license-report-repo.gradle b/buildSrc/src/main/groovy/license-report-repo.gradle index c8212a85..6cbe7b5a 100644 --- a/buildSrc/src/main/groovy/license-report-repo.gradle +++ b/buildSrc/src/main/groovy/license-report-repo.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/model-compiler.gradle b/buildSrc/src/main/groovy/model-compiler.gradle index f254efdb..33ef24bd 100644 --- a/buildSrc/src/main/groovy/model-compiler.gradle +++ b/buildSrc/src/main/groovy/model-compiler.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/pmd.gradle b/buildSrc/src/main/groovy/pmd.gradle index d6a1bd47..a0e019b3 100644 --- a/buildSrc/src/main/groovy/pmd.gradle +++ b/buildSrc/src/main/groovy/pmd.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/publish-proto.gradle b/buildSrc/src/main/groovy/publish-proto.gradle index 113743cb..87f1bc4a 100644 --- a/buildSrc/src/main/groovy/publish-proto.gradle +++ b/buildSrc/src/main/groovy/publish-proto.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/publish.gradle b/buildSrc/src/main/groovy/publish.gradle index db93ce2d..844d44b7 100644 --- a/buildSrc/src/main/groovy/publish.gradle +++ b/buildSrc/src/main/groovy/publish.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/run-build.gradle b/buildSrc/src/main/groovy/run-build.gradle index fd245957..e289bf96 100644 --- a/buildSrc/src/main/groovy/run-build.gradle +++ b/buildSrc/src/main/groovy/run-build.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/slow-tests.gradle b/buildSrc/src/main/groovy/slow-tests.gradle index 5b9797a7..a461e25c 100644 --- a/buildSrc/src/main/groovy/slow-tests.gradle +++ b/buildSrc/src/main/groovy/slow-tests.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/test-artifacts.gradle b/buildSrc/src/main/groovy/test-artifacts.gradle index 06a5e055..f3b53b64 100644 --- a/buildSrc/src/main/groovy/test-artifacts.gradle +++ b/buildSrc/src/main/groovy/test-artifacts.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/test-output.gradle b/buildSrc/src/main/groovy/test-output.gradle index 4dc27512..65668d99 100644 --- a/buildSrc/src/main/groovy/test-output.gradle +++ b/buildSrc/src/main/groovy/test-output.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/groovy/update-gh-pages.gradle b/buildSrc/src/main/groovy/update-gh-pages.gradle index dcce53f9..d2d09912 100644 --- a/buildSrc/src/main/groovy/update-gh-pages.gradle +++ b/buildSrc/src/main/groovy/update-gh-pages.gradle @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/force-jacoco.gradle.kts b/buildSrc/src/main/kotlin/force-jacoco.gradle.kts index 310f4243..75786eda 100644 --- a/buildSrc/src/main/kotlin/force-jacoco.gradle.kts +++ b/buildSrc/src/main/kotlin/force-jacoco.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt index 068ae59c..7e626511 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt index dd518a0c..9a4ba1a3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AppEngine.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AppEngine.kt index 0d7fee39..35731e87 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AppEngine.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AppEngine.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt index 8d42b619..eb52178d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoCommon.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoCommon.kt index 4053ef58..64690c0f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoCommon.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoCommon.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoService.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoService.kt index 80b79975..aeb77648 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoService.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoService.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoValue.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoValue.kt index 5b630bf1..163e48f9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoValue.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoValue.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt index c0567edd..3ec97486 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt index 1e3effba..9ee47249 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt index 75cc67f2..5ba1a0a2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt index 79a4036c..db24b785 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCodec.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCodec.kt index 97dbed87..d1d3915b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCodec.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCodec.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsLogging.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsLogging.kt index e9d148f1..d7781cf5 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsLogging.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsLogging.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt index af26ad74..17c082c6 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt index ca73fedc..29daf0e2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt index 97f55936..ae4f658f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/FindBugs.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/FindBugs.kt index 52b05f75..50e55e3e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/FindBugs.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/FindBugs.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Firebase.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Firebase.kt index 5e471caa..8203a129 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Firebase.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Firebase.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Flogger.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Flogger.kt index 4332178f..f6a649bd 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Flogger.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Flogger.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt index af663dc1..86a2475c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt index a764af27..4d9a3f98 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt index 22996e4d..7f3e8da9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt index e161ee1e..568c5b2c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt index faaf3b8b..42e24103 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt index 849f1f4a..af1a0344 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt index 9ed18f26..0dd2df5f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt index 0c436ce4..80c51b35 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt index 2ed3df8a..f458f464 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt index 424c45fb..c87b9ba4 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt index e9bdb9b3..07bb28f3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt index 9fb7bd59..f403138a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt index 160fdbfb..58fc9a35 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt index 5fc4cace..a5cf7c0c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt index 47fd7de4..ddf8d733 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/LicenseReport.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/LicenseReport.kt index 8d079763..72694558 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/LicenseReport.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/LicenseReport.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt index dfcd80ef..6af60700 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt index 4ad91c6f..f02122d9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/OsDetector.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/OsDetector.kt index 7f4bb16b..44253c57 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/OsDetector.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/OsDetector.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/PerfMark.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/PerfMark.kt index 8fd1ed2a..c16e6f6c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/PerfMark.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/PerfMark.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt index 27d27206..52d08ea8 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt index badd7717..65f78082 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt index 1da0906a..c4a4fd11 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Roaster.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Roaster.kt index 2d237060..33e45952 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Roaster.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Roaster.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Slf4J.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Slf4J.kt index 4cfa0494..7d9f6df5 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Slf4J.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Slf4J.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt index 8d572d9b..30649dc4 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt index 48c1f2df..2303d5a3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Build.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Build.kt index c42a3c08..f1c0331c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Build.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Build.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Clean.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Clean.kt index ad5c1c59..1f9b1cc3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Clean.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Clean.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt index 8a3db510..87ec070b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt index 168c0798..86bfbcab 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt index a2e34b3a..b51bb20f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/RepoSlug.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/RepoSlug.kt index 48a49385..b713a3b8 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/RepoSlug.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/RepoSlug.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt index db807672..adac9f8b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunBuild.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunBuild.kt index 03cef701..a39ffed5 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunBuild.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunBuild.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt index 12ad0111..d5bb989e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt index eced40e4..51aa52a2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Scripts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Scripts.kt index 7baf9454..9e9bed78 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Scripts.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Scripts.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/StringExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/StringExtensions.kt index ae19007b..9d5253b7 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/StringExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/StringExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/TaskName.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/TaskName.kt index e6967b47..24b587f0 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/TaskName.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/TaskName.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt index bcec4a56..e1a320c7 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/base/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/base/Tasks.kt index 10290712..6fb9fbb6 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/base/Tasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/base/Tasks.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/checkstyle/CheckStyleConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/checkstyle/CheckStyleConfig.kt index e3a0ef29..42d1f62c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/checkstyle/CheckStyleConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/checkstyle/CheckStyleConfig.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartContext.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartContext.kt index 2f33b281..ed2eff70 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartContext.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartContext.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartEnvironment.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartEnvironment.kt index 7b10f64c..160e1ff8 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartEnvironment.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartEnvironment.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartExtension.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartExtension.kt index cf585a9f..d4bd4d84 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartExtension.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/DartExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/DartPlugins.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/DartPlugins.kt index 061e2add..43d8bb01 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/DartPlugins.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/DartPlugins.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt index 350f0fbd..b363616c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Build.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Build.kt index 79c387c3..55ec5ca1 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Build.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Build.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/DartTasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/DartTasks.kt index 5ebe9272..50574dee 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/DartTasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/DartTasks.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/IntegrationTest.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/IntegrationTest.kt index f12b96fd..b2729c3f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/IntegrationTest.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/IntegrationTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt index 92eb2904..ae3f04cc 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt index 595e07a1..b17bc27c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt index cac6e41a..9ff04268 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt index c9c7e7db..90aab832 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/TaskName.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/TaskName.kt index 2823416d..846a4548 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/TaskName.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/TaskName.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Update.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Update.kt index 283405dd..023d62b0 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Update.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Update.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt index e3c1e6ce..43b5b19d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPagesExtension.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPagesExtension.kt index ec654fbf..f2f3ab89 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPagesExtension.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPagesExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Tasks.kt index 8f2344fe..3e0aad9d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Tasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Tasks.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt index df31e581..3b8b1c4c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/Javac.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/Javac.kt index 839252d6..de026874 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/Javac.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/Javac.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/Encoding.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/Encoding.kt index f7129683..bf8601b9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/Encoding.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/Encoding.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt index 72d7f6a1..27ee98c5 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt index f6002cad..da94b0ad 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocTag.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocTag.kt index 2a278bd9..8eb8b17c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocTag.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocTag.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/TaskContainerExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/TaskContainerExtensions.kt index f80d53ee..3897118c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/TaskContainerExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/TaskContainerExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsContext.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsContext.kt index 8754173f..75cd4011 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsContext.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsContext.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsEnvironment.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsEnvironment.kt index f2d10aca..bce4fa8f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsEnvironment.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsEnvironment.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsExtension.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsExtension.kt index 4fe1d3ff..22ebf521 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsExtension.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/JsExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt index 51d312c8..8256923f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/JsPlugins.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/JsPlugins.kt index 6a17820d..60a088a9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/JsPlugins.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/JsPlugins.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/McJs.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/McJs.kt index 56b1263a..61e59d56 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/McJs.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/McJs.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Protobuf.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Protobuf.kt index d99d2a28..8ba85e8e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Protobuf.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Protobuf.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Assemble.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Assemble.kt index dbc770df..47393076 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Assemble.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Assemble.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Check.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Check.kt index 4fdd69f9..c15f3e23 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Check.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Check.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Clean.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Clean.kt index 6658b830..46805917 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Clean.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Clean.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/IntegrationTest.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/IntegrationTest.kt index fadcc09c..dd218013 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/IntegrationTest.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/IntegrationTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/JsTasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/JsTasks.kt index b384fd3a..b13d996d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/JsTasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/JsTasks.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/LicenseReport.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/LicenseReport.kt index 99935edd..8f8f6ff2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/LicenseReport.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/LicenseReport.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Publish.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Publish.kt index 486d831c..01a67f5c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Publish.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Publish.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt index cbf3aaef..f758fc7f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt index 05bafcb0..de16a145 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt index 81acb3ae..947b769e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt index aa4da982..8a4db8b5 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudArtifactRegistry.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudArtifactRegistry.kt index 143ea25c..4751d560 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudArtifactRegistry.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudArtifactRegistry.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt index 48cd8585..148ebce9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CloudRepo.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt index 3d5518d8..7ede810e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt index 0423ee08..807b2319 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt index cb5fa2f0..a8b8fde1 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt index b9ffb592..ffa31c44 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt index ef048f2b..d020e968 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt index d1e355d8..c68e57a5 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt index 5abdc10f..27ed0703 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt index 2aaa646f..30cfc08c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt index b132638c..f41d72b6 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt index 97233992..39c635db 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/CodebaseFilter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/CodebaseFilter.kt index 89e29129..4b0a9cc3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/CodebaseFilter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/CodebaseFilter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileExtension.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileExtension.kt index 97ab594e..75763ddf 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileExtension.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileExtensions.kt index 4a427979..69193bae 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileFilter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileFilter.kt index 1f4b3828..cc80ea18 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileFilter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/FileFilter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt index 5e7fff47..f67f9b80 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/PathMarker.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/PathMarker.kt index 00fdf243..06b0bc5d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/PathMarker.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/PathMarker.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/TaskName.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/TaskName.kt index 76d34586..c81c24c9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/TaskName.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/TaskName.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Configuration.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Configuration.kt index 65fd036c..32b24b28 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Configuration.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Configuration.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/LicenseReporter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/LicenseReporter.kt index be3e250d..f7f1a312 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/LicenseReporter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/LicenseReporter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/MarkdownReportRenderer.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/MarkdownReportRenderer.kt index ebd62d5b..e1cd8afd 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/MarkdownReportRenderer.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/MarkdownReportRenderer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ModuleDataExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ModuleDataExtensions.kt index c219dec3..b472396b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ModuleDataExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ModuleDataExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Paths.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Paths.kt index cf1f4602..89fb859d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Paths.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Paths.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ProjectDependencies.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ProjectDependencies.kt index 164df070..fc90bb3b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ProjectDependencies.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ProjectDependencies.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Tasks.kt index 4206f3d4..6a57be5f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Tasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Tasks.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Template.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Template.kt index f8f835ea..3eccbca9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Template.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/Template.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyScope.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyScope.kt index 6a11b7c1..9c1f1ed6 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyScope.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyScope.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyWriter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyWriter.kt index 8772219a..ab189033 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyWriter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyWriter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/InceptionYear.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/InceptionYear.kt index a1e14666..ab4bc1cc 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/InceptionYear.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/InceptionYear.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/MarkupExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/MarkupExtensions.kt index e34beb75..214931a4 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/MarkupExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/MarkupExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt index 3fca911c..389604d2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt index 8b9ab504..3fe39649 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomXmlWriter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomXmlWriter.kt index 3df34034..c16fe767 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomXmlWriter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomXmlWriter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ProjectMetadata.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ProjectMetadata.kt index 40c84f29..ad1cbb74 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ProjectMetadata.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ProjectMetadata.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ScopedDependency.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ScopedDependency.kt index 868d4332..d7e09880 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ScopedDependency.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ScopedDependency.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/SpineLicense.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/SpineLicense.kt index 7c95db27..080de4c9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/SpineLicense.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/SpineLicense.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Logging.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Logging.kt index 00143e60..de74b08f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Logging.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt index 25ccac94..4c15d912 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt index 841d4c7e..5ac10159 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/markup/MarkdownDocument.kt b/buildSrc/src/main/kotlin/io/spine/internal/markup/MarkdownDocument.kt index a7088967..a8fb5373 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/markup/MarkdownDocument.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/markup/MarkdownDocument.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/pmd-settings.gradle.kts b/buildSrc/src/main/kotlin/pmd-settings.gradle.kts index 03e69a67..a718b1f6 100644 --- a/buildSrc/src/main/kotlin/pmd-settings.gradle.kts +++ b/buildSrc/src/main/kotlin/pmd-settings.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/kotlin/travis-warnings.gradle.kt b/buildSrc/src/main/kotlin/travis-warnings.gradle.kt index 60770176..14acad05 100644 --- a/buildSrc/src/main/kotlin/travis-warnings.gradle.kt +++ b/buildSrc/src/main/kotlin/travis-warnings.gradle.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022, TeamDev. All rights reserved. + * Copyright 2023, 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. diff --git a/buildSrc/src/main/resources/pmd.xml b/buildSrc/src/main/resources/pmd.xml index 734aeacc..72e04058 100644 --- a/buildSrc/src/main/resources/pmd.xml +++ b/buildSrc/src/main/resources/pmd.xml @@ -1,7 +1,7 @@ ", - System.lineSeparator(), - description, - System.lineSeparator()) - return descriptionComment - } - - /** - * Obtains a string that contains the name and the version of the current project. - */ - private String rootProjectData() { - Writer writer = new StringWriter() - MarkupBuilder xmlBuilder = new MarkupBuilder(writer) - xmlBuilder.groupId(this.groupId) - xmlBuilder.artifactId(this.artifactId) - xmlBuilder.version(this.version) - return writer.toString() - } - - /** - * Writes the XML metadata using the specified writer. - */ - private static void writeHeader(StringWriter stringWriter) { - stringWriter.write(XML_METADATA) - stringWriter.write(System.lineSeparator()) - stringWriter.write(PROJECT_SCHEMA_LOCATION) - stringWriter.write(System.lineSeparator()) - stringWriter.write(MODEL_VERSION) - stringWriter.write(System.lineSeparator()) - } -} - -/** - * Dependencies of the project expressed as XML. - * - *

Subprojects dependencies are included, transitive dependencies are not included. - * - *

Example: - *

- * {@code
- *  
- *      
- *          io.spine
- *          base
- *          1.0.0-pre7
- *}
- * 
- */ -class ProjectDependenciesAsXml { - - private final Set firstLevelDependencies - - private ProjectDependenciesAsXml(Set dependencySet) { - this.firstLevelDependencies = new TreeSet<>(dependencySet) - } - - /** Creates a new instance based on the specified project. */ - static ProjectDependenciesAsXml of(Project project) { - Set dependencies = projectDependencies(project) - return new ProjectDependenciesAsXml(dependencies) - } - - /** - * Writes the dependencies using the specified writer. - * - *

Used writer will not be closed. - */ - void writeUsing(Writer writer) { - MarkupBuilder xmlBuilder = new MarkupBuilder(writer) - xmlBuilder.dependencies() { - firstLevelDependencies - .forEach { projectDep -> - xmlBuilder.dependency { - groupId(projectDep.dependency().group) - artifactId(projectDep.dependency().name) - version(projectDep.dependency().version) - if (projectDep.hasDefinedScope()) { - scope(projectDep.scopeName()) - } - } - } - } - } - - private static Set projectDependencies(Project project) { - Set firstLevelDependencies = new HashSet<>() - firstLevelDependencies.addAll(dependenciesFromAllConfigurations(project)) - project.subprojects.forEach { subproject -> - Set subprojectDeps = dependenciesFromAllConfigurations(subproject) - firstLevelDependencies.addAll(subprojectDeps) - } - return firstLevelDependencies.stream().sorted().distinct().collect(toSet()) - } - - private static Set dependenciesFromAllConfigurations(Project project) { - Set result = new HashSet<>() - project.configurations.forEach { c -> - def configuration = c - if (isResolvable(c)) { - // Force configuration resolution. - configuration.resolvedConfiguration - } - configuration.dependencies.forEach { - if (isExternal(it)) { - DependencyWithScope dependency = DependencyWithScope.of(it, configuration) - result.add(dependency) - } - } - } - return result - } - - static boolean isResolvable(Configuration config) { - config.hasProperty("canBeResolved") && config.canBeResolved - } - - private static boolean isExternal(Dependency dependency) { - return AbstractExternalModuleDependency.isAssignableFrom(dependency.class) - } -} - -/** - * A project dependency with its scope. - * - * @see - * - * More on dependency scopes . - */ -class DependencyWithScope implements Comparable { - - private final Dependency dependency - private final DependencyScope scope - - /** - * A map that contains the relations of known Gradle configuration names - * to their Maven dependency scope equivalents. - */ - private static Map CONFIG_TO_SCOPE - - - /** - * Performs comparison of {@code DependencyWithScope} instances based on the following rules: - * - *

    - *
  • Compares the scope of the dependency first. Dependencies with lower scope - * {@linkplain #dependencyPriority priority} number goes first. - *
  • For dependencies with same scope does the lexicographical group name comparison. - *
  • For dependencies within the same group does the lexicographical artifact - * name comparison. - *
  • For dependencies with the same artifact name does the lexicographical artifact - * version comparison. - *
- */ - private static final Comparator COMPARATOR = Comparator - .comparingInt { it.dependencyPriority() } - .thenComparing((Function) { it.dependency().group }) - .thenComparing((Function) { it.dependency().name }) - .thenComparing((Function) { it.dependency().version }) - - static { - final DependencyScope compile = DependencyScope.compile - final DependencyScope runtime = DependencyScope.runtime - final DependencyScope provided = DependencyScope.provided - - CONFIG_TO_SCOPE = new HashMap<>() - - /* - * Configurations from the Gradle Java plugin that are known to be mapped to the `compile` - * scope. - * - * Dependencies with the `compile` Maven scope are propagated to dependent projects. - * - * More at https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations - */ - CONFIG_TO_SCOPE.put("compile", compile) - CONFIG_TO_SCOPE.put("implementation", compile) - CONFIG_TO_SCOPE.put("api", compile) - - /* - * Configurations from the Gradle Java plugin that are known to be mapped to the `runtime` - * scope. - * - * Dependencies with the `runtime` Maven scopes are required for execution only. - */ - CONFIG_TO_SCOPE.put("runtime", runtime) - CONFIG_TO_SCOPE.put("runtimeOnly", runtime) - CONFIG_TO_SCOPE.put("runtimeClasspath", runtime) - CONFIG_TO_SCOPE.put("default", runtime) - - - /* - * Configurations from the Gradle Java plugin that are known to be mapped to the `provided` - * scope. - * - * Dependencies with the `provided` Maven scope are not propagated to dependent projects - * but are required during the compilation. - */ - CONFIG_TO_SCOPE.put("compileOnly", provided) - CONFIG_TO_SCOPE.put("compileOnlyApi", provided) - CONFIG_TO_SCOPE.put("annotationProcessor", provided) - } - - private DependencyWithScope(Dependency dependency, DependencyScope scope) { - this.dependency = dependency - this.scope = scope - } - - /** - * Creates a new instance based on the specified dependency and its configuration. - * - *

The scope of the dependency is based on the name of the configuration. - */ - static DependencyWithScope of(Dependency dependency, Configuration configuration) { - String configurationName = configuration.name - if (CONFIG_TO_SCOPE.containsKey(configurationName)) { - return new DependencyWithScope(dependency, CONFIG_TO_SCOPE.get(configurationName)) - } - if (configurationName.toLowerCase().startsWith("test")) { - return new DependencyWithScope(dependency, DependencyScope.test) - } - return new DependencyWithScope(dependency, DependencyScope.undefined) - } - - /** - * Obtains the layout priority of a scope. - * - * Layout priority determines what scopes come first in the generated {@code pom.xml} file. - * Dependencies with a lower priority number go on top. - */ - int dependencyPriority() { - switch(scope) { - case DependencyScope.compile: - return 0 - case DependencyScope.runtime: - return 1 - case DependencyScope.test: - return 2 - default: - return 3 - } - } - - /** Obtains the scope name of this dependency .*/ - String scopeName() { - return scope.name() - } - - /** Obtains the Gradle dependency. */ - Dependency dependency() { - return this.dependency - } - - /** Obtains the Maven scope of this dependency. */ - DependencyScope scope() { - return this.scope - } - - /** - * Returns {@code true} if this dependency has a defined scope, returns {@code false} otherwise. - */ - boolean hasDefinedScope() { return scope != DependencyScope.undefined } - - @Override - boolean equals(o) { - if (this.is(o)) return true - if (getClass() != o.class) return false - - DependencyWithScope that = (DependencyWithScope) o - - if (dependency.group != that.dependency.group) return false - if (dependency.name != that.dependency.name) return false - if (dependency.version != that.dependency.version) return false - - return true - } - - @Override - int hashCode() { - int result = (dependency != null ? dependency.hashCode() : 0) - return result - } - - @Override - int compareTo(DependencyWithScope o) { - return COMPARATOR.compare(this, o) - } - - /** - * A Maven dependency scope. - */ - static enum DependencyScope { - undefined, - compile, - provided, - runtime, - test, - system - /* - `import` is also a scope, however, it can't be used outside the `` - section, which is outside of the scope of this script - */ - } -} - -/** - * Information about the licences used by Spine in XML form. - */ -class SpineLicenceAsXml { - - private static final String NAME = "Apache License, Version 2.0" - private static final String URL = "https://www.apache.org/licenses/LICENSE-2.0.txt" - private static final String DISTRIBUTION = "repo" - - /** Prevents instantiation. */ - private SpineLicenceAsXml() { - } - - /** - * Writes information about the Spine licence using the specified writer. - */ - static void writeUsing(Writer fileWriter) { - MarkupBuilder xmlBuilder = new MarkupBuilder(fileWriter) - xmlBuilder.licenses { - license { - name(NAME) - url(SpineLicenceAsXml.URL) - distribution(DISTRIBUTION) - } - } - } -} - -/** - * Information about the root project. - * - *

Root project is the project for which the {@code generatePom} is executed. - * - *

Includes group ID, artifact name and the version. - */ -class RootProjectData { - - private final Project project - private final String groupId - private final String artifactId - private final String version - - private RootProjectData(Project project, String group, String artifactId, String version) { - this.project = project - this.groupId = group - this.artifactId = artifactId - this.version = version - } - - /** - * Creates a new instance. - * - *

Data from the specified project is prioritized. - * If a property (group ID, artifact name or version) is not found in the project, - * it is taken from the specified extension. - */ - static RootProjectData fromEither(Project project, /* or */ ExtraPropertiesExtension extension) { - boolean groupMissingFromProject = project.group == null || project.group.isEmpty() - boolean nameMissingFromProject = project.name == null || project.name.isEmpty() - boolean versionMissingFromProject = project.version == null || project.version.isEmpty() - - String groupId = groupMissingFromProject ? extension.groupId : project.group - String name = nameMissingFromProject ? extension.artifactId : project.name - String version = versionMissingFromProject ? extension.version : project.version - - return new RootProjectData(project, groupId, name, version) - } - - /** Obtains the project object matching the root project. */ - Project project() { - return this.project - } - - /** Obtains the group ID of the root project. */ - String groupId() { - return this.groupId - } - - /** Obtains the artifact ID of the root project. */ - String artifactId() { - return this.artifactId - } - - /** Obtains the version of the root project. */ - String version() { - return this.version - } -} diff --git a/buildSrc/src/main/groovy/jacoco.gradle b/buildSrc/src/main/groovy/jacoco.gradle deleted file mode 100644 index 68019aa2..00000000 --- a/buildSrc/src/main/groovy/jacoco.gradle +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -// Apply this script to enable the combined JaCoCo test report. -// -// This task combines the XML report results from all Java sub-projects. -// Inspired by: https://gist.github.com/aalmiray/e6f54aa4b3803be0bcac -// -// This task runs after `:check` task. - -import groovy.io.FileType - -import java.util.stream.Collectors - -// Required to grab dependencies for `jacocoRootReport` task. -repositories { - mavenCentral() -} - -println("`jacoco.gradle` script is deprecated. Please use the `JacocoConfig` instead.") - -// Adds the `:check` task. -apply plugin: 'base' - -final def javaProjects = subprojects.findAll { it.pluginManager.hasPlugin('jacoco') } -final def jacocoReports = file("${rootProject.buildDir}/subreports/jacoco/") - -task copyReports(dependsOn: javaProjects.jacocoTestReport, type: Copy) { - description = "Copies JaCoCo reports from subprojects into a single directory in the root project." - - from files(javaProjects.jacocoTestReport.executionData) - into jacocoReports - - rename { "${UUID.randomUUID().toString()}.exec" } -} - -// Create an combined coverage report across Java modules, -// excluding the generated content from the coverage stats. -// -task jacocoRootReport(dependsOn: ':copyReports', type: JacocoReport) { - - final def sourceDirs = CodebaseFilter.nonGeneratedOnly(files(javaProjects.sourceSets.main.java.srcDirs)) - additionalSourceDirs.from sourceDirs - sourceDirectories.from sourceDirs - executionData.from fileTree(jacocoReports) - - final def filter = new CodebaseFilter(project, - javaProjects.sourceSets.main.java.srcDirs, - javaProjects.sourceSets.main.output) - final def nonGeneratedFiles = files(filter.findNonGeneratedCompiledFiles()) - classDirectories.from nonGeneratedFiles - additionalClassDirs.from nonGeneratedFiles - - reports { - html.required.set(true) - xml.required.set(true) - csv.required.set(false) - } - onlyIf = { - true - } -} - -check.dependsOn jacocoRootReport - -/** - * Serves to distinguish the {@code .java} and {@code .class} files built from - * the Protobuf definitions from the human-created production code. - */ -class CodebaseFilter { - - private static final String GENERATED_PATH_MARKER = "generated" - - private static final String JAVA_SRC_FOLDER_MARKER = "/java/" - private static final String SPINE_JAVA_SRC_FOLDER_MARKER = "main/spine/" - private static final String GRPC_SRC_FOLDER_MARKER = "/main/grpc/" - - private static final String JAVA_OUTPUT_FOLDER_MARKER = "/main/" - - private static final String JAVA_SOURCE_FILE_EXTENSION = ".java" - private static final String COMPILED_CLASS_FILE_EXTENSION = ".class" - private static final String ANONYMOUS_CLASS_MARKER = '$' - private static final String ANONYMOUS_CLASS_PATTERN = "\\${ANONYMOUS_CLASS_MARKER}" - - private final Project project - private final def javaSrcDirs - private final def outputDirs - - CodebaseFilter(final Project project, final javaSrcDirs, final outputDirs) { - this.project = project - this.javaSrcDirs = javaSrcDirs - this.outputDirs = outputDirs - } - - static FileCollection nonGeneratedOnly(final FileCollection files) { - return files.filter { - !it.absolutePath.contains(GENERATED_PATH_MARKER) - } - } - - static FileCollection generatedOnly(final FileCollection files) { - return files.filter { - it.absolutePath.contains(GENERATED_PATH_MARKER) - } - } - - private static String parseClassName(final File file, final String sourceFolderMarker, final String extension) { - - final def index = file.absolutePath.lastIndexOf(sourceFolderMarker) - if (index > 0) { - def filePathInFolder = file.absolutePath.substring(index + sourceFolderMarker.length()) - if (filePathInFolder.endsWith(extension)) { - filePathInFolder = filePathInFolder.substring(0, filePathInFolder.length() - extension.length()) - - final def className = filePathInFolder.replace('/', '.') - return className - } else { - return null - } - } else { - return null - } - } - - private LinkedList getGeneratedClassNames() { - final def sourceFiles = project.files(javaSrcDirs) - final def generatedSourceFiles = generatedOnly(sourceFiles) - - final def generatedClassNames = [] - generatedSourceFiles.each { final folder -> - if (folder.exists() && folder.isDirectory()) { - folder.eachFileRecurse(FileType.FILES) { final aFile -> - final def name = parseClassName(aFile, JAVA_SRC_FOLDER_MARKER, JAVA_SOURCE_FILE_EXTENSION) - if (name != null) { - generatedClassNames.add(name) - } else { - // Try another folder prefix; perhaps this file is gRPC service. - final def generatedByGrpc = parseClassName(aFile, - GRPC_SRC_FOLDER_MARKER, - JAVA_SOURCE_FILE_EXTENSION) - if (generatedByGrpc != null) { - generatedClassNames.add(generatedByGrpc) - } else { - // Try one more folder prefix; perhaps this file is generated by Spine. - final def generatedBySpine = - parseClassName(aFile, SPINE_JAVA_SRC_FOLDER_MARKER, JAVA_SOURCE_FILE_EXTENSION) - if (generatedBySpine != null) { - generatedClassNames.add(generatedBySpine) - } - } - } - } - } - } - - return generatedClassNames - } - - List findNonGeneratedCompiledFiles() { - log("Source dirs for code coverage calculation:") - final def srcDirs = project.files(javaSrcDirs) - srcDirs.each { - log(" - ${it}") - } - - final def generatedClassNames = getGeneratedClassNames() - log(generatedClassNames.join('\n')) - final def nonGeneratedClassTree = outputDirs - .stream() - .flatMap { it.getClassesDirs().files.stream() } - .map { final srcFile -> - log("Filtering out the generated classes for ${srcFile}") - - // Return the filtered `fileTree`s as a collected result. - return project.fileTree(dir: srcFile, exclude: { final details -> - def className = parseClassName(details.file, JAVA_OUTPUT_FOLDER_MARKER, COMPILED_CLASS_FILE_EXTENSION) - - // Handling anonymous classes as well. - // They should be associated with the same `.java` file as their parent class. - if (className != null && className.contains(ANONYMOUS_CLASS_MARKER)) { - // Assuming there cannot be more than a single `$`. - className = className.split(ANONYMOUS_CLASS_PATTERN)[0] - } - return generatedClassNames.contains(className) - }) - }.collect(Collectors.toList()) - return nonGeneratedClassTree - } - - private void log(final String message) { - project.logger.debug(message) - } -} diff --git a/buildSrc/src/main/groovy/javac-args.gradle b/buildSrc/src/main/groovy/javac-args.gradle deleted file mode 100644 index bcafe10e..00000000 --- a/buildSrc/src/main/groovy/javac-args.gradle +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/* - * This script configures Java Compiler. - */ - -println("`javac-args.gradle` script is deprecated. Please use `JavaCompile.configureJavac()` " + - "and `JavaCompile.configureErrorProne()` utilities instead.") - -tasks.withType(JavaCompile) { - - if (JavaVersion.current() != JavaVersion.VERSION_1_8) { - throw new GradleException("Spine Event Engine can be built with JDK 8 only." + - " Supporting JDK 11 and above at build-time is planned in 2.0 release." + - " Please use the pre-built binaries available in the Spine Maven repository." + - " See https://github.com/SpineEventEngine/base/issues/457.") - } - - // Explicitly states the encoding of the source and test source files, ensuring - // correct execution of the `javac` task. - // - // Also promotes compiler warnings to errors, so that the build fails on warnings. - // This includes Error Prone warnings - options.encoding = 'UTF-8' - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - // The last command line argument is temporarily commented out because of - // this issue: https://github.com/SpineEventEngine/config/issues/173 - // Please restore when the issue is resolved. - // << "-Werror" - - // Configure Error Prone: - // 1. Exclude generated sources from being analyzed by Error Prone. - // 2. Turn the check off until Error Prone can handle `@Nested` JUnit classes. - // See issue: https://github.com/google/error-prone/issues/956 - // 3. Turn off checks which report unused methods and unused method parameters. - // See issue: https://github.com/SpineEventEngine/config/issues/61 - // - // For more config details see: - // https://github.com/tbroyer/gradle-errorprone-plugin/tree/master#usage - - options.errorprone.errorproneArgs.addAll('-XepExcludedPaths:.*/generated/.*', - '-Xep:ClassCanBeStatic:OFF', - '-Xep:UnusedMethod:OFF', - '-Xep:UnusedVariable:OFF', - '-Xep:CheckReturnValue:OFF', - '-Xep:FloggerSplitLogStatement:OFF') -} diff --git a/buildSrc/src/main/groovy/javadoc-options.gradle b/buildSrc/src/main/groovy/javadoc-options.gradle deleted file mode 100644 index cb70a842..00000000 --- a/buildSrc/src/main/groovy/javadoc-options.gradle +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/* - * This script enables the new Javadoc tags in the build. - * - * The tags are: - * 1. @apiNote - the additional notes and commentaries regarding the API - * 2. @implSpec - the implementation specification - * 3. @implNote - the commentaries and notes about the implementation - * - * It also explicitly states the encoding of the source files from which the Javadoc is composed, - * ensuring correct execution of the `javadoc` task. - * - * For the detailed description of the new tags, see: - * https://blog.codefx.org/java/new-javadoc-tags/#apiNote-implSpec-and-implNote - * - * This script should be applied to the `subprojects` section of the root project, - * or to the specific child projects. - */ - -ext { - javadocOptions = [ - - // New tags which are used in the code and titles for them. - "tags" : ["apiNote:a:API Note:", - "implSpec:a:Implementation Requirements:", - "implNote:a:Implementation Note:"], - - // Encoding of the source files. - "encoding" : 'UTF-8' - ] -} - -javadoc { - source = sourceSets.main.allJava - options.tags = javadocOptions.tags - options.encoding = javadocOptions.encoding -} - -// The below config avoids numerous warnings for missing @param tags. -// As suggested by Stephen Colebourne: -// https://blog.joda.org/2014/02/turning-off-doclint-in-jdk-8-javadoc.html -// See also: -// https://github.com/GPars/GPars/blob/master/build.gradle#L268 -// -if (JavaVersion.current().isJava8Compatible()) { - tasks.withType(Javadoc) { - options.addStringOption('Xdoclint:none', '-quiet') - } -} diff --git a/buildSrc/src/main/groovy/js/build-tasks.gradle b/buildSrc/src/main/groovy/js/build-tasks.gradle deleted file mode 100644 index e9cc1248..00000000 --- a/buildSrc/src/main/groovy/js/build-tasks.gradle +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/** - * This script declares common Gradle tasks required for JavaScript modules. - * - *

Most of the tasks launch a separate process which runs an NPM CLI command, so it's necessary - * that the NPM command line tool is installed. - * - *

This script doesn't configure Protobuf plugin and Spine's Protobuf JS plugin. - */ - -println("`build-tasks.gradle` script is deprecated. Please use `javascript` extension instead.") - -ext { - JAVA_SCRIPT_TASK_GROUP = 'JavaScript' - - workDirectory = "$projectDir" - nodeModulesDir = "$projectDir/node_modules" - packageJsonFile = "$projectDir/package.json" - - npm = { final String... command -> - ext.executeNpm(workDirectory as File, command) - } -} - -apply plugin: 'base' -apply from: "$rootDir" + io.spine.internal.gradle.Scripts.commonPath + "js/npm-cli.gradle" -apply from: "$rootDir" + io.spine.internal.gradle.Scripts.commonPath + "js/update-package-version.gradle" - -/** - * Compiles Protobuf sources into JavaScript. - * - *

This is a lifecycle task. It performs no action but triggers all the tasks which perform - * the compilation. - */ -task compileProtoToJs { - group = JAVA_SCRIPT_TASK_GROUP - description = "Compiles Protobuf sources to JavaScript." -} - -/** - * Installs the module dependencies using the `npm install` command. - * - * The `npm install` command is executed with the vulnerability check disabled since - * it cannot fail the task execution despite on vulnerabilities found. - * - * To check installed Node packages for vulnerabilities execute `auditNodePackages` task. - */ -task installNodePackages { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Installs the module`s Node dependencies.' - - inputs.file packageJsonFile - outputs.dir nodeModulesDir - - doLast { - // To turn off npm audit when installing all packages. Use `auditNodePackages` task - // to check installed Node packages for vulnerabilities. - npm 'set', 'audit', 'false' - npm 'install' - } -} - -/** - * Audits the module dependencies using the `npm audit` command. - * - * Sets the minimum level of vulnerability for `npm audit` to exit with a non-zero exit code - * to "high". - */ -task auditNodePackages { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Audits the module`s Node dependencies.' - dependsOn installNodePackages - - inputs.dir nodeModulesDir - - doLast { - npm 'set', 'audit-level', 'critical' - try { - npm 'audit' - } catch (final Exception ignored) { - npm 'audit', '--registry' 'http://registry.npmjs.eu' - } - } -} - -check.dependsOn auditNodePackages - -/** - * Cleans output of `buildJs` and dependant tasks. - */ -task cleanJs { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Cleans the output of JavaScript build.' - - clean.dependsOn cleanJs - - doLast { - delete buildJs.outputs - delete compileProtoToJs.outputs - delete installNodePackages.outputs - } -} - -/** - * Assembles the JS sources. - * - * This task is an analog of `build` for JS. - * - * To include a task into the JS build, depend `buildJs` onto that task. - */ -task buildJs { - group = JAVA_SCRIPT_TASK_GROUP - description = "Assembles the JavaScript source files." - - dependsOn updatePackageVersion - dependsOn installNodePackages - dependsOn compileProtoToJs - assemble.dependsOn buildJs -} - -/** - * Tests the JS sources. - * - * If `check` task is scheduled to run, this task is automatically added to - * the task graph and will be executed after `test` task completion. - */ -task testJs { - group = JAVA_SCRIPT_TASK_GROUP - description = "Tests the JavaScript source files." - - dependsOn installNodePackages - dependsOn compileProtoToJs - check.dependsOn testJs - - testJs.mustRunAfter test -} - -idea.module { - excludeDirs += file(nodeModulesDir) -} diff --git a/buildSrc/src/main/groovy/js/configure-proto.gradle b/buildSrc/src/main/groovy/js/configure-proto.gradle deleted file mode 100644 index 95db6ce2..00000000 --- a/buildSrc/src/main/groovy/js/configure-proto.gradle +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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.internal.dependency.Protobuf -import io.spine.internal.gradle.Scripts - -/** - * Configures how the Proto definitions of the project are compiled into JavaScript and their - * publishing. - * - * Use this script if the project contains Proto files that should be published as a separate NPM - * module. - * - * The prerequisites for using the script are: - * - * 1. The Spine Proto JS plugin applied to the project - * (see https://github.com/SpineEventEngine/base/tree/master/tools/mc-js). - * - * 2. The extension variable `versionToPublishJs` configured to represent the version under which - * the NPM packages should be published. - */ - -println("`configure-proto.gradle` script is deprecated. Please use `javascript` extension instead.") - -ext { - genProtoBaseDir = "$projectDir/generated" - genProtoMain = "$genProtoBaseDir/main/js" - genProtoTest = "$genProtoBaseDir/test/js" -} - -apply from: "$rootDir" + io.spine.internal.gradle.Scripts.commonPath + "js/npm-publish-tasks.gradle" - -/** - * Configures the JS code generation. - */ -protobuf { - generatedFilesBaseDir = genProtoBaseDir - protoc { - artifact = Protobuf.protoc - } - generateProtoTasks { - all().each { final task -> - task.builtins { - // For information on JavaScript code generation please see - // https://github.com/google/protobuf/blob/master/js/README.md - js { - option "import_style=commonjs" - } - - task.generateDescriptorSet = true - final def testClassifier = task.sourceSet.name == "test" ? "_test" : "" - final def descriptorName = - "${project.group}_${project.name}_${project.version}${testClassifier}.desc" - task.descriptorSetOptions.path = - "${projectDir}/build/descriptors/${task.sourceSet.name}/${descriptorName}" - } - compileProtoToJs.dependsOn task - } - } -} - -/** - * Configures the generation of additional features for the Proto messages via - * Spine Proto JS plugin. - */ -protoJs { - mainGenProtoDir = genProtoMain - testGenProtoDir = genProtoTest - - generateParsersTask().dependsOn compileProtoToJs - buildJs.dependsOn generateParsersTask() -} - -/** - * Prepares Proto files for publication, see {@code npm-publish-tasks.gradle}. - */ -prepareJsPublication { - - doLast { - copy { - from (projectDir) { - include 'package.json' - include '.npmrc' - } - - from (genProtoMain) { - include '**' - } - - into publicationDirectory - } - } -} diff --git a/buildSrc/src/main/groovy/js/js.gradle b/buildSrc/src/main/groovy/js/js.gradle deleted file mode 100644 index e99ee8ce..00000000 --- a/buildSrc/src/main/groovy/js/js.gradle +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/** - * A script configuring the build of a JavaScript module, which is going to be published to NPM. - * - *

In particular, the script brings tasks to: - *

    - *
  1. Install NPM dependencies. - *
  2. Compile Protobuf sources to JavaScript. - *
  3. Test and generate coverage reports for JavaScript sources. - *
  4. Update the version in `package.json` depending on the `versionToPublishJs` property. - *
  5. Clean up the build output of a JavaScript module. - *
- * - *

The script is based on other scripts from `config` submodule. - */ - -println("`js.gradle` script is deprecated. Please use `javascript` extension instead.") - -ext { - srcDir = "$projectDir/main" - testSrcDir = "$projectDir/test" - genProtoBaseDir = projectDir - genProtoSubDir = "proto" - genProtoMain = "$genProtoBaseDir/main/$genProtoSubDir" - genProtoTest = "$genProtoBaseDir/test/$genProtoSubDir" - nycOutputDir = "$projectDir/.nyc_output" -} - -apply from: "$rootDir" + io.spine.internal.gradle.Scripts.commonPath + "js/npm-publish-tasks.gradle" - -/** - * Cleans old module dependencies and build outputs. - */ -task deleteCompiled { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Cleans old module dependencies and build outputs.' - - clean.dependsOn deleteCompiled - - doLast { - delete genProtoMain - delete genProtoTest - delete coverageJs.outputs - } -} - -/** - * Customizes the task already defined in `config` module by running Webpack build. - */ -buildJs { - - outputs.dir "$projectDir/dist" - - doLast { - npm 'run', 'build' - npm 'run', 'build-dev' - } -} - -/** - * Customizes the task already defined in `config` module by running - * the JavaScript tests. - */ -testJs { - - doLast { - npm 'run', 'test' - } -} - -/** - * Copies bundled JS sources to the temporary NPM publication directory. - */ -task copyBundledJs(type: Copy) { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Copies assembled JavaScript sources to the NPM publication directory.' - - from buildJs.outputs - into "$publicationDirectory/dist" - - dependsOn buildJs -} - -/** - * Transpiles JS sources before publishing them to NPM. - * - * Puts the resulting files to the temporary NPM publication directory. - */ -task transpileSources { - group = JAVA_SCRIPT_TASK_GROUP - description = "Transpiles sources before publishing." - - doLast { - npm 'run', 'transpile-before-publish' - } -} - -/** - * Defines files to copy by the task. - */ -prepareJsPublication { - - doLast { - copy { - from (projectDir) { - include 'package.json' - include '.npmrc' - } - into publicationDirectory - } - } - - //TODO:2019-02-05:dmytro.grankin: temporarily don't publish a bundle, see https://github.com/SpineEventEngine/web/issues/61 - //dependsOn copyBundledJs - dependsOn transpileSources -} - -/** - * Runs the JavaScript tests and collects the code coverage. - */ -task coverageJs { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Runs the JS tests and collects the code coverage info.' - - outputs.dir nycOutputDir - - final def runsOnWindows = org.gradle.internal.os.OperatingSystem.current().isWindows() - final def coverageScript = runsOnWindows ? 'coverage:win' : 'coverage:unix' - - doLast { - npm 'run', coverageScript - } - - dependsOn buildJs - - rootProject.check.dependsOn coverageJs -} - -/** - * Generates the report on NPM dependencies and their licenses. - */ -task npmLicenseReport { - - doLast { - npm 'run', 'license-report' - } -} - -/** - * Runs NPM license report straight after the Gradle license report. - */ -//TODO:2021-09-22:alexander.yevsyukov: Resolve this dependency. -//generateLicenseReport.finalizedBy npmLicenseReport - -apply plugin: 'io.spine.mc-js' - -protoJs { - generatedMainDir = genProtoMain - generatedTestDir = genProtoTest - - generateParsersTask().dependsOn compileProtoToJs - buildJs.dependsOn generateParsersTask() - testJs.dependsOn buildJs -} - - -protobuf { - generatedFilesBaseDir = genProtoBaseDir - protoc { - artifact = io.spine.internal.dependency.Protobuf.compiler - } - generateProtoTasks { - all().each { final task -> - task.builtins { - // Do not use java builtin output in this project. - remove java - - // For information on JavaScript code generation please see - // https://github.com/google/protobuf/blob/master/js/README.md - js { - option "import_style=commonjs" - outputSubDir = genProtoSubDir - } - - task.generateDescriptorSet = true - final def testClassifier = task.sourceSet.name == "test" ? "_test" : "" - final def descriptorName = "${project.group}_${project.name}_${project.version}${testClassifier}.desc" - task.descriptorSetOptions.path = "${projectDir}/build/descriptors/${task.sourceSet.name}/${descriptorName}" - } - compileProtoToJs.dependsOn task - } - } -} diff --git a/buildSrc/src/main/groovy/js/npm-cli.gradle b/buildSrc/src/main/groovy/js/npm-cli.gradle deleted file mode 100644 index 83d520b7..00000000 --- a/buildSrc/src/main/groovy/js/npm-cli.gradle +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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 org.apache.tools.ant.taskdefs.condition.Os - -/** - * The script allowing to run NPM commands from Gradle. - */ - -println("`npm-cli.gradle` script is deprecated. Please use `javascript` extension instead.") - -/** - * The name of an environmental variable which contains the NPM auth token. - * - *

The token is used for publishing only. - * - *

It is required to set this variable before invoking NPM commands. - */ -ext.NPM_TOKEN_VARIABLE = "NPM_TOKEN" - -/** - * @return the value of `NPM_TOKEN` environmental variable or a stub value, if the token is not set - */ -String npmToken() { - final def tokenVarValue = System.getenv(NPM_TOKEN_VARIABLE) - final def token = tokenVarValue?.isEmpty() ? "PUBLISHING_FORBIDDEN" : tokenVarValue - return token -} - -/** - * Executes the given command depending on the current OS. - * - * @param workingDirArg the directory to execute the command in - * @param windowsCommand the command to execute is the OS is Windows - * @param unixCommand the command to execute is the OS is Unix-like - * @param params the command params, platform-independent - */ -def execMultiplatform(final File workingDirArg, - final String windowsCommand, - final String unixCommand, - final String[] params) { - exec { - final String command = Os.isFamily(Os.FAMILY_WINDOWS) ? windowsCommand : unixCommand - final List resultingParams = [command] + Arrays.asList(params) - workingDir = workingDirArg - commandLine = resultingParams - environment NPM_TOKEN_VARIABLE, npmToken() - } -} - -def runNpm(final File launchDir, final String[] params) { - execMultiplatform launchDir, 'npm.cmd', 'npm', params -} - -ext { - - /** - * Executes an {@code npm} CLI command. - * - * For example, to execute command {@code npm run compile}, invoke this function as follows: - * {@code executeNpm 'run', 'compile'} - * - * @param params the command parameters - */ - executeNpm = { final File from = projectDir, final String... params -> - runNpm(from, params) - } -} diff --git a/buildSrc/src/main/groovy/js/npm-publish-tasks.gradle b/buildSrc/src/main/groovy/js/npm-publish-tasks.gradle deleted file mode 100644 index f41bbd01..00000000 --- a/buildSrc/src/main/groovy/js/npm-publish-tasks.gradle +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/** - * The script declares tasks for publishing to NPM. - * - *

In order to publish the NPM module, it is required that the {@code NPM_TOKEN} environment - * variable is set to a valid NPM auth token. If the token is not set, a dummy value is added to - * the NPM execution process, which is sufficient for the local development. - */ - -println("`npm-publish-tasks.gradle` script is deprecated. " + - "Please use `javascript` extension instead.") - -apply from: "$rootDir" + io.spine.internal.gradle.Scripts.commonPath + "js/build-tasks.gradle" - -ext { - publicationDirectory = "$buildDir/npm-publication/" -} - -/** - * A task to prepare files for publication. - * - *

Does nothing by default, so a user should configure this task - * to copy all required files to the {@code publicationDirectory}. - * - *

The task is performed before {@code link} and {@code publishJs} tasks. - * - *

The task isn't a {@code copy} task since it causes side effects - * like a removal of the publication directory. See https://github.com/gradle/gradle/issues/1012. - */ -task prepareJsPublication { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Prepares the NPM package for publish.' - - dependsOn buildJs -} - -/** - * Publishes the NPM package locally with `npm link`. - */ -task link { - group = JAVA_SCRIPT_TASK_GROUP - description = "Publishes the NPM package locally." - - doLast { - executeNpm(publicationDirectory as File, 'link') - } - - dependsOn prepareJsPublication -} - -/** - * Publishes the NPM package with `npm publish`. - */ -task publishJs { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Publishes the NPM package.' - - doLast { - executeNpm(publicationDirectory as File, 'publish') - } - - dependsOn prepareJsPublication - publish.dependsOn publishJs -} diff --git a/buildSrc/src/main/groovy/js/update-package-version.gradle b/buildSrc/src/main/groovy/js/update-package-version.gradle deleted file mode 100644 index eabcf6d9..00000000 --- a/buildSrc/src/main/groovy/js/update-package-version.gradle +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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 groovy.json.JsonOutput -import groovy.json.JsonSlurper - -/** - * This script declares a task to update the version in in a package.json file. - */ - -println("`update-package-version.gradle` script is deprecated. " + - "Please use `javascript` extension instead.") - -/** - * Updates the package.json version to the specified one. - * - *

The path of the package.json and the version to set has default values, - * but can be redefined: - * - *

{@code
- * updatePackageVersion.packageJsonPath = "custom/package.json"
- * updatePackageVersion.newVersion = npmPackageVersion
- * }
- */ -task updatePackageVersion() { - group = JAVA_SCRIPT_TASK_GROUP - description = 'Updates the version in package.json.' - - ext.packageJsonPath = packageJsonFile - ext.newVersion = versionToPublishJs - - doLast { - updatePackageJsonVersion(packageJsonPath as String, newVersion as String) - } -} - -void updatePackageJsonVersion(final String packageJsonPath, final String newVersion) { - def final packageJsonObject = readJsonFile(packageJsonPath) - - packageJsonObject['version'] = newVersion - updatePackageJson(packageJsonObject, packageJsonPath) -} - -Object readJsonFile(final String sourcePath) { - def final packageJsonFile = file(sourcePath) - return new JsonSlurper().parseText(packageJsonFile.text) -} - -static void updatePackageJson(final jsonObject, final String destinationPath) { - def final updatedText = JsonOutput.toJson(jsonObject) - def final prettyText = prettify(updatedText) - new File(destinationPath).text = prettyText -} - -static String prettify(final String jsonText) { - def prettyText = JsonOutput.prettyPrint(jsonText) - prettyText = prettyText.replace(' ', ' ') - prettyText = prettyText.replaceAll(/\{\s+}/, '{}') - prettyText = prettyText + '\n' - return prettyText -} diff --git a/buildSrc/src/main/groovy/license-report-project.gradle b/buildSrc/src/main/groovy/license-report-project.gradle deleted file mode 100644 index d4257589..00000000 --- a/buildSrc/src/main/groovy/license-report-project.gradle +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ -//file:noinspection UnnecessaryQualifiedReference - -import com.github.jk1.license.* -import com.github.jk1.license.render.ReportRenderer -import io.spine.internal.gradle.publish.PublishExtension - -/** - * This script plugin generates the license report for all dependencies used in a project. - * - *

Transitive dependencies are included. - * - *

Use `generateLicenseReport` task to trigger the generation. - */ - -buildscript { - repositories { - gradlePluginPortal() - } - - dependencies { - classpath io.spine.internal.dependency.LicenseReport.lib - } -} - -println("`license-report-project.gradle` script is deprecated. " + - "Please use the `LicenseReporter` utility instead.") - - -apply plugin: io.spine.internal.dependency.LicenseReport.GradlePlugin.id - -final def commonPath = io.spine.internal.gradle.Scripts.commonPath -apply from: "${rootDir}/${commonPath}/license-report-common.gradle" - -final reportOutputDir = "${project.buildDir}" + licenseReportConfig.relativePath -licenseReport { - outputDir = "$reportOutputDir" - excludeGroups = ['io.spine', 'io.spine.tools', 'io.spine.gcloud'] - configurations = ALL - renderers = [new MarkdownReportRenderer(licenseReportConfig.outputFilename)] -} - -/** - * Renders the dependency report in markdown. - */ -class MarkdownReportRenderer implements ReportRenderer { - - private Project project - private LicenseReportExtension config - private File output - private String fileName - - MarkdownReportRenderer(final String fileName) { - this.fileName = fileName - } - - @Input - String getFileNameCache() { return this.fileName } - - void render(final ProjectData data) { - project = data.project - config = project.licenseReport - output = new File(config.outputDir, fileName) - final String prefix = prefixFor(project) - output.text = """ - \n# Dependencies of `${project.group}:$prefix${project.name}:${project.version}` -""" - printDependencies(data) - output << """ - - \n The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -""" - output << "\n\nThis report was generated on **${new Date()}**" - output << " 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)." - } - - /** - * Obtains the artifact prefix for the passed project. - * - *

If the {@code PublishExtension} has the property {@code spinePrefix} set to {@code true} - * returns {@code "spine-"}, otherwise an empty string. - */ - private static String prefixFor(final Project project) { - final publishExtension = project.rootProject.extensions.findByType(PublishExtension.class) - final prefix = (publishExtension?.spinePrefix?.getOrElse(false) ?: false) - ? "spine-" - : "" - prefix - } - - private void printDependencies(final ProjectData data) { - - final runtimeDependencies = new HashSet() - final compileToolingDependencies = new HashSet() - - data.configurations.each { final ConfigurationData config -> - - - if(["runtime", "runtimeClasspath"].indexOf(config.name) != -1) { - runtimeDependencies.addAll(config.dependencies) - } else { - compileToolingDependencies.addAll(config.dependencies) - } - } - - output << "\n## Runtime" - runtimeDependencies.toArray().sort().each { - printModuleDependency(it) - } - - output << "\n## Compile, tests and tooling" - compileToolingDependencies.toArray().sort().each { - printModuleDependency(it) - } - } - - private void printModuleDependency(final ModuleData data) { - boolean projectUrlDone = false - output << "\n1." - - if (data.group) { - output << " **Group:** $data.group" - } - if (data.name) { - output << " **Name:** $data.name" - } - if (data.version) { - output << " **Version:** $data.version" - } - if (data.poms.isEmpty() && data.manifests.isEmpty()) { - output << " **No license information found**" - return - } - - if (!data.manifests.isEmpty() && !data.poms.isEmpty()) { - final ManifestData manifest = data.manifests.first() - final PomData pomData = data.poms.first() - if (manifest.url && pomData.projectUrl && manifest.url == pomData.projectUrl) { - output << "\n * **Project URL:** [$manifest.url]($manifest.url)" - projectUrlDone = true - } - } - - if (!data.manifests.isEmpty()) { - final ManifestData manifest = data.manifests.first() - if (manifest.url && !projectUrlDone) { - output << "\n * **Manifest Project URL:** [$manifest.url]($manifest.url)" - } - if (manifest.license) { - if (manifest.license.startsWith("http")) { - output << "\n * **Manifest license URL:** [$manifest.license]($manifest.license)" - - } else if (manifest.hasPackagedLicense) { - output << "\n * **Packaged License File:** [$manifest.license]($manifest.url)" - } else { - output << "\n * **Manifest License:** $manifest.license (Not packaged)" - - } - } - } - - if (!data.poms.isEmpty()) { - final PomData pomData = data.poms.first() - if (pomData.projectUrl && !projectUrlDone) { - output << "\n * **POM Project URL:** [$pomData.projectUrl]($pomData.projectUrl)" - - } - if (pomData.licenses) { - pomData.licenses.each { final License license -> - output << "\n * **POM License: $license.name**" - - if (license.url) { - if (license.url.startsWith("http")) { - output << " - [$license.url]($license.url)" - } else { - output << " **License:** $license.url" - - } - } - } - } - } - output << '\n' - } -} diff --git a/buildSrc/src/main/groovy/license-report-repo.gradle b/buildSrc/src/main/groovy/license-report-repo.gradle deleted file mode 100644 index 6cbe7b5a..00000000 --- a/buildSrc/src/main/groovy/license-report-repo.gradle +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/** - * This script launches the per-project license report generation, concatenates the results - * and puts the resulting file into a repository root folder. - * - * If the repository consists just of a single root project, the generation is configured - * just for it alone. - * - * The script also configures the `build` task to be finalized by the license report routines. - * - * See `license-report-project.gradle` for a per-project license report generation. - */ - -println("`license-report-repo.gradle` script is deprecated. " + - "Please use the `LicenseReporter` utility instead.") - - -final def commonPath = io.spine.internal.gradle.Scripts.commonPath -apply from: "${rootDir}/${commonPath}/license-report-common.gradle" - -task reportLicensesInRepo { final Task task -> - def targetProjects; - if (subprojects.isEmpty()) { - println "Configuring the license report for a single root project." - targetProjects = [task.project] - } else { - println "Configuring the license report for all subprojects of a root project." - targetProjects = subprojects - } - - targetProjects.forEach { - final def generateLicenseReport = it.tasks.findByName('generateLicenseReport') - task.dependsOn(generateLicenseReport) - generateLicenseReport.dependsOn(it.tasks.findByName('assemble')) - } - - doLast { - final paths = targetProjects.stream().collect { - "${it.buildDir}${licenseReportConfig.relativePath}/${licenseReportConfig.outputFilename}" - } - - println "Aggregating the reports from the target projects." - final aggregatedContent = paths.collect { (new File(it)).getText() }.join("\n\n\n") - - (new File("$rootDir/$licenseReportConfig.outputFilename")).text = aggregatedContent - } -} - -build.finalizedBy reportLicensesInRepo -reportLicensesInRepo.dependsOn assemble diff --git a/buildSrc/src/main/groovy/model-compiler.gradle b/buildSrc/src/main/groovy/model-compiler.gradle deleted file mode 100644 index 33ef24bd..00000000 --- a/buildSrc/src/main/groovy/model-compiler.gradle +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/* - * This script configures Spine defaults for the Model Compiler code generation. - * - * Applies the following interfaces generation configurations: - * — all messages in Protobuf files ending with "commands.proto" are marked as `CommandMessage`; - * — all messages in Protobuf files ending with "events.proto" are marked as `EventMessage`; - * — all messages in Protobuf files ending with "rejections.proto" are marked as `RejectionMessage`; - * — all messages that qualify to be UUID messages are marked as `UuidValue`; - * — all messages that represent an entity state are marked as `EntityState`. - * - * And the following method generations are applied: - * — all messages that qualify to be UUID messages have helper `generate` and `of` methods - * generated using `UuidMethodFactory`; - * - * The generation of messages representing an entity state are appended with - * - entity columns for the fields marked as `column`; - * - entity query and entity query builder DSL. - * - * The fields of the messages are marked with certain interfaces: - * - `io.spine.base.EventMessageField` set to those in `*events.proto` and `*rejections.proto`; - * - `io.spine.query.EntityStateField` set to the fields of messages representing an entity state. - * - * - * Be aware that the root project `buildscript` should already have a classpath - * `io.spine.tools:spine-mc-java:` classpath dependency. - */ - -modelCompiler { - - interfaces { - mark messages().inFiles(suffix: "commands.proto"), asType("io.spine.base.CommandMessage") - mark messages().inFiles(suffix: "events.proto"), asType("io.spine.base.EventMessage") - mark messages().inFiles(suffix: "rejections.proto"), asType("io.spine.base.RejectionMessage") - mark messages().uuid(), asType("io.spine.base.UuidValue") - mark messages().entityState(), asType("io.spine.base.EntityState") - } - - methods { - applyFactory "io.spine.tools.java.code.UuidMethodFactory", messages().uuid() - } - - entityQueries { - generate = true - } - - fields { - generateFor messages().inFiles(suffix: "events.proto"), markAs("io.spine.base.EventMessageField") - generateFor messages().inFiles(suffix: "rejections.proto"), markAs("io.spine.base.EventMessageField") - generateFor messages().entityState(), markAs("io.spine.query.EntityStateField") - } -} diff --git a/buildSrc/src/main/groovy/pmd.gradle b/buildSrc/src/main/groovy/pmd.gradle deleted file mode 100644 index a0e019b3..00000000 --- a/buildSrc/src/main/groovy/pmd.gradle +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - - -/* - * This script configures Gradle PMD plugin. - */ -pmd { - toolVersion = "${io.spine.internal.dependency.Pmd.version}" - consoleOutput = true - incrementalAnalysis = true - - // The build is going to fail in case of violations. - ignoreFailures = false - - // Disable the default rule set to use the custom rules (see below). - ruleSets = [] - - // A set of custom rules. - ruleSetFiles = files("$rootDir/config/quality/pmd.xml") - - reportsDir = file("build/reports/pmd") - - // Just analyze the main sources; do not analyze tests. - sourceSets = [sourceSets.main] -} - -// Workaround for https://github.com/pmd/pmd/issues/1705. -pmdMain.classpath += sourceSets.main.runtimeClasspath diff --git a/buildSrc/src/main/groovy/publish-proto.gradle b/buildSrc/src/main/groovy/publish-proto.gradle deleted file mode 100644 index 87f1bc4a..00000000 --- a/buildSrc/src/main/groovy/publish-proto.gradle +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/** - * This plugin enables a project to publish a JAR containing all the {@code .proto} definitions - * found in the project classpath, which is the definitions from {@code sourceSets.main.proto} and - * the proto files extracted from the JAR dependencies of the project. - * - *

The relative file paths are kept. - * - *

To depend onto such artifact of e.g. the spine-client module, use: - *

- *     {@code
- *     dependencies {
- *         compile "io.spine:spine-client:$version@proto"
- *     }
- *     }
- * 
- * - *

To enable the artifact publishing for a project, apply this plugin to it: - *

- *     {@code
- *     apply from: "$rootDir/config/gradle/publish-proto.gradle"
- *     }
- * 
- */ - -buildscript { - repositories { - mavenLocal() - mavenCentral() - } - - dependencies { - //noinspection UnnecessaryQualifiedReference - classpath io.spine.internal.dependency.Guava.lib - } -} - -task assembleProto(type: Jar) { - description "Assembles a JAR artifact with all Proto definitions from the classpath." - from { collectProto() } - include { isProtoFileOrDir(it.file) } - classifier 'proto' -} - -artifacts { - archives assembleProto -} - -/** - * Collects all the directories from current project and its dependencies (including zip tree - * directories) which contain {@code .proto} definitions. - * - *

The directories may in practice include files of other extension. The caller should take care - * of handling those files respectively. - * - *

It's guaranteed that there are no other Proto definitions in the current project classpath - * except those included into the returned {@code Collection}. - */ -Collection collectProto() { - final def dependencies = configurations.runtimeClasspath.files - final def jarFiles = dependencies.collect { JarFileName.ofFile(it) } - final def result = new HashSet<>() - for (final File jarFile in dependencies) { - if (jarFile.name.endsWith(".jar")) { - final def zipTree = zipTree(jarFile) - try { - for (final File file in zipTree) { - if (isProtoFile(file)) { - result.add(getProtoRoot(file, jarFiles)) - } - } - } catch (GradleException e) { - /* - * As the :assembleProto task configuration is resolved first upon the project - * configuration (and we don't have the dependencies there yet) and then upon - * the execution, the task should complete successfully. - * - * To make sure the configuration phase passes, we suppress the GradleException - * thrown by `zipTree()` indicating that the given file, which is a dependency JAR - * file does not exist. - * - * Though, if this error is thrown on the execution phase, this IS an error. Thus, - * we log an error message. - * - * As a side effect, the message is shown upon `./gradlew clean build` or upon - * a newly created version of framework build etc. - */ - logger.debug( - "${e.message}${System.lineSeparator()}The proto artifact may be corrupted." - ) - } - } - } - result.addAll(sourceSets.main.proto.srcDirs) - return result -} - -/** - * Returns the root directory containing a Proto package. - * - * @param member the member File of the Proto package - * @param jarNames the full listing of the project JAR dependencies - */ -static File getProtoRoot(final File member, final Collection jarNames) { - File pkg = member - while (!jarNames.contains(jarName(pkg.parentFile))) { - pkg = pkg.parentFile - } - return pkg.parentFile -} - -/** - * Retrieves the name of the given folder trimmed by {@code ".jar"} suffix. - * - *

More formally, returns the name of the given {@link File} if the name does not contain - * {@code ".jar"} substring or the substring of the name containing the characters from the start - * to the {@code ".jar"} sequence (inclusively). - * - *

This transformation corresponds to finding the name of a JAR file which was extracted to - * the given directory with Gradle {@code zipTree()} API. - * - * @param jar the folder to get the JAR name for - */ -static JarFileName jarName(final File jar) { - final String unpackedJarInfix = ".jar" - final String name = jar.name - final int index = name.lastIndexOf(unpackedJarInfix) - if (index < 0) { - return null - } else { - return JarFileName.ofValue(name.substring(0, index + unpackedJarInfix.length())) - } -} - -/** - * Checks if the given abstract pathname represents either a {@code .proto} file, or a directory - * containing proto files. - * - *

If {@code candidate} is a directory, scans its children recursively. - * - * @param candidate the {@link File} to check - * @return {@code true} if the {@code candidate} {@linkplain #isProtoFile is a Protobuf file} or - * a directory containing at least one Protobuf file - */ -static boolean isProtoFileOrDir(final File candidate) { - final Deque filesToCheck = new LinkedList<>() - filesToCheck.push(candidate) - if (candidate.isDirectory() && candidate.list().length == 0) { - return false - } - while (!filesToCheck.isEmpty()) { - final File file = filesToCheck.pop() - if (isProtoFile(file)) { - return true - } - if (file.isDirectory()) { - file.listFiles().each { filesToCheck.push(it) } - } - } - return false -} - -/** - * Checks if the given file is a {@code .proto} file. - * - * @param file the file to check - * @return {@code true} if the {@code file} is a Protobuf file, {@code false} otherwise - */ -static boolean isProtoFile(final File file) { - return file.isFile() && file.name.endsWith(".proto") -} - -/** - * The filename of a JAR dependency of the project. - */ -final class JarFileName { - - final String value - - private JarFileName(final String value) { - this.value = value - } - - static JarFileName ofFile(final File jar) { - return new JarFileName(jar.name) - } - - static JarFileName ofValue(final String value) { - return new JarFileName(value) - } - - boolean equals(final o) { - if (this.is(o)) return true - if (getClass() != o.class) return false - - final JarFileName that = (JarFileName) o - - if (value != that.value) return false - - return true - } - - int hashCode() { - return (value != null ? value.hashCode() : 0) - } -} diff --git a/buildSrc/src/main/groovy/publish.gradle b/buildSrc/src/main/groovy/publish.gradle deleted file mode 100644 index 844d44b7..00000000 --- a/buildSrc/src/main/groovy/publish.gradle +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/* - Apply this script to add ability to publish the needed artifacts. - - To publish more artifacts for a certain project, add them to the archives configuration: - ``` - artifacts { - archives myCustomJarTask - } - ``` - */ - -println("`publish.gradle` script is deprecated. Please use the `Publish` plugin instead.") - -task publish { - doLast { - // Keep the task for dynamic generation while publishing. - } -} - -void dependPublish(final project) { - final credentialsTasks = getTasksByName("readPublishingCredentials", false) - project.getTasksByName("publish", false).each { final task -> - task.dependsOn credentialsTasks - } - publish.dependsOn project.getTasksByName("publish", false) -} - -projectsToPublish.each { - project(":$it") { final currentProject -> - apply plugin: 'maven-publish' - - logger.debug("Applying `maven-publish` plugin to ${currentProject.name}.") - - currentProject.artifacts { - archives sourceJar - archives testOutputJar - archives javadocJar - } - - final propertyName = "spinePrefix" - final ext = rootProject.ext - final boolean spinePrefix = ext.has(propertyName) ? ext.get(propertyName) : true - - // Artifact IDs are composed as "spine-". Example: - // - // "spine-mc-java" - // - // That helps to distinguish resulting JARs in the final assembly, such as WAR package. - // - final String artifactIdForPublishing = - spinePrefix ? - "spine-${currentProject.name}" : - currentProject.name - - final def publishingAction = { - currentProject.publishing { - publications { - mavenJava(MavenPublication) { - groupId = "${currentProject.group}" - artifactId = "${artifactIdForPublishing}" - version = "${currentProject.version}" - - from components.java - - artifacts = configurations.archives.allArtifacts - } - } - } - } - if (currentProject.state.executed) { - publishingAction() - } else { - currentProject.afterEvaluate(publishingAction) - } - - final boolean isSnapshots = currentProject.version.matches('.+[-\\.]SNAPSHOT([\\+\\.]\\d+)?') - - publishing { - repositories { - maven { - final String publicRepo = (isSnapshots - ? publishToRepository.snapshots - : publishToRepository.releases - ) - - // Special treatment for CloudRepo URL. - // Reading is performed via public repositories, and publishing via private - // ones that differ in the `/public` infix. - final urlToPublish = publicRepo.replace("/public", "") - - // Assign URL to the plugin property. - url = urlToPublish - - final creds = rootProject.publishToRepository.credentials(project) - - credentials { - username = creds.username - password = creds.password - } - } - } - } - - dependPublish(project) - } -} diff --git a/buildSrc/src/main/groovy/run-build.gradle b/buildSrc/src/main/groovy/run-build.gradle deleted file mode 100644 index e289bf96..00000000 --- a/buildSrc/src/main/groovy/run-build.gradle +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/** - * Apply this script if it is needed to execute {@code ./gradlew clean build} task - * from another project. - */ - -configure(project.rootProject) { - - ext { - - /** - * Executes {@code ./gradlew clean build} command, if there is a {@code 'clean'} task. - * Otherwise, executes {@code ./gradlew build}. - * - * @param directory the project root directory in which to execute the build - */ - runBuild = { final String directory -> - final boolean shouldClean = gradle.getTaskGraph().hasTask(':clean') - final def command = [] - final def runsOnWindows = org.gradle.internal.os.OperatingSystem.current().isWindows() - final def script = runsOnWindows ? "gradlew.bat" : "gradlew" - command.add("$rootDir/$script".toString()) - if (shouldClean) { - command.add('clean') - } - command.add('build') - command.add('--console=plain') - command.add('--debug') - command.add('--stacktrace') - - // Ensure build error output log. - // Since we're executing this task in another process, we redirect error output to - // the file under the `build` directory. - final File buildDir = new File(directory, "build") - if (!buildDir.exists()) { - buildDir.mkdir() - } - final File errorOut = new File(buildDir, 'error-out.txt') - final File debugOut = new File(buildDir, 'debug-out.txt') - - final def process = new ProcessBuilder() - .command(command) - .directory(file(directory)) - .redirectError(errorOut) - .redirectOutput(debugOut) - .start() - if (!process.waitFor(10, TimeUnit.MINUTES)) { - /* The timeout is set because of Gradle process execution under Windows. - See the following locations for details: - https://github.com/gradle/gradle/pull/8467#issuecomment-498374289 - https://github.com/gradle/gradle/issues/3987 - https://discuss.gradle.org/t/weirdness-in-gradle-exec-on-windows/13660/6 - */ - throw new GradleException("Build FAILED. See $errorOut for details.") - } - } - } -} - diff --git a/buildSrc/src/main/groovy/test-artifacts.gradle b/buildSrc/src/main/groovy/test-artifacts.gradle deleted file mode 100644 index f3b53b64..00000000 --- a/buildSrc/src/main/groovy/test-artifacts.gradle +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -// Apply this script if it is needed to use test classes of the current project in other projects. -// The dependency looks like this: -// -// testCompile project(path: ":projectWithTests", configuration: 'testArtifacts') -// - -println("`test-artifacts.gradle` script is deprecated. " + - "Please use the `Project.exposeTestArtifacts()` utility instead.") - -configurations { - testArtifacts.extendsFrom testRuntime -} -task testJar(type: Jar) { - classifier "test" - from sourceSets.test.output -} -artifacts { - testArtifacts testJar -} diff --git a/buildSrc/src/main/groovy/test-output.gradle b/buildSrc/src/main/groovy/test-output.gradle deleted file mode 100644 index 65668d99..00000000 --- a/buildSrc/src/main/groovy/test-output.gradle +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/* - * This plugin configured the test output as follows: - * - * - the standard streams of the tests execution are logged; - * - exceptions thrown in tests are logged; - * - after all the tests are executed, a short test summary is logged; the summary shown the number - * of tests and their results. - */ - -println("`test-output.gradle` script is deprecated. Please use `Test.configureLogging()` instead.") - -tasks.withType(Test).each { - it.testLogging { - showStandardStreams = true - showExceptions = true - showStackTraces = true - showCauses = true - exceptionFormat = 'full' - } - - it.afterSuite { final testDescriptor, final result -> - // If the descriptor has no parent, then it is the root test suite, i.e. it includes the - // info about all the run tests. - if (!testDescriptor.parent) { - logger.lifecycle( - """ - Test summary: - >> ${result.testCount} tests - >> ${result.successfulTestCount} succeeded - >> ${result.failedTestCount} failed - >> ${result.skippedTestCount} skipped - """ - ) - } - } -} diff --git a/buildSrc/src/main/groovy/update-gh-pages.gradle b/buildSrc/src/main/groovy/update-gh-pages.gradle deleted file mode 100644 index d2d09912..00000000 --- a/buildSrc/src/main/groovy/update-gh-pages.gradle +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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. - */ - -/* - * This script publishes the generated documentation to the `spine.io` site via GitHub pages by - * pushing commits to the `gh-pages` branch. - * - * To configure docs publishing, apply this script to the repositories which should generate - * the doc: - * ``` - * apply(from: io.spine.gradle.internal.Scripts.updateGitHubPages) - * ``` - * After that, the `updateGitHubPages` task will be available for that project. - * - * By default, the non-internal Javadoc is included into the publication. It is possible to publish - * all the Javadoc regardless of API status by setting the value of the `allowInternalJavadoc` - * extension property to `true`. If needed, the publication may be extended to include other files. - * To do so, append more files/file collections to the `generatedDocs` extension property. - * - * In order to work, the script needs a `deploy_key_rsa` private RSA key file in the repository - * root. It is recommended to decrypt it in the repository an then decrypt it on CI upon - * a publication. Also, the script uses the `FORMAL_GIT_HUB_PAGES_AUTHOR` environmental variable to - * set the author email for the commits. The `gh-pages` branch itself should exist before the script - * is run. - */ - -import java.nio.file.Files - -ext { - javadocDir = Files.createTempDirectory("javadoc") - generatedDocs = files(javadocDir) - repositoryTempDir = Files.createTempDirectory("repoTemp") -} - -/** - * Prints a message telling those who read build logs about what happened. - */ -if (isSnapshot()) { - println("GitHub Pages update will be skipped since this project" + - " is a snapshot: `$project.name-$project.version`.") -} - -/** - * Tells whether this project is a snapshot. - */ -def isSnapshot() { - return project.version.toLowerCase().contains("snapshot") -} - -final String propertyName = 'allowInternalJavadoc' - -final boolean allowInternalJavadoc = ext.has(propertyName) && ext.get(propertyName) - -if (!allowInternalJavadoc) { - final def commonPath = io.spine.internal.gradle.Scripts.commonPath - apply from: "${rootDir}/${commonPath}/filter-internal-javadoc.gradle" -} - -/** - * Copies the Javadoc produced by a Javadoc task into a temporary folder. - * - * If `@Internal` Javadoc is allowed, uses the `:javadoc` task. Otherwise, uses - * the `:noInternalJavadoc` task. - * - * To allow `@Internal` Javadoc, set `ext.allowInternalJavadoc` property to `true` before applying - * this script to the project. - */ -task copyJavadoc(type: Copy) { - from allowInternalJavadoc ? tasks['javadoc'] : tasks['noInternalJavadoc'] - into javadocDir -} - -/** - * Updates the Javadoc documentation on the {@code gh-pages} Git branch. - * - *

Run this task when it is required to update the Javadoc e.g. when merging a branch into - * {@code master}. - */ -task updateGitHubPages { - description "Updates the Javadoc published to GitHub Pages website." - dependsOn copyJavadoc -} - -/** - * Prevents this task from execution in case this project is in its `SNAPSHOT` version. - */ -updateGitHubPages.onlyIf { - !isSnapshot() -} - -/** - * Waits for the given {@code process} to finish and retrieves the result of execution. - * - * @param process the process to execute - * @return a tuple of format: [exitCode:, - * out: , - * error: ] - */ -static def executeForResult(final Process process) { - final def outWriter = new StringWriter() - final def errWriter = new StringWriter() - process.consumeProcessOutputStream(outWriter) - process.consumeProcessErrorStream(errWriter) - final int exitCode = process.waitFor() - final def result = [out: outWriter.toString(), error: errWriter.toString(), exitCode: exitCode] - return result -} - -/** - * Executes the given terminal command and retrieves the command output. - * - *

{@link Runtime#exec(String[], String[], File) Executes} the given {@code String} array as - * a CLI command. If the execution is successful, returns the command output. Throws - * an {@link IllegalStateException} otherwise. - * - * @param baseDir the directory of the command execution - * @param command the command to execute - * @return the command line output - * @throws IllegalStateException upon an execution error - */ -static String execute(final File baseDir, final String... command) { - final Runtime runtime = Runtime.getRuntime() - final Process proc = runtime.exec(command, /*env=*/ (String[]) null, baseDir) - final def result = executeForResult(proc) - if (result.exitCode == 0) { - return result.out - } else { - final String errorMsg = "Command `$command` finished with exit code $result.exitCode:" + - " ${System.lineSeparator()}${result.error}" + - " ${System.lineSeparator()}${result.out}." - throw new IllegalStateException(errorMsg) - } -} - -/** - * Executes the given CLI command and retrieves the command output. - * - *

This is a convenience method. Calling this method is equivalent to calling - * {@code execute(project.rootDir, command)}. - */ -String execute(final String... command) { - return execute(rootDir, command) -} - -/** - * The GitHub deploy key used to push the doc changes to the {@code gh-pages} branch. - */ -final File gitHubAccessKey = "$rootDir/deploy_key_rsa" as File - -updateGitHubPages.doLast { - if (!gitHubAccessKey.exists()) { - throw new GradleException("File $gitHubAccessKey does not exist. It should be encrypted" + - " in the repository and decrypted on CI.") - } - - final def GH_PAGES_BRANCH = "gh-pages" - - final String repoSlug = System.getenv('REPO_SLUG') - if (repoSlug == null || repoSlug.isEmpty()) { - throw new GradleException('`REPO_SLUG` environmental variable is not set.') - } - - /** - * The GitHub URL to the project repository. - * - *

A CI instance comes with an RSA key. However, of course, the default key has no - * privileges in Spine repositories. Thus, we add our own RSA key — `deploy_rsa_key`. It must - * have write rights in the associated repository. Also, we don't want that key to be used for - * anything else but GitHub Pages publishing. Thus, we configure the SSH agent to use - * the `deploy_rsa_key` only for specific references, namely in `github.com-publish`. - */ - final String GIT_HOST = "git@github.com-publish:${repoSlug}.git" - - final def repoBaseDir = "$repositoryTempDir/$GH_PAGES_BRANCH" as File - final def docDirPostfix = "reference/$project.name" - final def docDir = "$repoBaseDir/$docDirPostfix" as File - final def versionedDocDir = "$docDir/v/$project.version" as File - - // Create SSH config file to allow pushing commits to the repository. - final File sshConfigFile = file("${System.getProperty("user.home")}/.ssh/config") - if (!sshConfigFile.exists()) { - final File parentDir = sshConfigFile.getCanonicalFile().getParentFile() - parentDir.mkdirs() - sshConfigFile.createNewFile() - } - sshConfigFile << """ -Host github.com-publish - HostName github.com - User git - IdentityFile $gitHubAccessKey.absolutePath -""" - execute "$rootDir/config/scripts/register-ssh-key.sh", gitHubAccessKey.absolutePath - - execute 'git', 'clone', GIT_HOST, "$repoBaseDir" - execute repoBaseDir, "git", "checkout", GH_PAGES_BRANCH - logger.debug("Updating generated documentation on GitHub Pages in directory `$docDir`.") - docDir.mkdir() - - copy { - from generatedDocs - into docDir - } - - logger.debug("Storing the new version of documentation in directory `$versionedDocDir`.") - versionedDocDir.mkdir() - copy { - from generatedDocs - into versionedDocDir - } - - execute repoBaseDir, "git", "add", docDirPostfix - - /** - * Publish the changes under "UpdateGitHubPages Plugin" Git user name and email stored in - * "FORMAL_GIT_HUB_PAGES_AUTHOR" env variable. - * - *

When changing the value of "FORMAL_GIT_HUB_PAGES_AUTHOR", also change the SSH private - * (encrypted `deploy_key_rsa`) and public ("GitHub Pages publisher (Travis CI)" on GitHub) - * keys. - */ - execute repoBaseDir, "git", "config", "user.name", "\"UpdateGitHubPages Plugin\"" - execute repoBaseDir, "git", "config", "user.email", System.env.FORMAL_GIT_HUB_PAGES_AUTHOR - - execute repoBaseDir, "git", "commit", "--allow-empty", "--message=\"Update Javadoc for module $project.name as for version $project.version\"" - execute repoBaseDir, "git", "push" - logger.debug("Updated Javadoc on GitHub Pages in directory `$docDir` successfully.") -} diff --git a/buildSrc/src/main/kotlin/BuildExtensions.kt b/buildSrc/src/main/kotlin/BuildExtensions.kt new file mode 100644 index 00000000..9e51bca3 --- /dev/null +++ b/buildSrc/src/main/kotlin/BuildExtensions.kt @@ -0,0 +1,178 @@ +/* + * Copyright 2023, 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 + * + * http://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. + */ + +@file:Suppress("UnusedReceiverParameter", "unused", "TopLevelPropertyNaming", "ObjectPropertyName") + +import io.spine.internal.dependency.ErrorProne +import io.spine.internal.dependency.GradleDoctor +import io.spine.internal.dependency.Kotest +import io.spine.internal.dependency.Kover +import io.spine.internal.dependency.ProtoData +import io.spine.internal.dependency.Protobuf +import io.spine.internal.dependency.Spine +import io.spine.internal.gradle.standardToSpineSdk +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.kotlin.dsl.ScriptHandlerScope +import org.gradle.plugin.use.PluginDependenciesSpec +import org.gradle.plugin.use.PluginDependencySpec + +/** + * Applies [standard][standardToSpineSdk] repositories to this `buildscript`. + */ +fun ScriptHandlerScope.standardSpineSdkRepositories() { + repositories.standardToSpineSdk() +} + +/** + * Provides shortcuts to reference our dependency objects. + * + * Dependency objects cannot be used under `plugins` section because `io` is a value + * declared in auto-generated `org.gradle.kotlin.dsl.PluginAccessors.kt` file. + * It conflicts with our own declarations. + * + * In such cases, a shortcut to apply a plugin can be created: + * + * ``` + * val PluginDependenciesSpec.`gradle-doctor`: PluginDependencySpec + * get() = id(GradleDoctor.pluginId).version(GradleDoctor.version) + * ``` + * + * But for some plugins, it's impossible to apply them directly to a project. + * For example, when a plugin is not published to Gradle Portal, it can only be + * applied with buildscript's classpath. Thus, it's needed to leave some freedom + * upon how to apply them. In such cases, just a shortcut to a dependency object + * can be declared, without applying of the plugin in-place. + */ +private const val ABOUT_DEPENDENCY_EXTENSIONS = "" + +/** + * Shortcut to [Spine.McJava] dependency object. + * + * This plugin is not published to Gradle Portal and cannot be applied directly to a project. + * Firstly, it should be put to buildscript's classpath and then applied by ID only. + */ +val PluginDependenciesSpec.mcJava: Spine.McJava + get() = Spine.McJava + +/** + * Shortcut to [ProtoData] dependency object. + * + * This plugin is in Gradle Portal. But when used in pair with [mcJava], it cannot be applied + * directly to a project. It is so, because [mcJava] uses [protoData] as its dependency. + * And buildscript's classpath ends up with both of them. + */ +val PluginDependenciesSpec.protoData: ProtoData + get() = ProtoData + +/** + * Provides shortcuts for applying plugins from our dependency objects. + * + * Dependency objects cannot be used under `plugins` section because `io` is a value + * declared in auto-generated `org.gradle.kotlin.dsl.PluginAccessors.kt` file. + * It conflicts with our own declarations. + * + * Declaring of top-level shortcuts eliminates need in applying plugins + * using fully-qualified name of dependency objects. + * + * It is still possible to apply a plugin with a custom version, if needed. + * Just declare a version again on the returned [PluginDependencySpec]. + * + * For example: + * + * ``` + * plugins { + * protobuf version("0.8.19-custom") + * } + * ``` + */ +private const val ABOUT_PLUGIN_ACCESSORS = "" + +val PluginDependenciesSpec.errorprone: PluginDependencySpec + get() = id(ErrorProne.GradlePlugin.id) + +val PluginDependenciesSpec.protobuf: PluginDependencySpec + get() = id(Protobuf.GradlePlugin.id) + +val PluginDependenciesSpec.`gradle-doctor`: PluginDependencySpec + get() = id(GradleDoctor.pluginId).version(GradleDoctor.version) + +val PluginDependenciesSpec.kotest: PluginDependencySpec + get() = Kotest.MultiplatformGradlePlugin.let { + return id(it.id).version(it.version) + } + +val PluginDependenciesSpec.kover: PluginDependencySpec + get() = id(Kover.id).version(Kover.version) + +/** + * Configures the dependencies between third-party Gradle tasks + * and those defined via ProtoData and Spine Model Compiler. + * + * It is required in order to avoid warnings in build logs, detecting the undeclared + * usage of Spine-specific task output by other tasks, + * e.g. the output of `launchProtoData` is used by `compileKotlin`. + */ +@Suppress("unused") +fun Project.configureTaskDependencies() { + + /** + * Creates a dependency between the Gradle task of *this* name + * onto the task with `taskName`. + * + * If either of tasks does not exist in the enclosing `Project`, + * this method does nothing. + * + * This extension is kept local to `configureTaskDependencies` extension + * to prevent its direct usage from outside. + */ + fun String.dependOn(taskName: String) { + val whoDepends = this + val dependOntoTask: Task? = tasks.findByName(taskName) + dependOntoTask?.let { + tasks.findByName(whoDepends)?.dependsOn(it) + } + } + + afterEvaluate { + val launchProtoData = "launchProtoData" + val launchTestProtoData = "launchTestProtoData" + val generateProto = "generateProto" + val createVersionFile = "createVersionFile" + "compileKotlin".dependOn(launchProtoData) + "compileTestKotlin".dependOn(launchTestProtoData) + val sourcesJar = "sourcesJar" + sourcesJar.dependOn(generateProto) + sourcesJar.dependOn(launchProtoData) + sourcesJar.dependOn(createVersionFile) + sourcesJar.dependOn("prepareProtocConfigVersions") + val dokkaHtml = "dokkaHtml" + dokkaHtml.dependOn(generateProto) + dokkaHtml.dependOn(launchProtoData) + "dokkaJavadoc".dependOn(launchProtoData) + "publishPluginJar".dependOn(createVersionFile) + } +} diff --git a/buildSrc/src/main/kotlin/force-jacoco.gradle.kts b/buildSrc/src/main/kotlin/BuildSettings.kt similarity index 78% rename from buildSrc/src/main/kotlin/force-jacoco.gradle.kts rename to buildSrc/src/main/kotlin/BuildSettings.kt index 75786eda..1adbb92b 100644 --- a/buildSrc/src/main/kotlin/force-jacoco.gradle.kts +++ b/buildSrc/src/main/kotlin/BuildSettings.kt @@ -24,16 +24,13 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -// TODO:2021-07-05:dmytro.dashenkov: https://github.com/SpineEventEngine/config/issues/214. +import org.gradle.jvm.toolchain.JavaLanguageVersion -allprojects { - configurations.all { - resolutionStrategy { - eachDependency { - if (requested.group == "org.jacoco") { - useVersion("0.8.7") - } - } - } - } +/** + * This object provides high-level constants, like version of JVM, to be used + * throughout the project. + */ +object BuildSettings { + private const val JVM_VERSION = 11 + val javaVersion: JavaLanguageVersion = JavaLanguageVersion.of(JVM_VERSION) } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt b/buildSrc/src/main/kotlin/DependencyResolution.kt similarity index 80% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt rename to buildSrc/src/main/kotlin/DependencyResolution.kt index 86bfbcab..5f2c6750 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/DependencyResolution.kt +++ b/buildSrc/src/main/kotlin/DependencyResolution.kt @@ -24,32 +24,37 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.internal.gradle - import io.spine.internal.dependency.AnimalSniffer +import io.spine.internal.dependency.Asm import io.spine.internal.dependency.AutoCommon import io.spine.internal.dependency.AutoService import io.spine.internal.dependency.AutoValue import io.spine.internal.dependency.CheckerFramework import io.spine.internal.dependency.CommonsCli import io.spine.internal.dependency.CommonsLogging +import io.spine.internal.dependency.Dokka import io.spine.internal.dependency.ErrorProne import io.spine.internal.dependency.FindBugs import io.spine.internal.dependency.Flogger import io.spine.internal.dependency.Gson import io.spine.internal.dependency.Guava +import io.spine.internal.dependency.Hamcrest import io.spine.internal.dependency.J2ObjC import io.spine.internal.dependency.JUnit +import io.spine.internal.dependency.Jackson +import io.spine.internal.dependency.JavaDiffUtils +import io.spine.internal.dependency.Kotest import io.spine.internal.dependency.Kotlin import io.spine.internal.dependency.Okio +import io.spine.internal.dependency.OpenTest4J import io.spine.internal.dependency.Plexus import io.spine.internal.dependency.Protobuf +import io.spine.internal.dependency.Slf4J import io.spine.internal.dependency.Truth import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.ResolutionStrategy -import org.gradle.api.artifacts.dsl.RepositoryHandler /** * The function to be used in `buildscript` when a fully-qualified call must be made. @@ -81,19 +86,20 @@ private fun ResolutionStrategy.forceProductionDependencies() { AutoCommon.lib, AutoService.annotations, CheckerFramework.annotations, + Dokka.BasePlugin.lib, ErrorProne.annotations, ErrorProne.core, - Guava.lib, FindBugs.annotations, - Flogger.lib, Flogger.Runtime.systemBackend, + Flogger.lib, + Guava.lib, Kotlin.reflect, Kotlin.stdLib, Kotlin.stdLibCommon, Kotlin.stdLibJdk8, - Protobuf.libs, Protobuf.GradlePlugin.lib, - io.spine.internal.dependency.Slf4J.lib + Protobuf.libs, + Slf4J.lib ) } @@ -101,10 +107,12 @@ private fun ResolutionStrategy.forceTestDependencies() { force( Guava.testLib, JUnit.api, - JUnit.platformCommons, - JUnit.platformLauncher, + JUnit.bom, + JUnit.Platform.commons, + JUnit.Platform.launcher, JUnit.legacy, - Truth.libs + Truth.libs, + Kotest.assertions, ) } @@ -113,17 +121,32 @@ private fun ResolutionStrategy.forceTestDependencies() { */ private fun ResolutionStrategy.forceTransitiveDependencies() { force( + Asm.lib, AutoValue.annotations, + CommonsCli.lib, + CommonsLogging.lib, Gson.lib, + Hamcrest.core, J2ObjC.annotations, - Plexus.utils, + JUnit.Platform.engine, + JUnit.Platform.suiteApi, + JUnit.runner, + Jackson.annotations, + Jackson.bom, + Jackson.core, + Jackson.databind, + Jackson.dataformatXml, + Jackson.dataformatYaml, + Jackson.moduleKotlin, + JavaDiffUtils.lib, + Kotlin.jetbrainsAnnotations, Okio.lib, - CommonsCli.lib, - CheckerFramework.compatQual, - CommonsLogging.lib + OpenTest4J.lib, + Plexus.utils, ) } +@Suppress("unused") fun NamedDomainObjectContainer.excludeProtobufLite() { fun excludeProtoLite(configurationName: String) { @@ -138,30 +161,3 @@ fun NamedDomainObjectContainer.excludeProtobufLite() { excludeProtoLite("runtimeOnly") excludeProtoLite("testRuntimeOnly") } - -@Suppress("unused") -object DependencyResolution { - @Deprecated( - "Please use `configurations.forceVersions()`.", - ReplaceWith("configurations.forceVersions()") - ) - fun forceConfiguration(configurations: ConfigurationContainer) { - configurations.forceVersions() - } - - @Deprecated( - "Please use `configurations.excludeProtobufLite()`.", - ReplaceWith("configurations.excludeProtobufLite()") - ) - fun excludeProtobufLite(configurations: ConfigurationContainer) { - configurations.excludeProtobufLite() - } - - @Deprecated( - "Please use `applyStandard(repositories)` instead.", - replaceWith = ReplaceWith("applyStandard(repositories)") - ) - fun defaultRepositories(repositories: RepositoryHandler) { - repositories.applyStandard() - } -} diff --git a/buildSrc/src/main/kotlin/DokkaExts.kt b/buildSrc/src/main/kotlin/DokkaExts.kt new file mode 100644 index 00000000..9756dc3b --- /dev/null +++ b/buildSrc/src/main/kotlin/DokkaExts.kt @@ -0,0 +1,184 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.dependency.Dokka +import io.spine.internal.gradle.publish.getOrCreate +import java.io.File +import java.time.LocalDate +import org.gradle.api.Project +import org.gradle.api.artifacts.Dependency +import org.gradle.api.artifacts.dsl.DependencyHandler +import org.gradle.api.file.FileCollection +import org.gradle.api.tasks.TaskContainer +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.configurationcache.extensions.capitalized +import org.gradle.kotlin.dsl.DependencyHandlerScope +import org.jetbrains.dokka.DokkaConfiguration +import org.jetbrains.dokka.base.DokkaBase +import org.jetbrains.dokka.base.DokkaBaseConfiguration +import org.jetbrains.dokka.gradle.DokkaTask +import org.jetbrains.dokka.gradle.GradleDokkaSourceSetBuilder + +/** + * To generate the documentation as seen from Java perspective, the `kotlin-as-java` + * plugin was added to the Dokka classpath. + * + * @see + * Dokka output formats + */ +fun DependencyHandlerScope.useDokkaForKotlinAsJava() { + dokkaPlugin(Dokka.KotlinAsJavaPlugin.lib) +} + +/** + * To exclude pieces of code annotated with `@Internal` from the documentation + * a custom plugin is added to the Dokka's classpath. + * + * @see + * Custom Dokka Plugins + */ +fun DependencyHandlerScope.useDokkaWithSpineExtensions() { + dokkaPlugin(Dokka.SpineExtensions.lib) +} + +private fun DependencyHandler.dokkaPlugin(dependencyNotation: Any): Dependency? = + add("dokkaPlugin", dependencyNotation) + +private fun Project.dokkaOutput(language: String): File = + buildDir.resolve("docs/dokka${language.capitalized()}") + +private fun Project.dokkaConfigFile(file: String): File { + val dokkaConfDir = project.rootDir.resolve("buildSrc/src/main/resources/dokka") + return dokkaConfDir.resolve(file) +} + +private fun DokkaTask.configureFor(language: String) { + dokkaSourceSets.configureEach { + /** + * Configures links to the external Java documentation. + */ + jdkVersion.set(BuildSettings.javaVersion.asInt()) + + skipEmptyPackages.set(true) + + documentedVisibilities.set( + setOf( + DokkaConfiguration.Visibility.PUBLIC, + DokkaConfiguration.Visibility.PROTECTED + ) + ) + } + + outputDirectory.set(project.dokkaOutput(language)) + + /** + * Dokka Base plugin allows to set a few properties to customize the output: + * + * - `customStyleSheets` property to which CSS files are passed overriding + * styles generated by Dokka; + * - `customAssets` property to provide resources. The image with the name + * "logo-icon.svg" is passed to override the default logo used by Dokka; + * - `separateInheritedMembers` when set to `true`, creates a separate tab in + * type-documentation for inherited members. + * + * @see + * Dokka modifying frontend assets + */ + pluginConfiguration { + customStyleSheets = listOf(project.dokkaConfigFile("styles/custom-styles.css")) + customAssets = listOf(project.dokkaConfigFile("assets/logo-icon.svg")) + separateInheritedMembers = true + footerMessage = "Copyright ${LocalDate.now().year}, TeamDev" + } +} + +/** + * Configures this [DokkaTask] to accept only Kotlin files. + */ +fun DokkaTask.configureForKotlin() { + configureFor("kotlin") +} + +/** + * Configures this [DokkaTask] to accept only Java files. + */ +fun DokkaTask.configureForJava() { + configureFor("java") +} + +/** + * Finds the `dokkaHtml` Gradle task. + */ +fun TaskContainer.dokkaHtmlTask(): DokkaTask? = this.findByName("dokkaHtml") as DokkaTask? + +/** + * Returns only Java source roots out of all present in the source set. + * + * It is a helper method for generating documentation by Dokka only for Java code. + * It is helpful when both Java and Kotlin source files are present in a source set. + * Dokka can properly generate documentation for either Kotlin or Java depending on + * the configuration, but not both. + */ +internal fun GradleDokkaSourceSetBuilder.onlyJavaSources(): FileCollection { + return sourceRoots.filter(File::isJavaSourceDirectory) +} + +private fun File.isJavaSourceDirectory(): Boolean { + return isDirectory && name == "java" +} + +/** + * Locates or creates `dokkaKotlinJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains the Dokka output, generated upon + * Kotlin sources from `main` source set. Requires Dokka to be configured in the target project by + * applying `dokka-for-kotlin` plugin. + */ +fun Project.dokkaKotlinJar(): TaskProvider = tasks.getOrCreate("dokkaKotlinJar") { + archiveClassifier.set("dokka") + from(files(dokkaOutput("kotlin"))) + + tasks.dokkaHtmlTask()?.let{ dokkaTask -> + this@getOrCreate.dependsOn(dokkaTask) + } +} + +/** + * Locates or creates `dokkaJavaJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains the Dokka output, generated upon + * Kotlin sources from `main` source set. Requires Dokka to be configured in the target project by + * applying `dokka-for-java` and/or `dokka-for-kotlin` script plugin. + */ +fun Project.dokkaJavaJar(): TaskProvider = tasks.getOrCreate("dokkaJavaJar") { + archiveClassifier.set("dokka-java") + from(files(dokkaOutput("java"))) + + tasks.dokkaHtmlTask()?.let{ dokkaTask -> + this@getOrCreate.dependsOn(dokkaTask) + } +} diff --git a/buildSrc/src/main/kotlin/compile-protobuf.gradle.kts b/buildSrc/src/main/kotlin/compile-protobuf.gradle.kts new file mode 100644 index 00000000..baffe251 --- /dev/null +++ b/buildSrc/src/main/kotlin/compile-protobuf.gradle.kts @@ -0,0 +1,45 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.dependency.Protobuf +import io.spine.internal.gradle.protobuf.setup + +plugins { + id("java-library") + id("com.google.protobuf") +} + + +// For generating test fixtures. See `src/test/proto`. +protobuf { + configurations.excludeProtobufLite() + protoc { + artifact = Protobuf.compiler + } + generateProtoTasks.all().configureEach { + setup() + } +} diff --git a/buildSrc/src/main/groovy/filter-internal-javadoc.gradle b/buildSrc/src/main/kotlin/config-tester.gradle.kts similarity index 50% rename from buildSrc/src/main/groovy/filter-internal-javadoc.gradle rename to buildSrc/src/main/kotlin/config-tester.gradle.kts index abe28180..14a236c6 100644 --- a/buildSrc/src/main/groovy/filter-internal-javadoc.gradle +++ b/buildSrc/src/main/kotlin/config-tester.gradle.kts @@ -24,33 +24,34 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -configurations { - excludeInternalDoclet -} +import io.spine.internal.gradle.ConfigTester +import io.spine.internal.gradle.SpineRepos +import io.spine.internal.gradle.cleanFolder +import java.nio.file.Path +import java.nio.file.Paths -dependencies { - /* - The variable spineBaseVersion must be defined in the `ext` section of the `version.gradle` - file of the project which imports `config` as a sub-module. - */ - excludeInternalDoclet "io.spine.tools:spine-javadoc-filter:$spineBaseVersion" -} +// A reference to `config` to use along with the `ConfigTester`. +val config: Path = Paths.get("./") -// This task uses constants defined in `javadoc-options.gradle`. -task noInternalJavadoc(type: Javadoc) { - source = sourceSets.main.allJava.filter { - !it.absolutePath.contains('generated') - } - classpath = javadoc.getClasspath() +// A temp folder to use to check out the sources of other repositories with the `ConfigTester`. +val tempFolder = File("./tmp") + +// Creates a Gradle task which checks out and builds the selected Spine repositories +// with the local version of `config` and `config/buildSrc`. +ConfigTester(config, tasks, tempFolder) + .addRepo(SpineRepos.baseTypes) // Builds `base-types` at `master`. + .addRepo(SpineRepos.base) // Builds `base` at `master`. + .addRepo(SpineRepos.coreJava) // Builds `core-java` at `master`. - options { - tags = javadocOptions.tags - encoding = javadocOptions.encoding + // This is how one builds a specific branch of some repository: + // .addRepo(SpineRepos.coreJava, Branch("grpc-concurrency-fixes")) - // Doclet fully qualified name. - doclet = 'io.spine.tools.javadoc.ExcludeInternalDoclet' + // Register the produced task under the selected name to invoke manually upon need. + .registerUnder("buildDependants") - // Path to the JAR containing the doclet. - docletpath = configurations.excludeInternalDoclet.files.asType(List) +// Cleans the temp folder used to check out the sources from Git. +tasks.register("clean") { + doLast { + cleanFolder(tempFolder) } } diff --git a/buildSrc/src/main/kotlin/detekt-code-analysis.gradle.kts b/buildSrc/src/main/kotlin/detekt-code-analysis.gradle.kts new file mode 100644 index 00000000..89151fb0 --- /dev/null +++ b/buildSrc/src/main/kotlin/detekt-code-analysis.gradle.kts @@ -0,0 +1,85 @@ +/* + * Copyright 2023, 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 + * + * http://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.gitlab.arturbosch.detekt.Detekt + +/** + * This script-plugin sets up Kotlin code analyzing with Detekt. + * + * After applying, Detekt is configured to use `${rootDir}/config/quality/detekt-config.yml` file. + * Projects can append their own config files to override some parts of the default one or drop + * it at all in a favor of their own one. + * + * An example of appending a custom config file to the default one: + * + * ``` + * detekt { + * config.from("config/detekt-custom-config.yml") + * } + * ``` + * + * To totally substitute it, just overwrite the corresponding property: + * + * ``` + * detekt { + * config = files("config/detekt-custom-config.yml") + * } + * ``` + * + * Also, it's possible to suppress Detekt findings using [baseline](https://detekt.dev/docs/introduction/baseline/) + * file instead of suppressions in source code. + * + * An example of passing a baseline file: + * + * ``` + * detekt { + * baseline = file("config/detekt-baseline.yml") + * } + * ``` + */ +@Suppress("unused") +private val about = "" + +plugins { + id("io.gitlab.arturbosch.detekt") +} + +detekt { + buildUponDefaultConfig = true + config.from(files("${rootDir}/config/quality/detekt-config.yml")) +} + +tasks { + withType().configureEach { + reports { + html.required.set(true) // Only HTML report is generated. + xml.required.set(false) + txt.required.set(false) + sarif.required.set(false) + md.required.set(false) + } + } +} diff --git a/buildSrc/src/main/kotlin/dokka-for-java.gradle.kts b/buildSrc/src/main/kotlin/dokka-for-java.gradle.kts new file mode 100644 index 00000000..0e5087a1 --- /dev/null +++ b/buildSrc/src/main/kotlin/dokka-for-java.gradle.kts @@ -0,0 +1,40 @@ +/* + * Copyright 2023, 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 + * + * http://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 org.jetbrains.dokka.gradle.DokkaTask + +plugins { + id("org.jetbrains.dokka") // Cannot use `Dokka` dependency object here yet. +} + +dependencies { + useDokkaForKotlinAsJava() + useDokkaWithSpineExtensions() +} + +tasks.withType().configureEach { + configureForJava() +} diff --git a/buildSrc/src/main/kotlin/dokka-for-kotlin.gradle.kts b/buildSrc/src/main/kotlin/dokka-for-kotlin.gradle.kts new file mode 100644 index 00000000..0b12a0dd --- /dev/null +++ b/buildSrc/src/main/kotlin/dokka-for-kotlin.gradle.kts @@ -0,0 +1,39 @@ +/* + * Copyright 2023, 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 + * + * http://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 org.jetbrains.dokka.gradle.DokkaTask + +plugins { + id("org.jetbrains.dokka") // Cannot use `Dokka` dependency object here yet. +} + +dependencies { + useDokkaWithSpineExtensions() +} + +tasks.withType().configureEach { + configureForKotlin() +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt index 7e626511..09b2403c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AnimalSniffer.kt @@ -27,6 +27,7 @@ package io.spine.internal.dependency // https://www.mojohaus.org/animal-sniffer/animal-sniffer-maven-plugin/ +@Suppress("unused", "ConstPropertyName") object AnimalSniffer { private const val version = "1.21" const val lib = "org.codehaus.mojo:animal-sniffer-annotations:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt index 9a4ba1a3..1eff6a0b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ApacheHttp.kt @@ -26,7 +26,7 @@ package io.spine.internal.dependency -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object ApacheHttp { // https://hc.apache.org/downloads.cgi diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AppEngine.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AppEngine.kt index 35731e87..be15a8cf 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AppEngine.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AppEngine.kt @@ -27,10 +27,10 @@ package io.spine.internal.dependency // https://cloud.google.com/java/docs/reference -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object AppEngine { private const val version = "1.9.82" - const val sdk = "com.google.appengine:appengine-api-1.0-sdk:${version}" + const val sdk = "com.google.appengine:appengine-api-1.0-sdk:${version}" object GradlePlugin { private const val version = "2.2.0" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoCommon.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Asm.kt similarity index 88% rename from buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoCommon.kt rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/Asm.kt index 64690c0f..82550efe 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoCommon.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Asm.kt @@ -26,8 +26,9 @@ package io.spine.internal.dependency -// https://github.com/google/auto -object AutoCommon { - private const val version = "1.2.1" - const val lib = "com.google.auto:auto-common:${version}" +// https://asm.ow2.io/ +@Suppress("unused", "ConstPropertyName") +object Asm { + private const val version = "9.2" + const val lib = "org.ow2.asm:asm:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt index eb52178d..b23ccabd 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/AssertK.kt @@ -31,8 +31,8 @@ package io.spine.internal.dependency * * [AssertK](https://github.com/willowtreeapps/assertk) */ -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object AssertK { - private const val version = "0.25" + private const val version = "0.26.1" const val libJvm = "com.willowtreeapps.assertk:assertk-jvm:${version}" } diff --git a/buildSrc/src/main/groovy/slow-tests.gradle b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Auto.kt similarity index 63% rename from buildSrc/src/main/groovy/slow-tests.gradle rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/Auto.kt index a461e25c..21674394 100644 --- a/buildSrc/src/main/groovy/slow-tests.gradle +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Auto.kt @@ -24,26 +24,26 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -println("`slow-tests.gradle` script is deprecated. " + - "Please use `TaskContainer.registerTestTasks()` instead.") +@file:Suppress("unused", "ConstPropertyName") -final def slowTag = 'slow' // See io.spine.testing.SlowTest +package io.spine.internal.dependency -task fastTest(type: Test) { - description = 'Executes all JUnit tests but the ones tagged as "slow".' - group = 'Verification' - - useJUnitPlatform { - excludeTags slowTag - } +// https://github.com/google/auto +object AutoCommon { + private const val version = "1.2.2" + const val lib = "com.google.auto:auto-common:${version}" } -task slowTest(type: Test) { - description = 'Executes JUnit tests tagged as "slow".' - group = 'Verification' +// https://github.com/google/auto +object AutoService { + private const val version = "1.1.1" + const val annotations = "com.google.auto.service:auto-service-annotations:${version}" + @Suppress("unused") + const val processor = "com.google.auto.service:auto-service:${version}" +} - useJUnitPlatform { - includeTags slowTag - } - shouldRunAfter fastTest +// https://github.com/google/auto +object AutoValue { + private const val version = "1.10.2" + const val annotations = "com.google.auto.value:auto-value-annotations:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt index 3ec97486..445d57e5 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/BouncyCastle.kt @@ -27,7 +27,7 @@ package io.spine.internal.dependency // https://www.bouncycastle.org/java.html -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object BouncyCastle { const val libPkcsJdk15 = "org.bouncycastle:bcpkix-jdk15on:1.68" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt index 9ee47249..e9800161 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckStyle.kt @@ -28,7 +28,7 @@ package io.spine.internal.dependency // https://checkstyle.sourceforge.io/ // See `io.spine.internal.gradle.checkstyle.CheckStyleConfig`. -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object CheckStyle { - const val version = "10.1" + const val version = "10.3.4" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt index 5ba1a0a2..f355a0fa 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CheckerFramework.kt @@ -27,18 +27,13 @@ package io.spine.internal.dependency // https://checkerframework.org/ +@Suppress("unused", "ConstPropertyName") object CheckerFramework { - private const val version = "3.21.3" + private const val version = "3.36.0" const val annotations = "org.checkerframework:checker-qual:${version}" @Suppress("unused") val dataflow = listOf( "org.checkerframework:dataflow:${version}", "org.checkerframework:javacutil:${version}" ) - /** - * This is discontinued artifact, which we do not use directly. - * This is a transitive dependency for us, which we force in - * [DependencyResolution.forceConfiguration] - */ - const val compatQual = "org.checkerframework:checker-compat-qual:2.5.5" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt index db24b785..5d8c0929 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCli.kt @@ -28,10 +28,11 @@ package io.spine.internal.dependency /** * Commons CLI is a transitive dependency which we don't use directly. - * We `force` it in [DependencyResolution.forceConfiguration]. + * We `force` it in [forceVersions]. * * [Commons CLI](https://commons.apache.org/proper/commons-cli/) */ +@Suppress("unused", "ConstPropertyName") object CommonsCli { private const val version = "1.5.0" const val lib = "commons-cli:commons-cli:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCodec.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCodec.kt index d1d3915b..641c9ee0 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCodec.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsCodec.kt @@ -27,8 +27,8 @@ package io.spine.internal.dependency // https://commons.apache.org/proper/commons-codec/changes-report.html -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object CommonsCodec { - private const val version = "1.15" + private const val version = "1.16.0" const val lib = "commons-codec:commons-codec:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsLogging.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsLogging.kt index d7781cf5..c63890fc 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsLogging.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/CommonsLogging.kt @@ -30,6 +30,7 @@ package io.spine.internal.dependency * [Commons Logging](https://commons.apache.org/proper/commons-logging/) is a transitive * dependency which we don't use directly. This object is used for forcing the version. */ +@Suppress("unused", "ConstPropertyName") object CommonsLogging { // https://commons.apache.org/proper/commons-logging/ private const val version = "1.2" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt index 17c082c6..4d732398 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt @@ -27,8 +27,58 @@ package io.spine.internal.dependency // https://github.com/Kotlin/dokka -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object Dokka { - const val version = "1.6.10" - const val pluginId = "org.jetbrains.dokka" + private const val group = "org.jetbrains.dokka" + + /** + * When changing the version, also change the version used in the + * `buildSrc/build.gradle.kts`. + */ + const val version = "1.8.10" + + object GradlePlugin { + const val id = "org.jetbrains.dokka" + + /** + * The version of this plugin is already specified in `buildSrc/build.gradle.kts` + * file. Thus, when applying the plugin in project's build files, only the [id] + * should be used. + */ + const val lib = "${group}:dokka-gradle-plugin:${version}" + } + + object BasePlugin { + const val lib = "${group}:dokka-base:${version}" + } + + const val analysis = "org.jetbrains.dokka:dokka-analysis:${version}" + + object CorePlugin { + const val lib = "${group}:dokka-core:${version}" + } + + /** + * To generate the documentation as seen from Java perspective use this plugin. + * + * @see + * Dokka output formats + */ + object KotlinAsJavaPlugin { + const val lib = "${group}:kotlin-as-java-plugin:${version}" + } + + /** + * Custom Dokka plugins developed for Spine-specific needs like excluding by + * `@Internal` annotation. + * + * @see + * Custom Dokka Plugins + */ + object SpineExtensions { + private const val group = "io.spine.tools" + + const val version = "2.0.0-SNAPSHOT.4" + const val lib = "${group}:spine-dokka-extensions:${version}" + } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt index 607e802c..ac1de17e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ErrorProne.kt @@ -26,11 +26,11 @@ package io.spine.internal.dependency -/// https://errorprone.info/ -@Suppress("unused") +// https://errorprone.info/ +@Suppress("unused", "ConstPropertyName") object ErrorProne { // https://github.com/google/error-prone - private const val version = "2.16" + private const val version = "2.20.0" // https://github.com/tbroyer/gradle-errorprone-plugin/blob/v0.8/build.gradle.kts private const val javacPluginVersion = "9+181-r4173-1" @@ -53,7 +53,7 @@ object ErrorProne { * When the plugin is used as a library (e.g. in tools), its version and the library * artifacts are of importance. */ - const val version = "3.0.1" + const val version = "3.1.0" const val lib = "net.ltgt.gradle:gradle-errorprone-plugin:${version}" } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt index ae4f658f..58cee4c3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ExecForkPlugin.kt @@ -26,13 +26,10 @@ package io.spine.internal.dependency +// https://github.com/psxpaul/gradle-execfork-plugin object ExecForkPlugin { - const val version = "0.1.16" + const val version = "0.2.2" - // The name of the GitHub repository where the plugin is published using GitHub Packages. - const val repository = "gradle-execfork-plugin" - - // The argument to be passed to the `classpath()` clause in `buildscript` for using the plugin. - const val classpath = "io.spine.tools:gradle-execfork-plugin:$version" + const val id = "com.github.psxpaul.execfork" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/FindBugs.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/FindBugs.kt index 50e55e3e..42b6683e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/FindBugs.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/FindBugs.kt @@ -33,6 +33,7 @@ package io.spine.internal.dependency * but no alternatives are known for some of them so far. Please see * [this issue](https://github.com/SpineEventEngine/base/issues/108) for more details. */ +@Suppress("unused", "ConstPropertyName") object FindBugs { private const val version = "3.0.2" const val annotations = "com.google.code.findbugs:jsr305:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Firebase.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Firebase.kt index 8203a129..499c1ce3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Firebase.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Firebase.kt @@ -27,7 +27,7 @@ package io.spine.internal.dependency // https://firebase.google.com/docs/admin/setup#java -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object Firebase { private const val adminVersion = "8.1.0" const val admin = "com.google.firebase:firebase-admin:${adminVersion}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Flogger.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Flogger.kt index f6a649bd..f684bf53 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Flogger.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Flogger.kt @@ -27,13 +27,15 @@ package io.spine.internal.dependency // https://github.com/google/flogger +@Suppress("unused", "ConstPropertyName") object Flogger { internal const val version = "0.7.4" - const val lib = "com.google.flogger:flogger:${version}" - @Suppress("unused") + const val lib = "com.google.flogger:flogger:${version}" + object Runtime { const val systemBackend = "com.google.flogger:flogger-system-backend:${version}" - const val log4J = "com.google.flogger:flogger-log4j:${version}" - const val slf4J = "com.google.flogger:slf4j-backend-factory:${version}" + const val log4j2Backend = "com.google.flogger:flogger-log4j2-backend:${version}" + const val slf4JBackend = "com.google.flogger:flogger-slf4j-backend:${version}" + const val grpcContext = "com.google.flogger:flogger-grpc-context:${version}" } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt index 86a2475c..421915ca 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleApis.kt @@ -29,7 +29,7 @@ package io.spine.internal.dependency /** * Provides dependencies on [GoogleApis projects](https://github.com/googleapis/). */ -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object GoogleApis { // https://github.com/googleapis/google-api-java-client diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt index 4d9a3f98..50913645 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GoogleCloud.kt @@ -26,7 +26,7 @@ package io.spine.internal.dependency -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object GoogleCloud { // https://github.com/googleapis/java-core diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/GradleDoctor.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GradleDoctor.kt new file mode 100644 index 00000000..707fac33 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/GradleDoctor.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.dependency + +/** + * Helps optimize Gradle Builds by ensuring recommendations at build time. + * + * See [plugin site](https://runningcode.github.io/gradle-doctor) for features and usage. + */ +@Suppress("unused", "ConstPropertyName") +object GradleDoctor { + const val version = "0.8.1" + const val pluginId = "com.osacky.doctor" +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt index bfbeb8f5..785b3281 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Grpc.kt @@ -27,10 +27,10 @@ package io.spine.internal.dependency // https://github.com/grpc/grpc-java -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object Grpc { @Suppress("MemberVisibilityCanBePrivate") - const val version = "1.52.1" + const val version = "1.57.0" const val api = "io.grpc:grpc-api:${version}" const val auth = "io.grpc:grpc-auth:${version}" const val core = "io.grpc:grpc-core:${version}" @@ -47,4 +47,3 @@ object Grpc { const val artifact = "io.grpc:protoc-gen-grpc-java:${version}" } } - diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt index 568c5b2c..0a58187c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Gson.kt @@ -32,6 +32,7 @@ package io.spine.internal.dependency * * [Gson](https://github.com/google/gson) */ +@Suppress("unused", "ConstPropertyName") object Gson { private const val version = "2.9.0" const val lib = "com.google.code.gson:gson:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt index 42e24103..1c747d91 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Guava.kt @@ -32,10 +32,20 @@ package io.spine.internal.dependency * When changing the version, also change the version used in the `build.gradle.kts`. We need * to synchronize the version used in `buildSrc` and in Spine modules. Otherwise, when testing * Gradle plugins, errors may occur due to version clashes. + * + * @see Guava at GitHub. */ -// https://github.com/google/guava +@Suppress("unused", "ConstPropertyName") object Guava { - private const val version = "31.1-jre" - const val lib = "com.google.guava:guava:${version}" - const val testLib = "com.google.guava:guava-testlib:${version}" + private const val version = "32.1.2-jre" + private const val group = "com.google.guava" + + const val lib = "${group}:guava:${version}" + const val testLib = "${group}:guava-testlib:${version}" + + object ListenableFuture { + private const val version = "9999.0-empty-to-avoid-conflict-with-guava" + + const val lib = "${group}:listenablefuture:${version}" + } } diff --git a/buildSrc/src/main/groovy/checkstyle.gradle b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Hamcrest.kt similarity index 74% rename from buildSrc/src/main/groovy/checkstyle.gradle rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/Hamcrest.kt index ebfda1a9..297b9692 100644 --- a/buildSrc/src/main/groovy/checkstyle.gradle +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Hamcrest.kt @@ -24,20 +24,17 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * This script configures Gradle Checkstyle plugin. - */ - -import io.spine.internal.dependency.CheckStyle - -println("`checkstyle.gradle` script is deprecated. Please use the `CheckStyleConfig` utility instead.") +package io.spine.internal.dependency -apply plugin: 'checkstyle' - -checkstyle { - toolVersion = "${CheckStyle.version}" - configFile = file("$rootDir/config/quality/checkstyle.xml") - - // Disable checking the test sources. - checkstyleTest.enabled = false +/** + * The dependency on the Hamcrest, which is transitive for us. + * + * If you need assertions in Java, please use Google [Truth] instead. + * For Kotlin, please use [Kotest]. + */ +@Suppress("unused", "ConstPropertyName") +object Hamcrest { + // https://github.com/hamcrest/JavaHamcrest/releases + private const val version = "2.2" + const val core = "org.hamcrest:hamcrest-core:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt index af1a0344..1df0768d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/HttpClient.kt @@ -29,7 +29,7 @@ package io.spine.internal.dependency /** * Google implementations of [HTTP client](https://github.com/googleapis/google-http-java-client). */ -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object HttpClient { // https://github.com/googleapis/google-http-java-client const val version = "1.41.5" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt index 0dd2df5f..dd9d9302 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/J2ObjC.kt @@ -30,6 +30,7 @@ package io.spine.internal.dependency * [J2ObjC](https://developers.google.com/j2objc) is a transitive dependency * which we don't use directly. This object is used for forcing the version. */ +@Suppress("unused", "ConstPropertyName") object J2ObjC { // https://github.com/google/j2objc/releases // `1.3.` is the latest version available from Maven Central. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt index b1c22b94..122c6579 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JUnit.kt @@ -27,27 +27,38 @@ package io.spine.internal.dependency // https://junit.org/junit5/ -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object JUnit { - const val version = "5.9.2" - private const val platformVersion = "1.9.2" - private const val legacyVersion = "4.13.1" + const val version = "5.10.0" + private const val legacyVersion = "4.13.1" // https://github.com/apiguardian-team/apiguardian private const val apiGuardianVersion = "1.1.2" + // https://github.com/junit-pioneer/junit-pioneer - private const val pioneerVersion = "1.9.1" + private const val pioneerVersion = "2.0.1" const val legacy = "junit:junit:${legacyVersion}" + val api = listOf( "org.apiguardian:apiguardian-api:${apiGuardianVersion}", "org.junit.jupiter:junit-jupiter-api:${version}", "org.junit.jupiter:junit-jupiter-params:${version}" ) - const val bom = "org.junit:junit-bom:${version}" - const val runner = "org.junit.jupiter:junit-jupiter-engine:${version}" - const val pioneer = "org.junit-pioneer:junit-pioneer:${pioneerVersion}" - const val platformCommons = "org.junit.platform:junit-platform-commons:${platformVersion}" - const val platformLauncher = "org.junit.platform:junit-platform-launcher:${platformVersion}" + const val bom = "org.junit:junit-bom:${version}" + + const val runner = "org.junit.jupiter:junit-jupiter-engine:${version}" const val params = "org.junit.jupiter:junit-jupiter-params:${version}" + + const val pioneer = "org.junit-pioneer:junit-pioneer:${pioneerVersion}" + + object Platform { + // https://junit.org/junit5/ + const val version = "1.10.0" + internal const val group = "org.junit.platform" + const val commons = "$group:junit-platform-commons:$version" + const val launcher = "$group:junit-platform-launcher:$version" + const val engine = "$group:junit-platform-engine:$version" + const val suiteApi = "$group:junit-platform-suite-api:$version" + } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt index f458f464..3b282166 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jackson.kt @@ -26,10 +26,11 @@ package io.spine.internal.dependency -@Suppress("unused") +// https://github.com/FasterXML/jackson/wiki/Jackson-Releases +@Suppress("unused", "ConstPropertyName") object Jackson { - const val version = "2.13.4" - private const val databindVersion = "2.13.4.2" + const val version = "2.15.2" + private const val databindVersion = "2.15.2" private const val coreGroup = "com.fasterxml.jackson.core" private const val dataformatGroup = "com.fasterxml.jackson.dataformat" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaDiffUtils.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaDiffUtils.kt new file mode 100644 index 00000000..c04aeddc --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaDiffUtils.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.dependency + +/** + * The dependency on the `java-diff-utils` library, which is transitive for us at the time + * of writing. + * + * It might become our dependency as a part of + * the [Spine Text](https://github.com/SpineEventEngine/text) library. + */ +@Suppress("unused", "ConstPropertyName") +object JavaDiffUtils { + + // https://github.com/java-diff-utils/java-diff-utils/releases + private const val version = "4.12" + const val lib = "io.github.java-diff-utils:java-diff-utils:${version}" +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt index c87b9ba4..6e6c3121 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaJwt.kt @@ -31,8 +31,16 @@ package io.spine.internal.dependency * * [Java JWT](https://github.com/auth0/java-jwt) */ -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object JavaJwt { - private const val version = "3.19.1" + + /** + * The last version in the v3.x.x series. + * + * There's a v4.x.x series (e.g. https://github.com/auth0/java-jwt/releases/tag/4.4.0), but + * it introduces breaking changes. Consider upgrading to it when we're ready to migrate. + */ + private const val version = "3.19.4" + const val lib = "com.auth0:java-jwt:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt index 07bb28f3..44ddb2ca 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaPoet.kt @@ -27,7 +27,7 @@ package io.spine.internal.dependency // https://github.com/square/javapoet -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object JavaPoet { private const val version = "1.13.0" const val lib = "com.squareup:javapoet:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt index f403138a..44cbbd59 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/JavaX.kt @@ -26,7 +26,7 @@ package io.spine.internal.dependency -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object JavaX { // This artifact which used to be a part of J2EE moved under Eclipse EE4J project. // https://github.com/eclipse-ee4j/common-annotations-api diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt index 58fc9a35..a2d81ce2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Klaxon.kt @@ -27,10 +27,11 @@ package io.spine.internal.dependency /** - * A JSON parser in Kotlin + * A JSON parser in Kotlin. * * [Klaxon](https://github.com/cbeust/klaxon) */ +@Suppress("unused", "ConstPropertyName") object Klaxon { private const val version = "5.6" const val lib = "com.beust:klaxon:${version}" diff --git a/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsShardProcessingSession.java b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotest.kt similarity index 51% rename from datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsShardProcessingSession.java rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotest.kt index c5d2a1cb..d4942f48 100644 --- a/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsShardProcessingSession.java +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotest.kt @@ -24,28 +24,37 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.server.storage.datastore.delivery; +@file:Suppress("unused") -import com.google.common.annotations.VisibleForTesting; -import io.spine.server.delivery.ShardProcessingSession; -import io.spine.server.delivery.ShardSessionRecord; +package io.spine.internal.dependency /** - * An implementation of a {@link ShardProcessingSession} based on Datastore. + * Testing framework for Kotlin. + * + * @see Kotest site */ -final class DsShardProcessingSession extends ShardProcessingSession { - - private final Runnable completionCallback; +@Suppress("unused", "ConstPropertyName") +object Kotest { + const val version = "5.6.2" + const val group = "io.kotest" + const val assertions = "$group:kotest-assertions-core:$version" + const val runnerJUnit5 = "$group:kotest-runner-junit5:$version" + const val runnerJUnit5Jvm = "$group:kotest-runner-junit5-jvm:$version" + const val frameworkApi = "$group:kotest-framework-api:$version" + const val datatest = "$group:kotest-framework-datatest:$version" + const val frameworkEngine = "$group:kotest-framework-engine:$version" - DsShardProcessingSession(ShardSessionRecord record, - Runnable completionCallback) { - super(record); - this.completionCallback = completionCallback; + // https://plugins.gradle.org/plugin/io.kotest.multiplatform + object MultiplatformGradlePlugin { + const val version = Kotest.version + const val id = "io.kotest.multiplatform" + const val classpath = "$group:kotest-framework-multiplatform-plugin-gradle:$version" } - @Override - @VisibleForTesting // Otherwise should stay `protected`. - public void complete() { - completionCallback.run(); + // https://github.com/kotest/kotest-gradle-plugin + object JvmGradlePlugin { + const val version = "0.4.10" + const val id = "io.kotest" + const val classpath = "$group:kotest-gradle-plugin:$version" } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt index 5124c810..9f53be46 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kotlin.kt @@ -28,24 +28,39 @@ package io.spine.internal.dependency // https://github.com/JetBrains/kotlin // https://github.com/Kotlin -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object Kotlin { /** * When changing the version, also change the version used in the `buildSrc/build.gradle.kts`. */ @Suppress("MemberVisibilityCanBePrivate") // used directly from outside - const val version = "1.8.0" + const val version = "1.9.0" + + /** + * The version of the JetBrains annotations library, which is a transitive + * dependency for us via Kotlin libraries. + * + * https://github.com/JetBrains/java-annotations + */ + private const val annotationsVersion = "23.0.0" private const val group = "org.jetbrains.kotlin" - const val stdLib = "${group}:kotlin-stdlib:${version}" - const val stdLibCommon = "${group}:kotlin-stdlib-common:${version}" - const val stdLibJdk8 = "${group}:kotlin-stdlib-jdk8:${version}" + const val stdLib = "$group:kotlin-stdlib:$version" + const val stdLibCommon = "$group:kotlin-stdlib-common:$version" + + @Deprecated("Please use `stdLib` instead.") + const val stdLibJdk7 = "$group:kotlin-stdlib-jdk7:$version" + + @Deprecated("Please use `stdLib` instead.") + const val stdLibJdk8 = "$group:kotlin-stdlib-jdk8:$version" + + const val reflect = "$group:kotlin-reflect:$version" + const val testJUnit5 = "$group:kotlin-test-junit5:$version" - const val reflect = "${group}:kotlin-reflect:${version}" - const val testJUnit5 = "${group}:kotlin-test-junit5:$version" + const val gradlePluginApi = "$group:kotlin-gradle-plugin-api:$version" + const val gradlePluginLib = "$group:kotlin-gradle-plugin:$version" - const val gradlePluginApi = "${group}:kotlin-gradle-plugin-api:$version" - const val gradlePluginLib = "${group}:kotlin-gradle-plugin:${version}" + const val jetbrainsAnnotations = "org.jetbrains:annotations:$annotationsVersion" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt index ddf8d733..c8e8029b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/KotlinSemver.kt @@ -27,8 +27,8 @@ package io.spine.internal.dependency // https://github.com/z4kn4fein/kotlin-semver -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object KotlinSemver { - private const val version = "1.2.1" + private const val version = "1.4.2" const val lib = "io.github.z4kn4fein:semver:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoValue.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kover.kt similarity index 83% rename from buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoValue.kt rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/Kover.kt index 163e48f9..6acfff68 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoValue.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kover.kt @@ -26,8 +26,10 @@ package io.spine.internal.dependency -// https://github.com/google/auto -object AutoValue { - private const val version = "1.9" - const val annotations = "com.google.auto.value:auto-value-annotations:${version}" +// https://github.com/Kotlin/kotlinx-kover +@Suppress("unused", "ConstPropertyName") +object Kover { + const val version = "0.7.2" + const val id = "org.jetbrains.kotlinx.kover" + const val classpath = "org.jetbrains.kotlinx:kover-gradle-plugin:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/LicenseReport.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/LicenseReport.kt index 72694558..8d079763 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/LicenseReport.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/LicenseReport.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023, TeamDev. All rights reserved. + * Copyright 2022, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt index 6af60700..c4d009f1 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Netty.kt @@ -26,10 +26,10 @@ package io.spine.internal.dependency -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object Netty { // https://github.com/netty/netty/releases - private const val version = "4.1.72.Final" + private const val version = "4.1.95.Final" const val common = "io.netty:netty-common:${version}" const val buffer = "io.netty:netty-buffer:${version}" const val transport = "io.netty:netty-transport:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt index f02122d9..cdbd7396 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Okio.kt @@ -28,9 +28,11 @@ package io.spine.internal.dependency /** * Okio is a transitive dependency which we don't use directly. - * We `force` it in [DependencyResolution.forceConfiguration]. + * We `force` it in [forceVersions] (see `DependencyResolution.kt`). */ +@Suppress("unused", "ConstPropertyName") object Okio { + // This is the last version before next major. private const val version = "1.17.5" const val lib = "com.squareup.okio:okio:${version}" diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoService.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/OpenTest4J.kt similarity index 81% rename from buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoService.kt rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/OpenTest4J.kt index aeb77648..0b189f0d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/AutoService.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/OpenTest4J.kt @@ -26,10 +26,13 @@ package io.spine.internal.dependency -// https://github.com/google/auto -object AutoService { - private const val version = "1.0.1" - const val annotations = "com.google.auto.service:auto-service-annotations:${version}" - @Suppress("unused") - const val processor = "com.google.auto.service:auto-service:${version}" +/** + * The dependency on the OpenTest4j library, which is transitive for us. + */ +@Suppress("unused", "ConstPropertyName") +object OpenTest4J { + + // https://github.com/ota4j-team/opentest4j/releases + private const val version = "1.3.0" + const val lib = "org.opentest4j:opentest4j:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/OsDetector.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/OsDetector.kt index 44253c57..a11cec2f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/OsDetector.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/OsDetector.kt @@ -26,9 +26,10 @@ package io.spine.internal.dependency +@Suppress("unused", "ConstPropertyName") object OsDetector { // https://github.com/google/osdetector-gradle-plugin - const val version = "1.7.0" + const val version = "1.7.3" const val id = "com.google.osdetector" const val lib = "com.google.gradle:osdetector-gradle-plugin:${version}" const val classpath = lib diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/PerfMark.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/PerfMark.kt index c16e6f6c..afd8bb0c 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/PerfMark.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/PerfMark.kt @@ -26,7 +26,8 @@ package io.spine.internal.dependency +// https://github.com/perfmark/perfmark object PerfMark { - const val api = "io.perfmark:perfmark-api:0.23.0" -} + const val api = "io.perfmark:perfmark-api:0.26.0" +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt index 52d08ea8..45a8ef15 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Plexus.kt @@ -24,15 +24,26 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("MaxLineLength") + package io.spine.internal.dependency /** * Plexus Utils is a transitive dependency which we don't use directly. - * We `force` it in [DependencyResolution.forceConfiguration]. + * We `force` it in [forceVersions] (see `DependencyResolution.kt`). * - * [Plexus Utils](https://codehaus-plexus.github.io/plexus-utils/) + * [Plexus Utils](https://github.com/codehaus-plexus/plexus-utils) */ +@Suppress("unused", "ConstPropertyName") object Plexus { - private const val version = "3.4.0" + + /** + * This is the last version in the 3.x series. + * + * There's a major update to 4.x. + * + * @see plexus-utils-4.0.0 + */ + private const val version = "3.5.1" const val utils = "org.codehaus.plexus:plexus-utils:${version}" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt index 65f78082..8d27f55a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Pmd.kt @@ -24,10 +24,19 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("MaxLineLength") + package io.spine.internal.dependency -// https://pmd.github.io/ -@Suppress("unused") // Will be used when `config/gradle/pmd.gradle` migrates to Kotlin. +// https://github.com/pmd/pmd/releases +@Suppress("unused", "ConstPropertyName") object Pmd { - const val version = "6.44.0" + /** + * This is the last version in the 6.x series. + * + * There's a major update to 7.x series. + * + * @see spine-base + */ + const val base = "2.0.0-SNAPSHOT.187" + + /** + * The version of [Spine.reflect]. * - * Development of ProtoData uses custom convention for using custom version - * of ProtoData in its integration tests. Please see `ProtoData/version.gradle.kts` - * for details. + * @see spine-reflect + */ + const val reflect = "2.0.0-SNAPSHOT.182" + + /** + * The version of [Spine.logging]. * - * @see [ProtoData] + * @see spine-logging */ - const val protoData = "0.6.1" + const val logging = "2.0.0-SNAPSHOT.206" /** - * The default version of `base` to use. - * @see [Spine.base] + * The version of [Spine.testlib]. + * + * @see spine-testlib */ - const val base = "2.0.0-SNAPSHOT.146" + const val testlib = "2.0.0-SNAPSHOT.184" /** - * The default version of `core-java` to use. + * The version of `core-java`. + * * @see [Spine.CoreJava.client] * @see [Spine.CoreJava.server] + * @see core-java */ - const val core = "2.0.0-SNAPSHOT.149" + const val core = "2.0.0-SNAPSHOT.155" /** - * The version of `model-compiler` to use. - * @see [Spine.modelCompiler] + * The version of [Spine.modelCompiler]. + * + * @see spine-model-compiler */ - const val mc = "2.0.0-SNAPSHOT.130" + const val mc = "2.0.0-SNAPSHOT.132" /** - * The version of `mc-java` to use. + * The version of [McJava]. + * + * @see spine-mc-java */ - const val mcJava = "2.0.0-SNAPSHOT.132" + const val mcJava = "2.0.0-SNAPSHOT.168" /** - * The version of `base-types` to use. - * @see [Spine.baseTypes] + * The version of [Spine.baseTypes]. + * + * @see spine-base-types */ - const val baseTypes = "2.0.0-SNAPSHOT.113" + const val baseTypes = "2.0.0-SNAPSHOT.124" /** - * The version of `time` to use. - * @see [Spine.time] + * The version of [Spine.time]. + * + * @see spine-time */ - const val time = "2.0.0-SNAPSHOT.121" + const val time = "2.0.0-SNAPSHOT.133" /** - * The version of `change` to use. - * @see [Spine.change] + * The version of [Spine.change]. + * + * @see spine-change */ const val change = "2.0.0-SNAPSHOT.118" /** - * The version of `text` to use. + * The version of [Spine.text]. * - * @see Spine.text - */ - const val text = "2.0.0-SNAPSHOT.2" - - /** - * The version of `tool-base` to use. - * @see [Spine.toolBase] + * @see spine-text */ - const val toolBase = "2.0.0-SNAPSHOT.156" + const val text = "2.0.0-SNAPSHOT.5" /** - * The version of `validation` to use. - * @see [Spine.validation] + * The version of [Spine.toolBase]. */ - const val validation = "2.0.0-SNAPSHOT.80" + const val toolBase = "2.0.0-SNAPSHOT.180" /** - * The version of Javadoc Tools to use. - * @see [Spine.javadocTools] + * The version of [Spine.javadocTools]. + * + * @see spine-javadoc-tools */ const val javadocTools = "2.0.0-SNAPSHOT.75" } - companion object { - const val group = "io.spine" - const val toolsGroup = "io.spine.tools" + const val base = "$group:spine-base:${ArtifactVersion.base}" - /** - * The version of ProtoData to be used in the project. - * - * We do it here instead of `versions.gradle.kts` because we later use - * it in a `plugins` section in a build script. - * - * @see [ProtoData] - */ - const val protoDataVersion = DefaultVersion.protoData - } + @Deprecated("Use `Logging.lib` instead.", ReplaceWith("Logging.lib")) + const val logging = "$group:spine-logging:${ArtifactVersion.logging}" + @Deprecated("Use `Logging.context` instead.", ReplaceWith("Logging.context")) + const val loggingContext = "$group:spine-logging-context:${ArtifactVersion.logging}" + @Deprecated("Use `Logging.backend` instead.", ReplaceWith("Logging.backend")) + const val loggingBackend = "$group:spine-logging-backend:${ArtifactVersion.logging}" - val base = "$group:spine-base:${p.baseVersion}" - val baseTypes = "$group:spine-base-types:${p.baseTypesVersion}" - val time = "$group:spine-time:${p.timeVersion}" - val change = "$group:spine-change:${p.changeVersion}" - val text = "$group:spine-text:${p.textVersion}" + const val reflect = "$group:spine-reflect:${ArtifactVersion.reflect}" + const val baseTypes = "$group:spine-base-types:${ArtifactVersion.baseTypes}" + const val time = "$group:spine-time:${ArtifactVersion.time}" + const val change = "$group:spine-change:${ArtifactVersion.change}" + const val text = "$group:spine-text:${ArtifactVersion.text}" - val testlib = "$toolsGroup:spine-testlib:${p.baseVersion}" - val testUtilTime = "$toolsGroup:spine-testutil-time:${p.timeVersion}" - val toolBase = "$toolsGroup:spine-tool-base:${p.toolBaseVersion}" - val pluginBase = "$toolsGroup:spine-plugin-base:${p.toolBaseVersion}" - val pluginTestlib = "$toolsGroup:spine-plugin-testlib:${p.toolBaseVersion}" - val modelCompiler = "$toolsGroup:spine-model-compiler:${p.mcVersion}" + const val testlib = "$toolsGroup:spine-testlib:${ArtifactVersion.testlib}" + const val testUtilTime = "$toolsGroup:spine-testutil-time:${ArtifactVersion.time}" + const val toolBase = "$toolsGroup:spine-tool-base:${ArtifactVersion.toolBase}" + const val pluginBase = "$toolsGroup:spine-plugin-base:${ArtifactVersion.toolBase}" + const val pluginTestlib = "$toolsGroup:spine-plugin-testlib:${ArtifactVersion.toolBase}" + const val modelCompiler = "$toolsGroup:spine-model-compiler:${ArtifactVersion.mc}" /** - * Coordinates of the McJava plugin bundle which uses version of the bundle - * from [ExtensionAware.mcJavaVersion] property. + * Dependencies on the artifacts of the Spine Logging library. * - * This property and [ExtensionAware.mcJavaVersion] are deprecated because - * we discourage using versions of Spine components outside of this dependency - * object class. + * @see spine-logging */ - @Deprecated(message = "Please use `McJava.pluginLib` instead") - @Suppress("DEPRECATION") - val mcJavaPlugin = "$toolsGroup:spine-mc-java-plugins:${p.mcJavaVersion}:all" - - object McJava { - const val version = DefaultVersion.mcJava - const val pluginId = "io.spine.mc-java" - const val pluginLib = "$toolsGroup:spine-mc-java-plugins:${version}:all" + object Logging { + const val version = ArtifactVersion.logging + const val lib = "$group:spine-logging:$version" + const val backend = "$group:spine-logging-backend:$version" + const val context = "$group:spine-logging-context:$version" + const val floggerApi = "$group:spine-flogger-api:$version" + const val floggerGrpcContext = "$group:spine-flogger-grpc-context:$version" + const val smokeTest = "$group:spine-logging-smoke-test:$version" } - /** - * Does not allow re-definition via a project property. - * Please change [DefaultVersion.javadocTools]. - */ - val javadocTools = "$toolsGroup::${DefaultVersion.javadocTools}" - - @Deprecated("Please use `validation.runtime`", replaceWith = ReplaceWith("validation.runtime")) - val validate = "$group:spine-validate:${p.baseVersion}" - - val validation = Validation(p) - - val coreJava = CoreJava(p) - val client = coreJava.client // Added for brevity. - val server = coreJava.server // Added for brevity. - - private val ExtensionAware.baseVersion: String - get() = "baseVersion".asExtra(this, DefaultVersion.base) - - private val ExtensionAware.baseTypesVersion: String - get() = "baseTypesVersion".asExtra(this, DefaultVersion.baseTypes) - - private val ExtensionAware.timeVersion: String - get() = "timeVersion".asExtra(this, DefaultVersion.time) - - private val ExtensionAware.changeVersion: String - get() = "changeVersion".asExtra(this, DefaultVersion.change) - - private val ExtensionAware.textVersion: String - get() = "textVersion".asExtra(this, DefaultVersion.text) - - private val ExtensionAware.mcVersion: String - get() = "mcVersion".asExtra(this, DefaultVersion.mc) - - @Deprecated(message = "Please use `Spine.McJava` dependency object instead.") - private val ExtensionAware.mcJavaVersion: String - get() = "mcJavaVersion".asExtra(this, DefaultVersion.mcJava) - - private val ExtensionAware.toolBaseVersion: String - get() = "toolBaseVersion".asExtra(this, DefaultVersion.toolBase) /** - * Dependencies on Spine validation modules. + * Dependencies on Spine Model Compiler for Java. * - * See [`SpineEventEngine/validation`](https://github.com/SpineEventEngine/validation/). + * See [mc-java](https://github.com/SpineEventEngine/mc-java). */ - class Validation(p: ExtensionAware) { - companion object { - const val group = "io.spine.validation" - } - val runtime = "$group:spine-validation-java-runtime:${p.validationVersion}" - val java = "$group:spine-validation-java:${p.validationVersion}" - val model = "$group:spine-validation-model:${p.validationVersion}" - val config = "$group:spine-validation-configuration:${p.validationVersion}" - - private val ExtensionAware.validationVersion: String - get() = "validationVersion".asExtra(this, DefaultVersion.validation) + object McJava { + const val version = ArtifactVersion.mcJava + const val pluginId = "io.spine.mc-java" + const val pluginLib = "$toolsGroup:spine-mc-java-plugins:${version}:all" } - /** - * Dependencies on ProtoData modules. - * - * See [`SpineEventEngine/ProtoData`](https://github.com/SpineEventEngine/ProtoData/). - */ - object ProtoData { - const val group = "io.spine.protodata" - const val version = protoDataVersion - const val compiler = "$group:protodata-compiler:$version" - - const val codegenJava = "io.spine.protodata:protodata-codegen-java:$version" + @Deprecated("Please use `javadocFilter` instead.", ReplaceWith("javadocFilter")) + const val javadocTools = "$toolsGroup::${ArtifactVersion.javadocTools}" + const val javadocFilter = "$toolsGroup:spine-javadoc-filter:${ArtifactVersion.javadocTools}" - const val pluginId = "io.spine.protodata" - const val pluginLib = "${Spine.group}:protodata:$version" - } + const val client = CoreJava.client // Added for brevity. + const val server = CoreJava.server // Added for brevity. /** * Dependencies on `core-java` modules. * * See [`SpineEventEngine/core-java`](https://github.com/SpineEventEngine/core-java/). */ - class CoreJava(p: ExtensionAware) { - val core = "$group:spine-core:${p.coreVersion}" - val client = "$group:spine-client:${p.coreVersion}" - val server = "$group:spine-server:${p.coreVersion}" - val testUtilServer = "$toolsGroup:spine-testutil-server:${p.coreVersion}" - - private val ExtensionAware.coreVersion: String - get() = "coreVersion".asExtra(this, DefaultVersion.core) - } -} - -/** - * Obtains the value of the extension property named as this string from the given project. - * - * @param p the project declaring extension properties - * @param defaultValue - * the default value to return, if the project does not have such a property. - * If `null` then rely on the property declaration, even if this would cause an error. - */ -private fun String.asExtra(p: ExtensionAware, defaultValue: String? = null): String { - return if (p.extra.has(this) || defaultValue == null) { - p.extra[this] as String - } else { - defaultValue + object CoreJava { + const val version = ArtifactVersion.core + const val core = "$group:spine-core:$version" + const val client = "$group:spine-client:$version" + const val server = "$group:spine-server:$version" + const val serverTests = "$server:test" + const val testUtilServer = "$toolsGroup:spine-testutil-server:$version" } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt index 30649dc4..a345b0fb 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/TestKitTruth.kt @@ -24,19 +24,18 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("MaxLineLength") + package io.spine.internal.dependency /** * Gradle TestKit extension for Google Truth. * - * Source code: - * https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin/tree/main/testkit-truth - * - * Usage description: - * https://dev.to/autonomousapps/gradle-all-the-way-down-testing-your-gradle-plugin-with-gradle-testkit-2hmc + * @see TestKit source code + * @see Usage description */ -@Suppress("unused") +@Suppress("unused", "ConstPropertyName") object TestKitTruth { - private const val version = "1.1" + private const val version = "1.20.0" const val lib = "com.autonomousapps:testkit-truth:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt index 2303d5a3..31354171 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Truth.kt @@ -27,8 +27,9 @@ package io.spine.internal.dependency // https://github.com/google/truth +@Suppress("unused", "ConstPropertyName") object Truth { - private const val version = "1.1.3" + private const val version = "1.1.5" val libs = listOf( "com.google.truth:truth:${version}", "com.google.truth.extensions:truth-java8-extension:${version}", diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Validation.kt similarity index 68% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt rename to buildSrc/src/main/kotlin/io/spine/internal/dependency/Validation.kt index 39c635db..e663ca1d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/TestJar.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Validation.kt @@ -24,27 +24,19 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.internal.gradle.publish +package io.spine.internal.dependency /** - * A DSL element of [SpinePublishing] extension which allows enabling publishing - * of [testJar] artifact. + * Dependencies on Spine Validation SDK. * - * This artifact contains compilation output of `test` source set. By default, it is not published. - * - * Take a look on [SpinePublishing.testJar] for a usage example. - - * @see [registerArtifacts] + * See [`SpineEventEngine/validation`](https://github.com/SpineEventEngine/validation/). */ -class TestJar { - - /** - * Set of modules, for which a test JAR will be published. - */ - var inclusions: Set = emptySet() - - /** - * Enables test JAR publishing for all published modules. - */ - var enabled = false +@Suppress("unused", "ConstPropertyName") +object Validation { + const val version = "2.0.0-SNAPSHOT.99" + const val group = "io.spine.validation" + const val runtime = "$group:spine-validation-java-runtime:$version" + const val java = "$group:spine-validation-java:$version" + const val model = "$group:spine-validation-model:$version" + const val config = "$group:spine-validation-configuration:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt index 87ec070b..65e00ad8 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ConfigTester.kt @@ -60,6 +60,15 @@ class ConfigTester( private val tasks: TaskContainer, private val tempFolder: File = File("./tmp") ) { + + companion object { + + /** + * Gradle build timeout. + */ + private const val BUILD_TIMEOUT_MINUTES = 30L + } + private val buildSrc: Path = config.resolve("buildSrc") /** @@ -132,7 +141,7 @@ class ConfigTester( println("*** `${gitRepo.name}`: Gradle build completed. ***") } directory = gitRepo.prepareCheckout(tempFolder).absolutePath - maxDurationMins = 30 + maxDurationMins = BUILD_TIMEOUT_MINUTES } } @@ -302,31 +311,31 @@ class ClonedRepo( @Suppress("TooGenericExceptionCaught") private fun copyFolder(sourceFolder: Path, ignoredFolder: Path?, destinationFolder: Path) { try { - Files.walk(sourceFolder).forEach { file: Path -> - if (ignoredFolder != null) { - if (file.toAbsolutePath().startsWith(ignoredFolder.toAbsolutePath())) { - return@forEach - } - } - try { - val destination = destinationFolder.resolve(sourceFolder.relativize(file)) - if (Files.isDirectory(file)) { - if (!Files.exists(destination)) Files.createDirectory(destination) - return@forEach - } - Files.copy(file, destination) - } catch (e: Exception) { - throw IllegalStateException( - "Error copying folder `$sourceFolder` to `$destinationFolder`.", e - ) - } - } + copyRecursively(sourceFolder, ignoredFolder, destinationFolder) } catch (e: Exception) { throw IllegalStateException( "Error copying folder `$sourceFolder` to `$destinationFolder`.", e ) } } + + private fun copyRecursively(sourceFolder: Path, ignoredFolder: Path?, destinationFolder: Path) { + fun Path.isIgnored(): Boolean = ignoredFolder + ?.let { toAbsolutePath().startsWith(it.toAbsolutePath()) } + ?: false + + val flattenedTree = Files.walk(sourceFolder).filter { it.isIgnored().not() } + val filesToDestinations = flattenedTree.map { file -> + val destination = destinationFolder.resolve(sourceFolder.relativize(file)) + file to destination + } + + val directories = filesToDestinations.filter { Files.isDirectory(it.first) } + directories.forEach { Files.createDirectories(it.second) } + + val files = filesToDestinations.filter { Files.isDirectory(it.first).not() } + files.forEach { Files.copy(it.first, it.second) } + } } /** diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt index b51bb20f..2ef4bd8e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt @@ -69,7 +69,8 @@ fun Project.applyPlugin(cls: Class>) { @Suppress("UNCHECKED_CAST") /* See the method docs. */ fun Project.findTask(name: String): T { val task = this.tasks.findByName(name) - return task!! as T + ?: error("Unable to find a task named `$name` in the project `${this.name}`.") + return task as T } /** diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt index adac9f8b..8c5015e3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Repositories.kt @@ -24,6 +24,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +@file:Suppress("TooManyFunctions") // Deprecated functions will be kept for a while. + package io.spine.internal.gradle import io.spine.internal.gradle.publish.CloudRepo @@ -35,106 +37,38 @@ import java.util.* import org.gradle.api.Project import org.gradle.api.artifacts.dsl.RepositoryHandler import org.gradle.api.artifacts.repositories.MavenArtifactRepository +import org.gradle.kotlin.dsl.ScriptHandlerScope /** - * A Maven repository. - */ -data class Repository( - val releases: String, - val snapshots: String, - private val credentialsFile: String? = null, - private val credentialValues: ((Project) -> Credentials?)? = null, - val name: String = "Maven repository `$releases`" -) { - - /** - * Obtains the publishing password credentials to this repository. - * - * If the credentials are represented by a `.properties` file, reads the file and parses - * the credentials. The file must have properties `user.name` and `user.password`, which store - * the username and the password for the Maven repository auth. - */ - fun credentials(project: Project): Credentials? { - if (credentialValues != null) { - return credentialValues.invoke(project) - } - credentialsFile!! - val log = project.logger - log.info("Using credentials from `$credentialsFile`.") - val file = project.rootProject.file(credentialsFile) - if (!file.exists()) { - return null - } - val creds = file.readCredentials() - log.info("Publishing build as `${creds.username}`.") - return creds - } - - private fun File.readCredentials(): Credentials { - val properties = Properties() - properties.load(inputStream()) - val username = properties.getProperty("user.name") - val password = properties.getProperty("user.password") - return Credentials(username, password) - } - - override fun toString(): String { - return name - } -} - -/** - * Password credentials for a Maven repository. - */ -data class Credentials( - val username: String?, - val password: String? -) - -/** - * Defines names of additional repositories commonly used in the framework projects. + * Applies [standard][doApplyStandard] repositories to this [ScriptHandlerScope] + * optionally adding [gitHub] repositories for Spine-only components, if + * names of such repositories are given. * - * @see [applyStandard] + * @param buildscript + * a [ScriptHandlerScope] to work with. Pass `this` under `buildscript { }`. + * @param rootProject + * a root project where the `buildscript` is declared. + * @param gitHubRepo + * a list of short repository names, or empty list if only + * [standard repositories][doApplyStandard] are required. */ @Suppress("unused") -object Repos { - @Deprecated( - message = "Please use another repository.", - replaceWith = ReplaceWith("artifactRegistry"), - level = DeprecationLevel.ERROR - ) - val oldSpine = PublishingRepos.mavenTeamDev.releases - - @Deprecated( - message = "Please use another repository.", - replaceWith = ReplaceWith("artifactRegistrySnapshots"), - level = DeprecationLevel.ERROR - ) - val oldSpineSnapshots = PublishingRepos.mavenTeamDev.snapshots - - val spine = CloudRepo.published.releases - val spineSnapshots = CloudRepo.published.snapshots - - val artifactRegistry = PublishingRepos.cloudArtifactRegistry.releases - val artifactRegistrySnapshots = PublishingRepos.cloudArtifactRegistry.snapshots - - @Deprecated( - message = "Sonatype release repository redirects to the Maven Central", - replaceWith = ReplaceWith("sonatypeSnapshots"), - level = DeprecationLevel.ERROR - ) - const val sonatypeReleases = "https://oss.sonatype.org/content/repositories/snapshots" - const val sonatypeSnapshots = "https://oss.sonatype.org/content/repositories/snapshots" +@Deprecated( + message = "Please use `standardSpineSdkRepositories()`.", + replaceWith = ReplaceWith("standardSpineSdkRepositories()") +) +fun applyWithStandard( + buildscript: ScriptHandlerScope, + rootProject: Project, + vararg gitHubRepo: String +) { + val repositories = buildscript.repositories + gitHubRepo.iterator().forEachRemaining { repo -> + repositories.applyGitHubPackages(repo, rootProject) + } + repositories.standardToSpineSdk() } -/** - * Registers the standard set of Maven repositories. - * - * To be used in `buildscript` clauses when a fully-qualified call must be made. - */ -@Suppress("unused") -fun doApplyStandard(repositories: RepositoryHandler) = repositories.applyStandard() - /** * Registers the selected GitHub Packages repos as Maven repositories. * @@ -145,11 +79,14 @@ fun doApplyStandard(repositories: RepositoryHandler) = repositories.applyStandar * @param shortRepositoryName * the short name of the GitHub repository (e.g. "core-java") * @param project - * the project which is going to consume or publish artifacts from - * the registered repository + * the project which is going to consume artifacts from the repository * @see applyGitHubPackages */ @Suppress("unused") +@Deprecated( + message = "Please use `standardSpineSdkRepositories()`.", + replaceWith = ReplaceWith("standardSpineSdkRepositories()") +) fun doApplyGitHubPackages( repositories: RepositoryHandler, shortRepositoryName: String, @@ -157,16 +94,27 @@ fun doApplyGitHubPackages( ) = repositories.applyGitHubPackages(shortRepositoryName, project) /** - * Applies the repositories hosted at GitHub Packages, to which Spine artifacts were published. + * Registers the standard set of Maven repositories. + * + * To be used in `buildscript` clauses when a fully-qualified call must be made. + */ +@Suppress("unused") +@Deprecated( + message = "Please use `standardSpineSdkRepositories()`.", + replaceWith = ReplaceWith("standardSpineSdkRepositories()") +) +fun doApplyStandard(repositories: RepositoryHandler) = repositories.standardToSpineSdk() + +/** + * Applies the repository hosted at GitHub Packages, to which Spine artifacts were published. * * This method should be used by those wishing to have Spine artifacts published * to GitHub Packages as dependencies. * * @param shortRepositoryName - * the short name of the GitHub repository (e.g. "core-java") + * short names of the GitHub repository (e.g. "base", "core-java", "model-tools") * @param project - * the project which is going to consume or publish artifacts from - * the registered repository + * the project which is going to consume artifacts from repositories */ fun RepositoryHandler.applyGitHubPackages(shortRepositoryName: String, project: Project) { val repository = gitHub(shortRepositoryName) @@ -179,17 +127,98 @@ fun RepositoryHandler.applyGitHubPackages(shortRepositoryName: String, project: } /** - * Applies repositories commonly used by Spine Event Engine projects. + * Applies the repositories hosted at GitHub Packages, to which Spine artifacts were published. * - * Does not include the repositories hosted at GitHub Packages. + * This method should be used by those wishing to have Spine artifacts published + * to GitHub Packages as dependencies. * - * @see applyGitHubPackages + * @param shortRepositoryName + * the short name of the GitHub repository (e.g. "core-java") + * @param project + * the project which is going to consume or publish artifacts from + * the registered repository + */ +fun RepositoryHandler.applyGitHubPackages(project: Project, vararg shortRepositoryName: String) { + for (name in shortRepositoryName) { + applyGitHubPackages(name, project) + } +} + +/** + * Applies [standard][applyStandard] repositories to this [RepositoryHandler] + * optionally adding [applyGitHubPackages] repositories for Spine-only components, if + * names of such repositories are given. + * + * @param project + * a project to which we add dependencies + * @param gitHubRepo + * a list of short repository names, or empty list if only + * [standard repositories][applyStandard] are required. */ @Suppress("unused") -fun RepositoryHandler.applyStandard() { +@Deprecated( + message = "Please use `standardToSpineSdk()`.", + replaceWith = ReplaceWith("standardToSpineSdk()") +) +fun RepositoryHandler.applyStandardWithGitHub(project: Project, vararg gitHubRepo: String) { + gitHubRepo.iterator().forEachRemaining { repo -> + applyGitHubPackages(repo, project) + } + standardToSpineSdk() +} - gradlePluginPortal() - mavenLocal() +/** + * A scrambled version of PAT generated with the only "read:packages" scope. + * + * The scrambling around PAT is necessary because GitHub analyzes commits for the presence + * of tokens and invalidates them. + * + * @see + * How to make GitHub packages to the public + */ +object Pat { + private const val shade = "_phg->8YlN->MFRA->gxIk->HVkm->eO6g->FqHJ->z8MS->H4zC->ZEPq" + private const val separator = "->" + private val chunks: Int = shade.split(separator).size - 1 + + fun credentials(): Credentials { + val pass = shade.replace(separator, "").splitAndReverse(chunks, "") + return Credentials("public", pass) + } + + /** + * Splits this string to the chunks, reverses each chunk, and joins them + * back to a string using the [separator]. + */ + private fun String.splitAndReverse(numChunks: Int, separator: String): String { + check(length / numChunks >= 2) { + "The number of chunks is too big. Must be <= ${length / 2}." + } + val chunks = chunked(length / numChunks) + val reversedChunks = chunks.map { chunk -> chunk.reversed() } + return reversedChunks.joinToString(separator) + } +} + +/** + * Adds a read-only view to all artifacts of the SpineEventEngine + * GitHub organization. + */ +fun RepositoryHandler.spineArtifacts(): MavenArtifactRepository = maven { + url = URI("https://maven.pkg.github.com/SpineEventEngine/*") + includeSpineOnly() + val pat = Pat.credentials() + credentials { + username = pat.username + password = pat.password + } +} + +/** + * Applies repositories commonly used by Spine Event Engine projects. + */ +fun RepositoryHandler.standardToSpineSdk() { + spineArtifacts() val spineRepos = listOf( Repos.spine, @@ -207,10 +236,99 @@ fun RepositoryHandler.applyStandard() { } } - mavenCentral() maven { url = URI(Repos.sonatypeSnapshots) } + + mavenCentral() + gradlePluginPortal() + mavenLocal().includeSpineOnly() +} + +@Deprecated( + message = "Please use `standardToSpineSdk() instead.", + replaceWith = ReplaceWith("standardToSpineSdk()") +) +fun RepositoryHandler.applyStandard() = this.standardToSpineSdk() + +/** + * A Maven repository. + */ +data class Repository( + val releases: String, + val snapshots: String, + private val credentialsFile: String? = null, + private val credentialValues: ((Project) -> Credentials?)? = null, + val name: String = "Maven repository `$releases`" +) { + + /** + * Obtains the publishing password credentials to this repository. + * + * If the credentials are represented by a `.properties` file, reads the file and parses + * the credentials. The file must have properties `user.name` and `user.password`, which store + * the username and the password for the Maven repository auth. + */ + fun credentials(project: Project): Credentials? = when { + credentialValues != null -> credentialValues.invoke(project) + credentialsFile != null -> credsFromFile(credentialsFile, project) + else -> throw IllegalArgumentException( + "Credentials file or a supplier function should be passed." + ) + } + + private fun credsFromFile(fileName: String, project: Project): Credentials? { + val file = project.rootProject.file(fileName) + if (file.exists().not()) { + return null + } + + val log = project.logger + log.info("Using credentials from `$fileName`.") + val creds = file.parseCredentials() + log.info("Publishing build as `${creds.username}`.") + return creds + } + + private fun File.parseCredentials(): Credentials { + val properties = Properties().apply { load(inputStream()) } + val username = properties.getProperty("user.name") + val password = properties.getProperty("user.password") + return Credentials(username, password) + } + + override fun toString(): String { + return name + } +} + +/** + * Password credentials for a Maven repository. + */ +data class Credentials( + val username: String?, + val password: String? +) + +/** + * Defines names of additional repositories commonly used in the Spine SDK projects. + * + * @see [applyStandard] + */ +private object Repos { + val spine = CloudRepo.published.releases + val spineSnapshots = CloudRepo.published.snapshots + val artifactRegistry = PublishingRepos.cloudArtifactRegistry.releases + val artifactRegistrySnapshots = PublishingRepos.cloudArtifactRegistry.snapshots + + @Suppress("unused") + @Deprecated( + message = "Sonatype release repository redirects to the Maven Central", + replaceWith = ReplaceWith("sonatypeSnapshots"), + level = DeprecationLevel.ERROR + ) + const val sonatypeReleases = "https://oss.sonatype.org/content/repositories/snapshots" + const val sonatypeSnapshots = "https://oss.sonatype.org/content/repositories/snapshots" } /** diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt index d5bb989e..926b237f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/RunGradle.kt @@ -27,6 +27,7 @@ package io.spine.internal.gradle import java.io.File +import java.io.FileOutputStream import java.util.concurrent.TimeUnit import org.gradle.api.DefaultTask import org.gradle.api.GradleException @@ -46,6 +47,14 @@ import org.gradle.internal.os.OperatingSystem @Suppress("unused") open class RunGradle : DefaultTask() { + companion object { + + /** + * Default Gradle build timeout. + */ + private const val BUILD_TIMEOUT_MINUTES: Long = 10 + } + /** * Path to the directory which contains a Gradle wrapper script. */ @@ -61,7 +70,7 @@ open class RunGradle : DefaultTask() { * For how many minutes to wait for the Gradle build to complete. */ @Internal - var maxDurationMins: Long = 10 + var maxDurationMins: Long = BUILD_TIMEOUT_MINUTES /** * Names of Gradle properties to copy into the launched build. @@ -94,13 +103,17 @@ open class RunGradle : DefaultTask() { private fun execute() { // Ensure build error output log. // Since we're executing this task in another process, we redirect error output to - // the file under the `build` directory. - val buildDir = File(directory, "build") + // the file under the `_out` directory. Using the `build` directory for this purpose + // proved to cause problems under Windows when executing the `clean` command, which + // fails because another process holds files. + val buildDir = File(directory, "_out") if (!buildDir.exists()) { buildDir.mkdir() } val errorOut = File(buildDir, "error-out.txt") + errorOut.truncate() val debugOut = File(buildDir, "debug-out.txt") + debugOut.truncate() val command = buildCommand() val process = startProcess(command, errorOut, debugOut) @@ -154,7 +167,7 @@ open class RunGradle : DefaultTask() { } private fun buildScript(): String { - val runsOnWindows = OperatingSystem.current().isWindows() + val runsOnWindows = OperatingSystem.current().isWindows return if (runsOnWindows) "gradlew.bat" else "gradlew" } @@ -166,3 +179,10 @@ open class RunGradle : DefaultTask() { .redirectOutput(debugOut) .start() } + +private fun File.truncate() { + val stream = FileOutputStream(this) + stream.use { + it.channel.truncate(0) + } +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt index 51aa52a2..6594a2a2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Runtime.kt @@ -26,17 +26,17 @@ package io.spine.internal.gradle -import com.google.common.base.Joiner -import io.spine.internal.dependency.Flogger import java.io.File import java.io.InputStream import java.io.StringWriter +import java.lang.ProcessBuilder.Redirect.PIPE import java.util.* -object Runtime { - @Suppress("unused") - val flogger = Flogger.Runtime -} +/** + * Utilities for working with processes from Gradle code. + */ +@Suppress("unused") +private const val ABOUT = "" /** * Executor of CLI commands. @@ -60,23 +60,26 @@ class Cli(private val workingFolder: File) { val outWriter = StringWriter() val errWriter = StringWriter() - val process = ProcessBuilder(*command) - .directory(workingFolder) - .redirectOutput(ProcessBuilder.Redirect.PIPE) - .redirectError(ProcessBuilder.Redirect.PIPE) - .start() + val process = ProcessBuilder(*command).apply { + directory(workingFolder) + redirectOutput(PIPE) + redirectError(PIPE) + }.start() - process.inputStream!!.pourTo(outWriter) - process.errorStream!!.pourTo(errWriter) - val exitCode = process.waitFor() + val exitCode = process.run { + inputStream!!.pourTo(outWriter) + errorStream!!.pourTo(errWriter) + waitFor() + } if (exitCode == 0) { return outWriter.toString() } else { - val cmdAsString = Joiner.on(" ").join(command.iterator()) - val errorMsg = "Command `$cmdAsString` finished with exit code $exitCode:" + - " ${System.lineSeparator()}$errWriter" + - " ${System.lineSeparator()}$outWriter." + val commandLine = command.joinToString(" ") + val nl = System.lineSeparator() + val errorMsg = "Command `$commandLine` finished with exit code $exitCode:" + + "$nl$errWriter" + + "$nl$outWriter." throw IllegalStateException(errorMsg) } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Scripts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/Scripts.kt deleted file mode 100644 index 9e9bed78..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/Scripts.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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.internal.gradle - -import org.gradle.api.Project - -@Suppress("unused") -object Scripts { - @Suppress("MemberVisibilityCanBePrivate") // is used from Groovy-based scripts. - const val commonPath = "/buildSrc/src/main/groovy/" - - fun testArtifacts(p: Project) = p.script("test-artifacts.gradle") - fun testOutput(p: Project) = p.script("test-output.gradle") - fun slowTests(p: Project) = p.script("slow-tests.gradle") - fun jacoco(p: Project) = p.script("jacoco.gradle") - fun publish(p: Project) = p.script("publish.gradle") - fun publishProto(p: Project) = p.script("publish-proto.gradle") - fun javacArgs(p: Project) = p.script("javac-args.gradle") - fun jsBuildTasks(p: Project) = p.script("js/build-tasks.gradle") - fun jsConfigureProto(p: Project) = p.script("js/configure-proto.gradle") - fun npmPublishTasks(p: Project) = p.script("js/npm-publish-tasks.gradle") - fun npmCli(p: Project) = p.script("js/npm-cli.gradle") - fun updatePackageVersion(p: Project) = p.script("js/update-package-version.gradle") - fun dartBuildTasks(p: Project) = p.script("dart/build-tasks.gradle") - fun pubPublishTasks(p: Project) = p.script("dart/pub-publish-tasks.gradle") - - @Deprecated("Use `pmd-settings` script plugin instead") - fun pmd(p: Project) = p.script("pmd.gradle") - - fun runBuild(p: Project) = p.script("run-build.gradle") - fun licenseReportCommon(p: Project) = p.script("license-report-common.gradle") - fun projectLicenseReport(p: Project) = p.script("license-report-project.gradle") - fun repoLicenseReport(p: Project) = p.script("license-report-repo.gradle") - - private fun Project.script(name: String) = "${rootDir}$commonPath${name}" -} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt index e1a320c7..3dc7ef29 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/VersionWriter.kt @@ -97,7 +97,7 @@ abstract class WriteVersions : DefaultTask() { * `versions-spine-tools.properties`. */ @TaskAction - private fun writeFile() { + fun writeFile() { versions.finalizeValue() versionsFileLocation.finalizeValue() diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt index b363616c..65f6fb2f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/plugin/Protobuf.kt @@ -26,10 +26,8 @@ package io.spine.internal.gradle.dart.plugin -import com.google.protobuf.gradle.builtins import com.google.protobuf.gradle.id -import com.google.protobuf.gradle.plugins -import com.google.protobuf.gradle.protobuf +import com.google.protobuf.gradle.ProtobufExtension import com.google.protobuf.gradle.remove import io.spine.internal.dependency.Protobuf @@ -42,9 +40,10 @@ fun DartPlugins.protobuf() { plugins.apply(Protobuf.GradlePlugin.id) - project.protobuf { - generateProtoTasks.all().forEach { task -> - task.apply { + val protobufExtension = project.extensions.getByType(ProtobufExtension::class.java) + protobufExtension.apply { + generateProtoTasks.all().configureEach { + apply { plugins { id("dart") } builtins { remove("java") } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/IntegrationTest.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/IntegrationTest.kt index b2729c3f..69c691a2 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/IntegrationTest.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/IntegrationTest.kt @@ -71,6 +71,7 @@ val TaskContainer.integrationTest: TaskProvider * } * ``` */ +@Suppress("unused") fun DartTasks.integrationTest() = register(integrationTestName) { diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt index ae3f04cc..08b7b009 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dart/task/Publish.kt @@ -110,7 +110,7 @@ private fun DartTasks.stagePubPublication(): TaskProvider = into(publicationDir) doLast { - logger.debug("Pub publication is prepared in directory `$publicationDir`.") + logger.debug("Pub publication is prepared in directory `{}`.", publicationDir) } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt similarity index 60% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt index ffa31c44..a912d50b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoJar.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023, TeamDev. All rights reserved. + * Copyright 2022, 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. @@ -24,28 +24,24 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package io.spine.internal.gradle.publish +package io.spine.internal.gradle.dokka + +import java.io.File +import org.gradle.api.file.FileCollection +import org.jetbrains.dokka.gradle.GradleDokkaSourceSetBuilder /** - * A DSL element of [SpinePublishing] extension which allows disabling publishing - * of [protoJar] artifact. - * - * This artifact contains all the `.proto` definitions from `sourceSets.main.proto`. By default, - * it is published. - * - * Take a look on [SpinePublishing.protoJar] for a usage example. + * Returns only Java source roots out of all present in the source set. * - * @see [registerArtifacts] + * It is a helper method for generating documentation by Dokka only for Java code. + * It is helpful when both Java and Kotlin source files are present in a source set. + * Dokka can properly generate documentation for either Kotlin or Java depending on + * the configuration, but not both. */ -class ProtoJar { - - /** - * Set of modules, for which a proto JAR will not be published. - */ - var exclusions: Set = emptySet() +internal fun GradleDokkaSourceSetBuilder.onlyJavaSources(): FileCollection { + return sourceRoots.filter(File::isJavaSourceDirectory) +} - /** - * Disables proto JAR publishing for all published modules. - */ - var disabled = false +private fun File.isJavaSourceDirectory(): Boolean { + return isDirectory && name == "java" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt new file mode 100644 index 00000000..058eb992 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2022, 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 + * + * http://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.internal.gradle.dokka + +import org.gradle.api.tasks.TaskContainer +import org.jetbrains.dokka.gradle.DokkaTask + +/** + * Finds the `dokkaHtml` Gradle task. + */ +fun TaskContainer.dokkaHtmlTask() = this.getByName("dokkaHtml") as DokkaTask diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt index b17bc27c..325d8e99 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/fs/LazyTempPath.kt @@ -42,29 +42,22 @@ import java.nio.file.WatchService * After the first usage, the instances of this type delegate all calls to the internally * created instance of [Path] created with [createTempDirectory]. */ +@Suppress("TooManyFunctions") class LazyTempPath(private val prefix: String) : Path { - private lateinit var tempPath: Path + private val delegate: Path by lazy { createTempDirectory(prefix) } - private val delegate: Path - get() { - if (!::tempPath.isInitialized) { - tempPath = createTempDirectory(prefix) - } - return tempPath - } - - override fun compareTo(other: Path?): Int = delegate.compareTo(other) + override fun compareTo(other: Path): Int = delegate.compareTo(other) override fun iterator(): MutableIterator = delegate.iterator() override fun register( - watcher: WatchService?, - events: Array>?, + watcher: WatchService, + events: Array>, vararg modifiers: WatchEvent.Modifier? ): WatchKey = delegate.register(watcher, events, *modifiers) - override fun register(watcher: WatchService?, vararg events: WatchEvent.Kind<*>?): WatchKey = + override fun register(watcher: WatchService, vararg events: WatchEvent.Kind<*>?): WatchKey = delegate.register(watcher, *events) override fun getFileSystem(): FileSystem = delegate.fileSystem @@ -111,4 +104,6 @@ class LazyTempPath(private val prefix: String) : Path { override fun toRealPath(vararg options: LinkOption?): Path = delegate.toRealPath(*options) override fun toFile(): File = delegate.toFile() + + override fun toString(): String = delegate.toString() } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/git/Branch.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/git/Branch.kt new file mode 100644 index 00000000..63bae4e6 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/git/Branch.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.git + +/** + * Branch names. + */ +object Branch { + + /** + * The default branch. + */ + const val master = "master" + + /** + * The branch used for publishing documentation to GitHub Pages. + */ + const val documentation = "gh-pages" +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/git/Repository.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/git/Repository.kt new file mode 100644 index 00000000..229973d8 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/git/Repository.kt @@ -0,0 +1,164 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.git + +import io.spine.internal.gradle.Cli +import io.spine.internal.gradle.fs.LazyTempPath + +/** + * Interacts with a real Git repository. + * + * Clones the repository with the provided SSH URL in a temporal folder. Provides + * functionality to configure a user, checkout branches, commit changes and push them + * to the remote repository. + * + * It is assumed that before using this class an appropriate SSH key that has + * sufficient rights to perform described above operations was registered + * in `ssh-agent`. + * + * NOTE: This class creates a temporal folder, so it holds resources. For the proper + * release of resources please use the provided functionality inside a `use` block or + * call the `close` method manually. + */ +class Repository private constructor( + + /** + * The GitHub SSH URL to the underlying repository. + */ + private val sshUrl: String, + + /** + * Current user configuration. + * + * This configuration determines what ends up in author and committer fields of a commit. + */ + private var user: UserInfo, + + /** + * Currently checked out branch. + */ + private var currentBranch: String + +) : AutoCloseable { + + /** + * Path to the temporal folder for a clone of the underlying repository. + */ + val location = LazyTempPath("repoTemp") + + /** + * Clones the repository with [the SSH url][sshUrl] into the [temporal folder][location]. + */ + private fun clone() { + repoExecute("git", "clone", sshUrl, ".") + } + + /** + * Executes a command in the [location]. + */ + private fun repoExecute(vararg command: String): String = + Cli(location.toFile()).execute(*command) + + /** + * Checks out the branch by its name. + */ + fun checkout(branch: String) { + repoExecute("git", "checkout", branch) + + currentBranch = branch + } + + /** + * Configures the username and the email of the user. + * + * Overwrites `user.name` and `user.email` settings locally in [location] with + * values from [user]. These settings determine what ends up in author and + * committer fields of a commit. + */ + fun configureUser(user: UserInfo) { + repoExecute("git", "config", "user.name", user.name) + repoExecute("git", "config", "user.email", user.email) + + this.user = user + } + + /** + * Stages all changes and commits with the provided message. + */ + fun commitAllChanges(message: String) { + stageAllChanges() + commit(message) + } + + private fun stageAllChanges() { + repoExecute("git", "add", "--all") + } + + private fun commit(message: String) { + repoExecute( + "git", + "commit", + "--allow-empty", + "--message=${message}" + ) + } + + /** + * Pushes local repository to the remote. + */ + fun push() { + repoExecute("git", "push") + } + + override fun close() { + location.toFile().deleteRecursively() + } + + companion object Factory { + /** + * Clones the repository with the provided SSH URL in a temporal folder. + * Configures the username and the email of the Git user. See [configureUser] + * documentation for more information. Performs checkout of the branch in + * case it was passed. By default, [master][Branch.master] is checked out. + * + * @throws IllegalArgumentException if SSH URL is an empty string. + */ + fun of(sshUrl: String, user: UserInfo, branch: String = Branch.master): Repository { + require(sshUrl.isNotBlank()) { "SSH URL cannot be an empty string." } + + val repo = Repository(sshUrl, user, branch) + repo.clone() + repo.configureUser(user) + + if (branch != Branch.master) { + repo.checkout(branch) + } + + return repo + } + } +} diff --git a/buildSrc/src/main/groovy/license-report-common.gradle b/buildSrc/src/main/kotlin/io/spine/internal/gradle/git/UserInfo.kt similarity index 72% rename from buildSrc/src/main/groovy/license-report-common.gradle rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/git/UserInfo.kt index cae7e361..898eb5b3 100644 --- a/buildSrc/src/main/groovy/license-report-common.gradle +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/git/UserInfo.kt @@ -24,19 +24,19 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +package io.spine.internal.gradle.git + /** - * This script defines the common configuration for license report scripts. + * Contains information about a Git user. + * + * Determines the author and committer fields of a commit. + * + * @constructor throws an [IllegalArgumentException] if the name or the email + * is an empty string. */ - -println("`license-report-common.gradle` script is deprecated. " + - "Please use the `LicenseReporter` utility instead.") - -apply plugin: 'base' - -ext.licenseReportConfig = [ - // The output filename - outputFilename : "license-report.md", - - // The path to a directory, to which a per-project report is generated. - relativePath : "/reports/dependency-license/dependency" -] +data class UserInfo(val name: String, val email: String) { + init { + require(name.isNotBlank()) { "Name cannot be an empty string." } + require(email.isNotBlank()) { "Email cannot be an empty string." } + } +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt index 9ff04268..0f48f009 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/AuthorEmail.kt @@ -45,10 +45,8 @@ class AuthorEmail(val value: String) { */ fun fromVar() : AuthorEmail { val envValue = System.getenv(environmentVariable) - if (envValue.isNullOrEmpty()) { - throw IllegalStateException( - "Unable to obtain an author from `${environmentVariable}`." - ) + check(envValue != null && envValue.isNotBlank()) { + "Unable to obtain an author from `${environmentVariable}`." } return AuthorEmail(envValue) } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt index 90aab832..c9c7e7db 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Branch.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023, TeamDev. All rights reserved. + * Copyright 2022, 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. diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/RepositoryExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/RepositoryExtensions.kt new file mode 100644 index 00000000..4dacb62a --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/RepositoryExtensions.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.github.pages + +import io.spine.internal.gradle.RepoSlug +import io.spine.internal.gradle.git.Branch +import io.spine.internal.gradle.git.Repository +import io.spine.internal.gradle.git.UserInfo + +/** + * Clones the current project repository with the branch dedicated to publishing + * documentation to GitHub Pages checked out. + * + * The repository's GitHub SSH URL is derived from the `REPO_SLUG` environment + * variable. The [branch][Branch.documentation] dedicated to publishing documentation + * is automatically checked out in this repository. Also, the username and the email + * of the git user are automatically configured. The username is set + * to "UpdateGitHubPages Plugin", and the email is derived from + * the `FORMAL_GIT_HUB_PAGES_AUTHOR` environment variable. + * + * @throws org.gradle.api.GradleException if any of the environment variables described above + * is not set. + */ +internal fun Repository.Factory.forPublishingDocumentation(): Repository { + val host = RepoSlug.fromVar().gitHost() + + val username = "UpdateGitHubPages Plugin" + val userEmail = AuthorEmail.fromVar().toString() + val user = UserInfo(username, userEmail) + + val branch = Branch.documentation + + return of(host, user, branch) +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/SshKey.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/SshKey.kt new file mode 100644 index 00000000..7b1746ae --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/SshKey.kt @@ -0,0 +1,104 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.github.pages + +import io.spine.internal.gradle.Cli +import java.io.File +import org.gradle.api.GradleException + +/** + * Registers SSH key for further operations with GitHub Pages. + */ +internal class SshKey(private val rootProjectFolder: File) { + /** + * Creates an SSH key with the credentials and registers it by invoking the + * `register-ssh-key.sh` script. + */ + fun register() { + val gitHubAccessKey = gitHubKey() + val sshConfigFile = sshConfigFile() + sshConfigFile.appendPublisher(gitHubAccessKey) + + execute( + "${rootProjectFolder.absolutePath}/config/scripts/register-ssh-key.sh", + gitHubAccessKey.absolutePath + ) + } + + /** + * Locates `deploy_key_rsa` in the [rootProjectFolder] and returns it as a [File]. + * + * A CI instance comes with an RSA key. However, of course, the default key has + * no privileges in Spine repositories. Thus, we add our own RSA key — + * `deploy_rsa_key`. It must have `write` rights in the associated repository. + * Also, we don't want that key to be used for anything else but GitHub Pages + * publishing. + * + * Thus, we configure the SSH agent to use the `deploy_rsa_key` only for specific + * references, namely in `github.com-publish`. + * + * @throws GradleException if `deploy_key_rsa` is not found. + */ + private fun gitHubKey(): File { + val gitHubAccessKey = File("${rootProjectFolder.absolutePath}/deploy_key_rsa") + + if (!gitHubAccessKey.exists()) { + throw GradleException( + "File $gitHubAccessKey does not exist. It should be encrypted" + + " in the repository and decrypted on CI." + ) + } + return gitHubAccessKey + } + + private fun sshConfigFile(): File { + val sshConfigFile = File("${System.getProperty("user.home")}/.ssh/config") + + if (!sshConfigFile.exists()) { + val parentDir = sshConfigFile.canonicalFile.parentFile + parentDir.mkdirs() + sshConfigFile.createNewFile() + } + + return sshConfigFile + } + + private fun File.appendPublisher(privateKey: File) { + val nl = System.lineSeparator() + this.appendText( + nl + + "Host github.com-publish" + nl + + "User git" + nl + + "IdentityFile ${privateKey.absolutePath}" + nl + ) + } + + /** + * Executes a command in the project [rootProjectFolder]. + */ + private fun execute(vararg command: String): String = Cli(rootProjectFolder).execute(*command) +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/TaskName.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/TaskName.kt index 846a4548..98e47722 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/TaskName.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/TaskName.kt @@ -34,7 +34,14 @@ object TaskName { const val updateGitHubPages = "updateGitHubPages" /** - * The name of the helper task to gather the generated Javadoc before updating GitHub Pages. + * The name of the helper task to gather the generated Javadoc before updating + * GitHub Pages. */ const val copyJavadoc = "copyJavadoc" + + /** + * The name of the helper task to gather Dokka-generated documentation before + * updating GitHub Pages. + */ + const val copyDokka = "copyDokka" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Update.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Update.kt index 023d62b0..f27858fa 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Update.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/Update.kt @@ -26,11 +26,9 @@ package io.spine.internal.gradle.github.pages -import io.spine.internal.gradle.Cli -import io.spine.internal.gradle.RepoSlug +import io.spine.internal.gradle.git.Repository import java.io.File import java.nio.file.Path -import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.ConfigurableFileCollection @@ -42,63 +40,86 @@ import org.gradle.api.logging.Logger */ fun Task.updateGhPages(project: Project) { val plugin = project.plugins.getPlugin(UpdateGitHubPages::class.java) - val op = with(plugin) { - Operation(project, rootFolder, checkoutTempFolder, javadocOutputPath, logger) + + with(plugin) { + SshKey(rootFolder).register() + } + + val repository = Repository.forPublishingDocumentation() + + val updateJavadoc = with(plugin) { + UpdateJavadoc(project, javadocOutputFolder, repository, logger) + } + + val updateDokka = with(plugin) { + UpdateDokka(project, dokkaOutputFolder, repository, logger) + } + + repository.use { + updateJavadoc.run() + updateDokka.run() + repository.push() } - op.run() } -private class Operation( +private abstract class UpdateDocumentation( private val project: Project, - private val rootFolder: File, - checkoutTempFolder: Path, - private val javadocOutputPath: Path, + private val docsSourceFolder: Path, + private val repository: Repository, private val logger: Logger ) { - private val ghRepoFolder: File = File("${checkoutTempFolder}/${Branch.ghPages}") - private val docDirPostfix = "reference/$project.name" - private val mostRecentDocDir = File("$ghRepoFolder/$docDirPostfix") + /** + * The folder under the repository's root(`/`) for storing documentation. + * + * The value should not contain any leading or trailing file separators. + * + * The absolute path to the project's documentation is made by appending its + * name to the end, making `/docsDestinationFolder/project.name`. + */ + protected abstract val docsDestinationFolder: String - fun run() { - SshKey(rootFolder).register() - checkoutDocs() - val generatedDocs = replaceMostRecentDocs() - copyIntoVersionDir(generatedDocs) - addCommitAndPush() - logger.debug("The GitHub Pages contents were successfully updated.") + /** + * The name of the tool used to generate the documentation to update. + * + * This name will appear in logs as part of a message. + */ + protected abstract val toolName: String + + private val mostRecentFolder by lazy { + File("${repository.location}/${docsDestinationFolder}/${project.name}") } - /** Executes a command in the project [rootFolder]. */ - private fun execute(vararg command: String): String = Cli(rootFolder).execute(*command) + private fun logDebug(message: () -> String) { + if (logger.isDebugEnabled) { + logger.debug(message()) + } + } - /** Executes a command in the [ghRepoFolder] */ - private fun pagesExecute(vararg command: String): String = Cli(ghRepoFolder).execute(*command) + fun run() { + val module = project.name + logDebug {"Update of the $toolName documentation for module `$module` started." } + + val documentation = replaceMostRecentDocs() + copyIntoVersionDir(documentation) - private fun checkoutDocs() { - val gitHost = RepoSlug.fromVar().gitHost() + val version = project.version + val updateMessage = + "Update `$toolName` documentation for module `$module` as for version $version" + repository.commitAllChanges(updateMessage) - execute("git", "clone", gitHost, ghRepoFolder.absolutePath) - pagesExecute("git", "checkout", Branch.ghPages) + logDebug { "Update of the `$toolName` documentation for `$module` successfully finished." } } private fun replaceMostRecentDocs(): ConfigurableFileCollection { - logger.debug("Replacing the most recent docs in `$mostRecentDocDir`.") - val generatedDocs = project.files(javadocOutputPath) - copyDocs(generatedDocs, mostRecentDocDir) - return generatedDocs - } + val generatedDocs = project.files(docsSourceFolder) - private fun copyIntoVersionDir(generatedDocs: ConfigurableFileCollection) { - val versionedDocDir = File("$mostRecentDocDir/v/$project.version") - logger.debug("Storing the new version of docs in the directory `$versionedDocDir`.") - copyDocs(generatedDocs, versionedDocDir) - } + logDebug { + "Replacing the most recent `$toolName` documentation in `${mostRecentFolder}`." + } + copyDocs(generatedDocs, mostRecentFolder) - private fun addCommitAndPush() { - pagesExecute("git", "add", docDirPostfix) - configureCommitter() - commitAndPush() + return generatedDocs } private fun copyDocs(source: FileCollection, destination: File) { @@ -109,89 +130,38 @@ private class Operation( } } - /** - * Configures Git to publish the changes under "UpdateGitHubPages Plugin" Git user name - * and email stored in "FORMAL_GIT_HUB_PAGES_AUTHOR" env variable. - */ - private fun configureCommitter() { - pagesExecute("git", "config", "user.name", "\"UpdateGitHubPages Plugin\"") - val authorEmail = AuthorEmail.fromVar().toString() - pagesExecute("git", "config", "user.email", authorEmail) - } - - private fun commitAndPush() { - pagesExecute( - "git", - "commit", - "--allow-empty", - "--message=\"Update Javadoc for module ${project.name}" + - " as for version ${project.version}\"" - ) - pagesExecute("git", "push") - } -} - -/** - * Registers SSH key for further operations with GitHub Pages. - */ -private class SshKey(private val rootFolder: File) { - - /** - * Creates an SSH key with the credentials and registers it - * by invoking the `register-ssh-key.sh` script. - */ - fun register() { - val gitHubAccessKey = gitHubKey() - val sshConfigFile = sshConfigFile() - val nl = System.lineSeparator() - sshConfigFile.appendText( - nl + - "Host github.com-publish" + nl + - "User git" + nl + - "IdentityFile ${gitHubAccessKey.absolutePath}" + nl - ) - - execute( - "${rootFolder.absolutePath}/config/scripts/register-ssh-key.sh", - gitHubAccessKey.absolutePath - ) - } + private fun copyIntoVersionDir(generatedDocs: ConfigurableFileCollection) { + val versionedDocDir = File("$mostRecentFolder/v/${project.version}") - /** - * Locates `deploy_key_rsa` in the [rootFolder] and returns it as a [File]. - * - * If it is not found, a [GradleException] is thrown. - * - *

A CI instance comes with an RSA key. However, of course, the default key has no - * privileges in Spine repositories. Thus, we add our own RSA key — `deploy_rsa_key`. - * It must have `write` rights in the associated repository. - * Also, we don't want that key to be used for anything else but GitHub Pages publishing. - * - * Thus, we configure the SSH agent to use the `deploy_rsa_key` - * only for specific references, namely in `github.com-publish`. - */ - private fun gitHubKey(): File { - val gitHubAccessKey = File("${rootFolder.absolutePath}/deploy_key_rsa") - - if (!gitHubAccessKey.exists()) { - throw GradleException( - "File $gitHubAccessKey does not exist. It should be encrypted" + - " in the repository and decrypted on CI." - ) + logDebug { + "Storing the new version of `$toolName` documentation in `${versionedDocDir}`." } - return gitHubAccessKey + copyDocs(generatedDocs, versionedDocDir) } +} - private fun sshConfigFile(): File { - val sshConfigFile = File("${System.getProperty("user.home")}/.ssh/config") - if (!sshConfigFile.exists()) { - val parentDir = sshConfigFile.canonicalFile.parentFile - parentDir.mkdirs() - sshConfigFile.createNewFile() - } - return sshConfigFile - } +private class UpdateJavadoc( + project: Project, + docsSourceFolder: Path, + repository: Repository, + logger: Logger +) : UpdateDocumentation(project, docsSourceFolder, repository, logger) { + + override val docsDestinationFolder: String + get() = "reference" + override val toolName: String + get() = "Javadoc" +} - /** Executes a command in the project [rootFolder]. */ - private fun execute(vararg command: String): String = Cli(rootFolder).execute(*command) +private class UpdateDokka( + project: Project, + docsSourceFolder: Path, + repository: Repository, + logger: Logger +) : UpdateDocumentation(project, docsSourceFolder, repository, logger) { + + override val docsDestinationFolder: String + get() = "dokka-reference" + override val toolName: String + get() = "Dokka" } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt index 43b5b19d..ba8c2900 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPages.kt @@ -26,7 +26,9 @@ package io.spine.internal.gradle.github.pages +import dokkaHtmlTask import io.spine.internal.gradle.fs.LazyTempPath +import io.spine.internal.gradle.github.pages.TaskName.copyDokka import io.spine.internal.gradle.github.pages.TaskName.copyJavadoc import io.spine.internal.gradle.github.pages.TaskName.updateGitHubPages import io.spine.internal.gradle.isSnapshot @@ -41,21 +43,24 @@ import org.gradle.api.tasks.TaskContainer import org.gradle.api.tasks.TaskProvider /** - * Registers the `updateGitHubPages` task which performs the update of the GitHub Pages - * with the Javadoc generated for a particular Gradle project. The generated documentation - * is appended to the `spine.io` site via GitHub pages by pushing commits to the `gh-pages` branch. + * Registers the `updateGitHubPages` task which performs the update of the GitHub + * Pages with the documentation generated by Javadoc and Dokka for a particular + * Gradle project. The generated documentation is appended to the `spine.io` site + * via GitHub pages by pushing commits to the `gh-pages` branch. * - * Please note that the update is only performed for the projects which are NOT snapshots. + * Please note that the update is only performed for the projects which are + * NOT snapshots. * - * Users may supply [allowInternalJavadoc][UpdateGitHubPagesExtension.allowInternalJavadoc] option, - * which if `true`, includes the documentation for types marked `@Internal`. - * By default, this option is `false`. + * Users may supply [allowInternalJavadoc][UpdateGitHubPagesExtension.allowInternalJavadoc] + * to configure documentation generated by Javadoc. The documentation for the code + * marked `@Internal` is included when the option is set to `true`. By default, this + * option is `false`. * * Usage: * ``` * updateGitHubPages { * - * // Include `@Internal`-annotated types. + * // Include `@Internal`-annotated code. * allowInternalJavadoc.set(true) * * // Propagate the full path to the local folder of the repository root. @@ -63,25 +68,26 @@ import org.gradle.api.tasks.TaskProvider * } * ``` * - * In order to work, the script needs a `deploy_key_rsa` private RSA key file in the repository - * root. It is recommended to decrypt it in the repository and then decrypt it on CI upon - * publication. Also, the script uses the `FORMAL_GIT_HUB_PAGES_AUTHOR` environment variable to - * set the author email for the commits. The `gh-pages` branch itself should exist before the plugin - * is run. + * In order to work, the script needs a `deploy_key_rsa` private RSA key file in the + * repository root. It is recommended to encrypt it in the repository and then decrypt + * it on CI upon publication. Also, the script uses the `FORMAL_GIT_HUB_PAGES_AUTHOR` + * environment variable to set the author email for the commits. The `gh-pages` + * branch itself should exist before the plugin is run. * * NOTE: when changing the value of "FORMAL_GIT_HUB_PAGES_AUTHOR", one also must change - * the SSH private (encrypted `deploy_key_rsa`) and the public ("GitHub Pages publisher (Travis CI)" - * on GitHub) keys. + * the SSH private (encrypted `deploy_key_rsa`) and the public + * ("GitHub Pages publisher" on GitHub) keys. * - * Another requirement is an environment variable `REPO_SLUG`, which is set by the CI environment, - * such as `Publish` GitHub Actions workflow. It points to the repository for which the update - * is executed. E.g.: + * Another requirement is an environment variable `REPO_SLUG`, which is set by the CI + * environment, such as `Publish` GitHub Actions workflow. It points to the repository + * for which the update is executed. E.g.: * * ``` * REPO_SLUG: SpineEventEngine/base * ``` * - * @see UpdateGitHubPagesExtension for the extension which is used to configure this plugin + * @see UpdateGitHubPagesExtension for the extension which is used to configure + * this plugin */ class UpdateGitHubPages : Plugin { @@ -98,24 +104,25 @@ class UpdateGitHubPages : Plugin { private lateinit var includedInputs: Set /** - * Path to the temp folder used to gather the Javadoc output - * before submitting it to the GitHub Pages update. + * Path to the temp folder used to gather the Javadoc output before submitting it + * to the GitHub Pages update. */ - internal val javadocOutputPath = LazyTempPath("javadoc") + internal val javadocOutputFolder = LazyTempPath("javadoc") /** - * Path to the temp folder used checkout the original GitHub Pages branch. + * Path to the temp folder used to gather the documentation generated by Dokka + * before submitting it to the GitHub Pages update. */ - internal val checkoutTempFolder = LazyTempPath("repoTemp") + internal val dokkaOutputFolder = LazyTempPath("dokka") /** * Applies the plugin to the specified [project]. * * If the project version says it is a snapshot, the plugin registers a no-op task. * - * Even in such a case, the extension object is still created in the given project, to allow - * customization of the parameters in its build script, for later usage when the project - * version changes to non-snapshot. + * Even in such a case, the extension object is still created in the given project + * to allow customization of the parameters in its build script for later usage + * when the project version changes to non-snapshot. */ override fun apply(project: Project) { val extension = UpdateGitHubPagesExtension.createIn(project) @@ -129,32 +136,53 @@ class UpdateGitHubPages : Plugin { } } + /** + * Registers `updateGitHubPages` task which performs no actual update, but prints + * the message telling the update is skipped, since the project is in + * its `SNAPSHOT` version. + */ + private fun Project.registerNoOpTask() { + tasks.register(updateGitHubPages) { + doLast { + val project = this@registerNoOpTask + println( + "GitHub Pages update will be skipped since this project is a snapshot: " + + "`${project.name}-${project.version}`." + ) + } + } + } + private fun Project.registerTasks(extension: UpdateGitHubPagesExtension) { val allowInternalJavadoc = extension.allowInternalJavadoc() rootFolder = extension.rootFolder() includedInputs = extension.includedInputs() + if (!allowInternalJavadoc) { val doclet = ExcludeInternalDoclet(extension.excludeInternalDocletVersion) doclet.registerTaskIn(this) } + tasks.registerCopyJavadoc(allowInternalJavadoc) + tasks.registerCopyDokka() + val updatePagesTask = tasks.registerUpdateTask() updatePagesTask.configure { dependsOn(copyJavadoc) + dependsOn(copyDokka) } } private fun TaskContainer.registerCopyJavadoc(allowInternalJavadoc: Boolean) { - val inputs = composeInputs(allowInternalJavadoc) + val inputs = composeJavadocInputs(allowInternalJavadoc) + register(copyJavadoc, Copy::class.java) { - doLast { - from(*inputs.toTypedArray()) - into(javadocOutputPath) - } + inputs.forEach { from(it) } + into(javadocOutputFolder) } } - private fun TaskContainer.composeInputs(allowInternalJavadoc: Boolean): MutableList { + private fun TaskContainer.composeJavadocInputs(allowInternalJavadoc: Boolean): List { val inputs = mutableListOf() if (allowInternalJavadoc) { inputs.add(javadocTask()) @@ -165,6 +193,26 @@ class UpdateGitHubPages : Plugin { return inputs } + private fun TaskContainer.registerCopyDokka() { + val inputs = composeDokkaInputs() + + register(copyDokka, Copy::class.java) { + inputs.forEach { from(it) } + into(dokkaOutputFolder) + } + } + + private fun TaskContainer.composeDokkaInputs(): List { + val inputs = mutableListOf() + + dokkaHtmlTask()?.let { + inputs.add(it) + } + inputs.addAll(includedInputs) + + return inputs + } + private fun TaskContainer.registerUpdateTask(): TaskProvider { return register(updateGitHubPages) { doLast { @@ -178,25 +226,9 @@ class UpdateGitHubPages : Plugin { } private fun cleanup() { - val folders = listOf(checkoutTempFolder, javadocOutputPath) + val folders = listOf(dokkaOutputFolder, javadocOutputFolder) folders.forEach { it.toFile().deleteRecursively() } } } - -/** - * Registers `updateGitHubPages` task which performs no actual update, but prints the message - * telling the update is skipped, since the project is in its `SNAPSHOT` version. - */ -private fun Project.registerNoOpTask() { - tasks.register(updateGitHubPages) { - doLast { - val project = this@registerNoOpTask - println( - "GitHub Pages update will be skipped since this project is a snapshot: " + - "`${project.name}-${project.version}`." - ) - } - } -} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPagesExtension.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPagesExtension.kt index f2f3ab89..d523d5e9 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPagesExtension.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/github/pages/UpdateGitHubPagesExtension.kt @@ -54,7 +54,8 @@ class UpdateGitHubPagesExtension private constructor( /** - * Tells whether the types marked `@Internal` should be included into the doc generation. + * Tells whether the types marked `@Internal` should be included into + * the doc generation. */ val allowInternalJavadoc: Property, @@ -64,10 +65,11 @@ private constructor( var rootFolder: Property, /** - * The external inputs, which output should be included - * into the GitHub Pages update. + * The external inputs, which output should be included into + * the GitHub Pages update. * - * The values are interpreted according to [org.gradle.api.tasks.Copy.from] specification. + * The values are interpreted according to + * [org.gradle.api.tasks.Copy.from] specification. * * This property is optional. */ @@ -80,8 +82,8 @@ private constructor( * used when updating documentation at GitHub Pages. * * This value is used when adding dependency on the doclet when the plugin tasks - * are registered. Since the doclet dependency is required, its value passed as a parameter for - * the extension, rather than a property. + * are registered. Since the doclet dependency is required, its value passed as + * a parameter for the extension, rather than a property. */ internal lateinit var excludeInternalDocletVersion: String @@ -104,23 +106,24 @@ private constructor( } /** - * Returns `true` if the `@Internal`-annotated types should be included into the generated - * documentation, `false` otherwise. + * Returns `true` if the `@Internal`-annotated code should be included into the + * generated documentation, `false` otherwise. */ fun allowInternalJavadoc(): Boolean { return allowInternalJavadoc.get() } /** - * Returns the local root folder of the repository, to which the handled Gradle Project belongs. + * Returns the local root folder of the repository, to which the handled Gradle + * Project belongs. */ fun rootFolder(): File { return rootFolder.get() } /** - * Returns the external inputs, which results should be included - * into the GitHub Pages update. + * Returns the external inputs, which results should be included into the + * GitHub Pages update. */ fun includedInputs(): Set { return includeInputs.get() diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt index 3b8b1c4c..1489c089 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javac/ErrorProne.kt @@ -82,6 +82,7 @@ private object ErrorProneConfig { "-Xep:CheckReturnValue:OFF", "-Xep:FloggerSplitLogStatement:OFF", + "-Xep:FloggerLogString:OFF" ) } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt index 27ee98c5..4d5702bf 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/ExcludeInternalDoclet.kt @@ -26,6 +26,7 @@ package io.spine.internal.gradle.javadoc +import io.spine.internal.dependency.Spine import io.spine.internal.gradle.javadoc.ExcludeInternalDoclet.Companion.taskName import io.spine.internal.gradle.sourceSets import org.gradle.api.Project @@ -36,9 +37,13 @@ import org.gradle.external.javadoc.StandardJavadocDocletOptions /** * The doclet which removes Javadoc for `@Internal` things in the Java code. */ -class ExcludeInternalDoclet(val version: String) { +@Suppress("ConstPropertyName") +class ExcludeInternalDoclet( + @Deprecated("`Spine.ArtifactVersion.javadocTools` is used instead.") + val version: String = Spine.ArtifactVersion.javadocTools +) { - private val dependency = "io.spine.tools:spine-javadoc-filter:${version}" + private val dependency = Spine.javadocFilter companion object { diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt index da94b0ad..debd78d3 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javadoc/JavadocConfig.kt @@ -43,9 +43,9 @@ object JavadocConfig { /** * Link to the documentation for Java 11 Standard Library API. * - * OpenJDK SE 11 is used for the reference. + * Oracle JDK SE 11 is used for the reference. */ - private const val standardLibraryAPI = "https://cr.openjdk.java.net/~iris/se/11/latestSpec/api/" + private const val standardLibraryAPI = "https://docs.oracle.com/en/java/javase/11/docs/api/" @Suppress("MemberVisibilityCanBePrivate") // opened to be visible from docs. val tags = listOf( diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt index 8256923f..5e51155a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Idea.kt @@ -49,7 +49,7 @@ fun JsPlugins.idea() { module { sourceDirs.add(srcDir) - testSourceDirs.add(testSrcDir) + testSources.from(testSrcDir) excludeDirs.addAll( listOf( diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Protobuf.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Protobuf.kt index 8ba85e8e..c50ddd9e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Protobuf.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/plugin/Protobuf.kt @@ -26,11 +26,8 @@ package io.spine.internal.gradle.javascript.plugin -import com.google.protobuf.gradle.builtins -import com.google.protobuf.gradle.generateProtoTasks +import com.google.protobuf.gradle.ProtobufExtension import com.google.protobuf.gradle.id -import com.google.protobuf.gradle.protobuf -import com.google.protobuf.gradle.protoc import com.google.protobuf.gradle.remove import io.spine.internal.dependency.Protobuf @@ -50,7 +47,8 @@ fun JsPlugins.protobuf() { apply(Protobuf.GradlePlugin.id) } - project.protobuf { + val protobufExt = project.extensions.getByType(ProtobufExtension::class.java) + protobufExt.apply { generatedFilesBaseDir = projectDir.path diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/IntegrationTest.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/IntegrationTest.kt index dd218013..cf94995d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/IntegrationTest.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/IntegrationTest.kt @@ -26,10 +26,10 @@ package io.spine.internal.gradle.javascript.task +import io.spine.internal.gradle.TaskName import io.spine.internal.gradle.base.build import io.spine.internal.gradle.named import io.spine.internal.gradle.register -import io.spine.internal.gradle.TaskName import org.gradle.api.Task import org.gradle.api.tasks.TaskContainer import org.gradle.api.tasks.TaskProvider @@ -74,6 +74,7 @@ val TaskContainer.integrationTest: TaskProvider * } * ``` */ +@Suppress("unused") fun JsTasks.integrationTest() { linkSpineWebModule() diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/LicenseReport.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/LicenseReport.kt index 8f8f6ff2..2a868d4a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/LicenseReport.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/LicenseReport.kt @@ -54,6 +54,7 @@ import org.gradle.api.tasks.TaskProvider * } * ``` */ +@Suppress("unused") fun JsTasks.licenseReport() { npmLicenseReport().also { generateLicenseReport.configure { diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt index f758fc7f..99da3f1d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/javascript/task/Webpack.kt @@ -26,9 +26,9 @@ package io.spine.internal.gradle.javascript.task +import io.spine.internal.gradle.TaskName import io.spine.internal.gradle.named import io.spine.internal.gradle.register -import io.spine.internal.gradle.TaskName import org.gradle.api.tasks.Copy import org.gradle.api.tasks.TaskContainer import org.gradle.api.tasks.TaskProvider @@ -63,6 +63,7 @@ import org.gradle.api.tasks.TaskProvider * } * ``` */ +@Suppress("unused") fun JsTasks.webpack() { assembleJs.configure { @@ -92,6 +93,7 @@ private val copyBundledJsName = TaskName.of("copyBundledJs", Copy::class) * * The task copies bundled JavaScript sources to the publication directory. */ +@Suppress("unused") val TaskContainer.copyBundledJs: TaskProvider get() = named(copyBundledJsName) diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt index de16a145..b2964cee 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt @@ -27,7 +27,6 @@ package io.spine.internal.gradle.kotlin import org.gradle.jvm.toolchain.JavaLanguageVersion -import org.gradle.jvm.toolchain.JavaToolchainSpec import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -37,7 +36,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile */ fun KotlinJvmProjectExtension.applyJvmToolchain(version: Int) { jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(version)) + languageVersion.set(JavaLanguageVersion.of(version)) } } @@ -52,13 +51,19 @@ fun KotlinJvmProjectExtension.applyJvmToolchain(version: String) = /** * Opts-in to experimental features that we use in our codebase. */ +@Suppress("unused") fun KotlinCompile.setFreeCompilerArgs() { kotlinOptions { freeCompilerArgs = listOf( "-Xskip-prerelease-check", "-Xjvm-default=all", - "-Xopt-in=kotlin.contracts.ExperimentalContracts", - "-Xopt-in=kotlin.ExperimentalStdlibApi" + "-Xinline-classes", + "-opt-in=" + + "kotlin.contracts.ExperimentalContracts," + + "kotlin.io.path.ExperimentalPathApi," + + "kotlin.ExperimentalUnsignedTypes," + + "kotlin.ExperimentalStdlibApi," + + "kotlin.experimental.ExperimentalTypeInference", ) } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/protobuf/ProtoTaskExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/protobuf/ProtoTaskExtensions.kt new file mode 100644 index 00000000..a3bc6dc5 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/protobuf/ProtoTaskExtensions.kt @@ -0,0 +1,295 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.protobuf + +import com.google.protobuf.gradle.GenerateProtoTask +import io.spine.internal.gradle.sourceSets +import java.io.File +import org.gradle.api.Project +import org.gradle.api.file.SourceDirectorySet +import org.gradle.api.tasks.SourceSet +import org.gradle.configurationcache.extensions.capitalized +import org.gradle.kotlin.dsl.get +import org.gradle.plugins.ide.idea.GenerateIdeaModule +import org.gradle.plugins.ide.idea.model.IdeaModel +import org.gradle.plugins.ide.idea.model.IdeaModule +import org.jetbrains.kotlin.gradle.dsl.KotlinCompile + +/** + * Obtains the name of the `generated` directory under the project root directory. + */ +private val Project.generatedDir: String + get() = "${projectDir}/generated" + +/** + * Obtains the `generated` directory for the source set of the task. + * + * If [language] is specified returns the subdirectory for this language. + */ +private fun GenerateProtoTask.generatedDir(language: String = ""): File { + val path = "${project.generatedDir}/${sourceSet.name}/$language" + return File(path) +} + +/** + * Configures protobuf code generation task for the code which cannot use Spine Model Compiler + * (e.g. the `base` project). + * + * The task configuration consists of the following steps: + * + * 1. Adding `"kotlin"` to the list of involved `protoc` builtins. + * + * 2. Generation of descriptor set file is turned on for each source set. + * These files are placed under the `build/descriptors` directory. + * + * 3. Removing source code generated for `com.google` package for both Java and Kotlin. + * This is done at the final steps of the code generation. + * + * 4. Making `processResource` tasks depend on corresponding `generateProto` tasks. + * If the source set of the configured task isn't `main`, appropriate infix for + * the task names is used. + * + * The usage of this extension in a module build file would be: + * ``` + * protobuf { + * generateProtoTasks { + * for (task in all()) { + * task.setup() + * } + * } + * } + * ``` + * Using the same code under `subprojects` in a root build file does not seem to work because + * test descriptor set files are not copied to resources. Performing this configuration from + * a module build script solves the issue. + * + * IMPORTANT: In addition to calling `setup`, a submodule must contain a descriptor set reference + * file (`desc.ref`) files placed under `resources`. The descriptor reference file must contain + * a reference to the descriptor set file generated by the corresponding `GenerateProtoTask`. + * + * For example, for the `test` source set, the reference would be `known_types_test.desc`, and + * for the `main` source set, the reference would be `known_types_main.desc`. + * + * See `io.spine.code.proto.DescriptorReference` and `io.spine.code.proto.FileDescriptors` classes + * under the `base` project for more details. + */ +@Suppress("unused") +fun GenerateProtoTask.setup() { + builtins.maybeCreate("kotlin") + setupDescriptorSetFileCreation() + doLast { + copyGeneratedFiles() + } + excludeProtocOutput() + setupKotlinCompile() + dependOnProcessResourcesTask() + configureIdeaDirs() +} + +/** + * Tell `protoc` to generate descriptor set files under the project build dir. + */ +private fun GenerateProtoTask.setupDescriptorSetFileCreation() { + // Tell `protoc` generate descriptor set file. + val ssn = sourceSet.name + generateDescriptorSet = true + val descriptorsDir = "${project.buildDir}/descriptors/${ssn}" + with(descriptorSetOptions) { + path = "$descriptorsDir/known_types_${ssn}.desc" + includeImports = true + includeSourceInfo = true + } + // Make the descriptor set file included into the resources. + project.sourceSets.named(ssn) { + resources.srcDirs(descriptorsDir) + } +} + +/** + * Copies files from the [outputBaseDir][GenerateProtoTask.outputBaseDir] into + * a subdirectory of [generatedDir][Project.generatedDir] for + * the current [sourceSet][GenerateProtoTask.sourceSet]. + * + * Also removes sources belonging to the `com.google` package in the target directory. + */ +private fun GenerateProtoTask.copyGeneratedFiles() { + project.copy { + from(outputBaseDir) + into(generatedDir()) + } + deleteComGoogle("java") + deleteComGoogle("kotlin") +} + +/** + * Remove the code generated for Google Protobuf library types. + * + * Java code for the `com.google` package was generated because we wanted + * to have descriptors for all the types, including those from Google Protobuf library. + * We want all the descriptors so that they are included into the resources used by + * the `io.spine.type.KnownTypes` class. + * + * Now, as we have the descriptors _and_ excessive Java or Kotlin code, we delete it to avoid + * classes that duplicate those coming from Protobuf library JARs. + */ +private fun GenerateProtoTask.deleteComGoogle(language: String) { + val comDirectory = generatedDir(language).resolve("com") + val googlePackage = comDirectory.resolve("google") + + project.delete(googlePackage) + + // If the `com` directory becomes empty, delete it too. + if (comDirectory.exists() && comDirectory.isDirectory && comDirectory.list()!!.isEmpty()) { + project.delete(comDirectory) + } +} + +/** + * Exclude [GenerateProtoTask.outputBaseDir] from Java source set directories to avoid + * duplicated source code files. + */ +private fun GenerateProtoTask.excludeProtocOutput() { + val protocOutputDir = File(outputBaseDir).parentFile + val java: SourceDirectorySet = sourceSet.java + + // Filter out directories belonging to `build/generated/source/proto`. + val newSourceDirectories = java.sourceDirectories + .filter { !it.residesIn(protocOutputDir) } + .toSet() + java.setSrcDirs(listOf()) + java.srcDirs(newSourceDirectories) + + // Add copied files to the Java source set. + java.srcDir(generatedDir("java")) + java.srcDir(generatedDir("kotlin")) +} + +/** + * Make sure Kotlin compilation explicitly depends on this `GenerateProtoTask` to avoid racing. + */ +private fun GenerateProtoTask.setupKotlinCompile() { + val kotlinCompile = project.kotlinCompileFor(sourceSet) + kotlinCompile?.dependsOn(this) +} + +/** + * Make the tasks `processResources` depend on `generateProto` tasks explicitly so that: + * 1) Descriptor set files get into resources, avoiding the racing conditions + * during the build. + * + * 2) We don't have the warning "Execution optimizations have been disabled..." issued + * by Gradle during the build because Protobuf Gradle Plugin does not set + * dependencies between `generateProto` and `processResources` tasks. + */ +private fun GenerateProtoTask.dependOnProcessResourcesTask() { + val processResources = processResourceTaskName(sourceSet.name) + project.tasks[processResources].dependsOn(this) +} + +/** + * Obtains the name of the `processResource` task for the given source set name. + */ +private fun processResourceTaskName(sourceSetName: String): String { + val infix = if (sourceSetName == "main") "" else sourceSetName.capitalized() + return "process${infix}Resources" +} + +/** + * Attempts to obtain the Kotlin compilation Gradle task for the given source set. + * + * Typically, the task is named by a pattern: `compileKotlin`, or just + * `compileKotlin` if the source set name is `"main"`. If the task does not fit this described + * pattern, this method will not find it. + */ +private fun Project.kotlinCompileFor(sourceSet: SourceSet): KotlinCompile<*>? { + val taskName = sourceSet.getCompileTaskName("Kotlin") + return tasks.findByName(taskName) as KotlinCompile<*>? +} + +private fun File.residesIn(directory: File): Boolean = + canonicalFile.startsWith(directory.absolutePath) + +private fun GenerateProtoTask.configureIdeaDirs() = project.plugins.withId("idea") { + val module = project.extensions.findByType(IdeaModel::class.java)!!.module + + // Make IDEA forget about sources under `outputBaseDir`. + val protocOutputDir = File(outputBaseDir).parentFile + module.generatedSourceDirs.removeIf { dir -> + dir.residesIn(protocOutputDir) + } + + module.sourceDirs.removeIf { dir -> + dir.residesIn(protocOutputDir) + } + + val javaDir = generatedDir("java") + val kotlinDir = generatedDir("kotlin") + + // As advised by `Utils.groovy` from Protobuf Gradle plugin: + // This is required because the IntelliJ IDEA plugin does not allow adding source directories + // that do not exist. The IntelliJ IDEA config files should be valid from the start even if + // a user runs './gradlew idea' before running './gradlew generateProto'. + project.tasks.withType(GenerateIdeaModule::class.java).forEach { + it.doFirst { + javaDir.mkdirs() + kotlinDir.mkdirs() + } + } + + if (isTest) { + module.testSources.run { + from(javaDir) + from(kotlinDir) + } + } else { + module.sourceDirs.run { + add(javaDir) + add(kotlinDir) + } + } + + module.generatedSourceDirs.run { + add(javaDir) + add(kotlinDir) + } +} + +/** + * Prints diagnostic output of `sourceDirs` and `generatedSourceDirs` of an [IdeaModule]. + * + * The warning `"unused"` is suppressed because this function is not used in + * the production mode. + */ +@Suppress("unused") +private fun IdeaModule.printSourceDirectories() { + println("**** [IDEA] Source directories:") + sourceDirs.forEach { println(it) } + println() + println("**** [IDEA] Generated source directories:") + generatedSourceDirs.forEach { println(it) } + println() +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt deleted file mode 100644 index 947b769e..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Artifacts.kt +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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.internal.gradle.publish - -import io.spine.internal.gradle.sourceSets -import org.gradle.api.Project -import org.gradle.api.file.FileTreeElement -import org.gradle.api.tasks.TaskContainer -import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.bundling.Jar -import org.gradle.kotlin.dsl.get -import org.gradle.kotlin.dsl.named -import org.gradle.kotlin.dsl.register -import org.gradle.kotlin.dsl.withType - -/** - * Excludes Google `.proto` sources from all artifacts. - * - * Goes through all registered `Jar` tasks and filters out Google's files. - */ -@Suppress("unused") -fun TaskContainer.excludeGoogleProtoFromArtifacts() { - withType().configureEach { - exclude { it.isGoogleProtoSource() } - } -} - -/** - * Checks if the given file belongs to the Google `.proto` sources. - */ -private fun FileTreeElement.isGoogleProtoSource(): Boolean { - val pathSegments = relativePath.segments - return pathSegments.isNotEmpty() && pathSegments[0].equals("google") -} - -/** - * Locates or creates `sourcesJar` task in this [Project]. - * - * The output of this task is a `jar` archive. The archive contains sources from `main` source set. - * The task makes sure that sources from the directories below will be included into - * a resulted archive: - * - * - Kotlin - * - Java - * - Proto - * - * Java and Kotlin sources are default to `main` source set since it is created by `java` plugin. - * For Proto sources to be included – [special treatment][protoSources] is needed. - */ -internal fun Project.sourcesJar() = tasks.getOrCreate("sourcesJar") { - archiveClassifier.set("sources") - from(sourceSets["main"].allSource) // Puts Java and Kotlin sources. - from(protoSources()) // Puts Proto sources. -} - -/** - * Locates or creates `protoJar` task in this [Project]. - * - * The output of this task is a `jar` archive. The archive contains only - * [Proto sources][protoSources] from `main` source set. - */ -internal fun Project.protoJar() = tasks.getOrCreate("protoJar") { - archiveClassifier.set("proto") - from(protoSources()) -} - -/** - * Locates or creates `testJar` task in this [Project]. - * - * The output of this task is a `jar` archive. The archive contains compilation output - * of `test` source set. - */ -internal fun Project.testJar() = tasks.getOrCreate("testJar") { - archiveClassifier.set("test") - from(sourceSets["test"].output) -} - -/** - * Locates or creates `javadocJar` task in this [Project]. - * - * The output of this task is a `jar` archive. The archive contains Javadoc, - * generated upon Java sources from `main` source set. If javadoc for Kotlin is also needed, - * apply Dokka plugin. It tunes `javadoc` task to generate docs upon Kotlin sources as well. - */ -internal fun Project.javadocJar() = tasks.getOrCreate("javadocJar") { - archiveClassifier.set("javadoc") - from(files("$buildDir/docs/javadoc")) - dependsOn("javadoc") -} - -private fun TaskContainer.getOrCreate(name: String, init: Jar.() -> Unit): TaskProvider = - if (names.contains(name)) { - named(name) - } else { - register(name) { - init() - } - } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt index 8a4db8b5..a81cbdcd 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/CheckVersionIncrement.kt @@ -56,7 +56,7 @@ open class CheckVersionIncrement : DefaultTask() { val version: String = project.version as String @TaskAction - private fun fetchAndCheck() { + fun fetchAndCheck() { val artifact = "${project.artifactPath()}/${MavenMetadata.FILE_NAME}" checkInRepo(repository.snapshots, artifact) @@ -119,7 +119,7 @@ private data class MavenMetadata(var versioning: Versioning = Versioning()) { return try { val metadata = mapper.readValue(url, MavenMetadata::class.java) metadata - } catch (e: FileNotFoundException) { + } catch (ignored: FileNotFoundException) { null } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt index 7ede810e..fef06821 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt @@ -28,6 +28,7 @@ package io.spine.internal.gradle.publish import io.spine.internal.gradle.Credentials import io.spine.internal.gradle.Repository +import net.lingala.zip4j.ZipFile import org.gradle.api.Project /** @@ -73,22 +74,31 @@ private fun Project.credentialsWithToken(githubActor: String) = Credentials( private fun Project.readGitHubToken(): String { val githubToken: String? = System.getenv("GITHUB_TOKEN") return if (githubToken.isNullOrEmpty()) { - // Use the personal access token for the `developers@spine.io` account. - // Only has the permission to read public GitHub packages. - val targetDir = "${buildDir}/token" - file(targetDir).mkdirs() - val fileToUnzip = "${rootDir}/buildSrc/aus.weis" - - logger.info("GitHub Packages: reading token " + - "by unzipping `$fileToUnzip` into `$targetDir`.") - exec { - // Unzip with password "123", allow overriding, quietly, - // into the target dir, the given archive. - commandLine("unzip", "-P", "123", "-oq", "-d", targetDir, fileToUnzip) - } - val file = file("$targetDir/token.txt") - file.readText() + readTokenFromArchive() } else { githubToken } } + +/** + * Read the personal access token for the `developers@spine.io` account which + * has only the permission to read public GitHub packages. + * + * The token is extracted from the archive called `aus.weis` stored under `buildSrc`. + * The archive has such an unusual name to avoid scanning for tokens placed in repositories + * which is performed by GitHub. Since we do not violate any security, it is OK to + * use such a workaround. + */ +private fun Project.readTokenFromArchive(): String { + val targetDir = "${buildDir}/token" + file(targetDir).mkdirs() + val fileToUnzip = "${rootDir}/buildSrc/aus.weis" + + logger.info( + "GitHub Packages: reading token by unzipping `$fileToUnzip` into `$targetDir`." + ) + ZipFile(fileToUnzip, "123".toCharArray()).extractAll(targetDir) + val file = file("$targetDir/token.txt") + val result = file.readText() + return result +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt index 807b2319..b97a5ee5 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt @@ -73,20 +73,36 @@ class IncrementGuard : Plugin { * to a feature branch. * * Returns `false` if the associated reference is not a branch (e.g. a tag) or if it has - * the name which ends with `master`. So, on branches such as `master` and `2.x-jdk8-master` - * this method would return `false`. + * the name which ends with `master` or `main`. + * + * For example, on the following branches the method would return `false`: + * + * 1. `master`. + * 2. `main`. + * 3. `2.x-jdk8-master`. + * 4. `2.x-jdk8-main`. * * @see * List of default environment variables provided for GitHub Actions builds */ private fun shouldCheckVersion(): Boolean { - val eventName = System.getenv("GITHUB_EVENT_NAME") - if ("push" != eventName) { + val event = System.getenv("GITHUB_EVENT_NAME") + val reference = System.getenv("GITHUB_REF") + if (event != "push" || reference == null) { return false } - val reference = System.getenv("GITHUB_REF") ?: return false - val matches = Regex("refs/heads/(.+)").matchEntire(reference) ?: return false - val branch = matches.groupValues[1] - return !branch.endsWith("master") + val branch = branchName(reference) + return when { + branch == null -> false + branch.endsWith("master") -> false + branch.endsWith("main") -> false + else -> true + } + } + + private fun branchName(gitHubRef: String): String? { + val matches = Regex("refs/heads/(.+)").matchEntire(gitHubRef) + val branch = matches?.let { it.groupValues[1] } + return branch } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/JarDsl.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/JarDsl.kt new file mode 100644 index 00000000..2bc28703 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/JarDsl.kt @@ -0,0 +1,167 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.publish + +/** + * A DSL element of [SpinePublishing] extension which configures publishing of + * [dokkaKotlinJar] artifact. + * + * This artifact contains Dokka-generated documentation. By default, it is not published. + * + * Take a look at the [SpinePublishing.dokkaJar] for a usage example. + * + * @see [artifacts] + */ +class DokkaJar { + /** + * Enables publishing `JAR`s with Dokka-generated documentation for all published modules. + */ + @Suppress("unused") + @Deprecated("Please use `kotlin` and `java` flags instead.") + var enabled = false + + /** + * Controls whether [dokkaKotlinJar] artifact should be published. + * The default value is `true`. + */ + var kotlin = true + + /** + * Controls whether [dokkaJavaJar] artifact should be published. + * The default value is `false`. + */ + var java = false +} + +/** + * A DSL element of [SpinePublishing] extension which allows enabling publishing + * of [testJar] artifact. + * + * This artifact contains compilation output of `test` source set. By default, it is not published. + * + * Take a look on [SpinePublishing.testJar] for a usage example. + + * @see [artifacts] + */ +class TestJar { + + /** + * Set of modules, for which a test JAR will be published. + */ + var inclusions: Set = emptySet() + + /** + * Enables test JAR publishing for all published modules. + */ + var enabled = false +} + +/** + * A DSL element of [SpinePublishing] extension which allows disabling publishing + * of [protoJar] artifact. + * + * This artifact contains all the `.proto` definitions from `sourceSets.main.proto`. By default, + * it is published. + * + * Take a look on [SpinePublishing.protoJar] for a usage example. + * + * @see [artifacts] + */ +class ProtoJar { + + /** + * Set of modules, for which a proto JAR will not be published. + */ + var exclusions: Set = emptySet() + + /** + * Disables proto JAR publishing for all published modules. + */ + var disabled = false +} + +/** + * Flags for turning optional JAR artifacts in a project. + */ +internal data class JarFlags( + + /** + * Tells whether [sourcesJar] artifact should be published. + * + * Default value is `true`. + */ + val sourcesJar: Boolean = true, + + /** + * Tells whether [javadocJar] artifact should be published. + * + * Default value is `true`. + */ + val javadocJar: Boolean = true, + + /** + * Tells whether [protoJar] artifact should be published. + */ + val publishProtoJar: Boolean, + + /** + * Tells whether [testJar] artifact should be published. + */ + val publishTestJar: Boolean, + + /** + * Tells whether [dokkaKotlinJar] artifact should be published. + */ + val publishDokkaKotlinJar: Boolean, + + /** + * Tells whether [dokkaJavaJar] artifact should be published. + */ + val publishDokkaJavaJar: Boolean +) { + internal companion object { + /** + * Creates an instance of [JarFlags] for the project with the given name, + * taking the setup parameters from JAR DSL elements. + */ + fun create( + projectName: String, + protoJar: ProtoJar, + testJar: TestJar, + dokkaJar: DokkaJar + ): JarFlags { + val addProtoJar = (protoJar.exclusions.contains(projectName) || protoJar.disabled).not() + val addTestJar = testJar.inclusions.contains(projectName) || testJar.enabled + return JarFlags( + sourcesJar = true, + javadocJar = true, + addProtoJar, addTestJar, + dokkaJar.kotlin, dokkaJar.java + ) + } + } +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt deleted file mode 100644 index a8b8fde1..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/MavenJavaPublication.kt +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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.internal.gradle.publish - -import io.spine.internal.gradle.Repository -import io.spine.internal.gradle.isSnapshot -import org.gradle.api.Project -import org.gradle.api.artifacts.dsl.RepositoryHandler -import org.gradle.api.publish.PublishingExtension -import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.bundling.Jar -import org.gradle.kotlin.dsl.create -import org.gradle.kotlin.dsl.get -import org.gradle.kotlin.dsl.getByType - -/** - * A publication for a typical Java project. - * - * In Gradle, in order to publish something somewhere one should create a publication. - * A publication has a name and consists of one or more artifacts plus information about - * those artifacts – the metadata. - * - * An instance of this class represents [MavenPublication] named "mavenJava". It is generally - * accepted that a publication with this name contains a Java project published to one or - * more Maven repositories. - * - * By default, only a jar with the compilation output of `main` source set and its - * metadata files are published. Other artifacts are specified through the - * [constructor parameter][jars]. Please, take a look on [specifyArtifacts] for additional info. - * - * See: [Maven Publish Plugin | Publications](https://docs.gradle.org/current/userguide/publishing_maven.html#publishing_maven:publications) - * - * @param artifactId a name that a project is known by. - * @param jars list of artifacts to be published along with the compilation output. - * @param destinations Maven repositories to which the produced artifacts will be sent. - */ -internal class MavenJavaPublication( - private val artifactId: String, - private val jars: Set>, - private val destinations: Set, -) { - - /** - * Registers this publication in the given project. - * - * The only prerequisite for the project is to have `maven-publish` plugin applied. - */ - fun registerIn(project: Project) { - createPublication(project) - registerDestinations(project) - } - - /** - * Creates a new "mavenJava" [MavenPublication] in the given project. - */ - private fun createPublication(project: Project) { - val gradlePublishing = project.extensions.getByType() - val gradlePublications = gradlePublishing.publications - gradlePublications.create("mavenJava") { - specifyMavenCoordinates(project) - specifyArtifacts(project) - } - } - - private fun MavenPublication.specifyMavenCoordinates(project: Project) { - groupId = project.group.toString() - artifactId = this@MavenJavaPublication.artifactId - version = project.version.toString() - } - - /** - * Specifies which artifacts this [MavenPublication] will contain. - * - * A typical Maven publication contains: - * - * 1. Jar archives. For example: compilation output, sources, javadoc, etc. - * 2. Maven metadata file that has ".pom" extension. - * 3. Gradle metadata file that has ".module" extension. - * - * Metadata files contain information about a publication itself, its artifacts and their - * dependencies. Presence of ".pom" file is mandatory for publication to be consumed by - * `mvn` build tool itself or other build tools that understand Maven notation (Gradle, Ivy). - * Presence of ".module" is optional, but useful when a publication is consumed by Gradle. - * - * See: [Maven – POM Reference](https://maven.apache.org/pom.html) - * [Understanding Gradle Module Metadata](https://docs.gradle.org/current/userguide/publishing_gradle_module_metadata.html) - */ - private fun MavenPublication.specifyArtifacts(project: Project) { - - // "java" component provides a jar with compilation output of "main" source set. - // It is NOT defined as another `Jar` task intentionally. Doing that will leave the - // publication without correct ".pom" and ".module" metadata files generated. - from(project.components["java"]) - - // Other artifacts are represented by `Jar` tasks. Those artifacts don't bring any other - // metadata in comparison with `Component` (such as dependencies notation). - jars.forEach { - artifact(it) - } - } - - /** - * Goes through the [destinations] and registers each as a repository for publishing - * in the given Gradle project. - */ - private fun registerDestinations(project: Project) { - val gradlePublishing = project.extensions.getByType() - val isSnapshot = project.version.toString().isSnapshot() - val gradleRepositories = gradlePublishing.repositories - destinations.forEach { destination -> - gradleRepositories.register(destination, isSnapshot, project) - } - } - - private fun RepositoryHandler.register( - repository: Repository, - isSnapshot: Boolean, - project: Project - ) { - val target = if (isSnapshot) repository.snapshots else repository.releases - val credentials = repository.credentials(project.rootProject) - maven { - url = project.uri(target) - credentials { - username = credentials?.username - password = credentials?.password - } - } - } -} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoExts.kt similarity index 56% rename from buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoExts.kt index d020e968..97e33197 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoLocators.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/ProtoExts.kt @@ -29,9 +29,10 @@ package io.spine.internal.gradle.publish import io.spine.internal.gradle.sourceSets import java.io.File import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.file.FileTreeElement import org.gradle.api.file.SourceDirectorySet -import org.gradle.kotlin.dsl.get - +import org.gradle.api.tasks.bundling.Jar /** * Tells whether there are any Proto sources in "main" source set. @@ -43,13 +44,46 @@ internal fun Project.hasProto(): Boolean { } /** - * Locates Proto sources in "main" source set. + * Locates directories with proto sources under the "main" source sets. * - * "main" source set is added by `java` plugin. Special treatment for Proto sources is needed, - * because they are not Java-related, and, thus, not included in `sourceSets["main"].allSource`. + * Special treatment for Proto sources is needed, because they are not Java-related, and, + * thus, not included in `sourceSets["main"].allSource`. */ internal fun Project.protoSources(): Set { - val mainSourceSet = sourceSets["main"] - val protoSourceDirs = mainSourceSet.extensions.findByName("proto") as SourceDirectorySet? - return protoSourceDirs?.srcDirs ?: emptySet() + val mainSourceSets = sourceSets.filter { + ss -> ss.name.endsWith("main", ignoreCase = true) + } + + val protoExtensions = mainSourceSets.mapNotNull { + it.extensions.findByName("proto") as SourceDirectorySet? + } + + val protoDirs = mutableSetOf() + protoExtensions.forEach { + protoDirs.addAll(it.srcDirs) + } + + return protoDirs +} + +/** + * Checks if the given file belongs to the Google `.proto` sources. + */ +internal fun FileTreeElement.isGoogleProtoSource(): Boolean { + val pathSegments = relativePath.segments + return pathSegments.isNotEmpty() && pathSegments[0].equals("google") +} + +/** + * The reference to the `generateProto` task of a `main` source set. + */ +internal fun Project.generateProto(): Task? = tasks.findByName("generateProto") + +/** + * Makes this [Jar] task depend on the [generateProto] task, if it exists in the same project. + */ +internal fun Jar.dependOnGenerateProto() { + project.generateProto()?.let { + this.dependsOn(it) + } } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Publications.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Publications.kt new file mode 100644 index 00000000..be3bc0ef --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Publications.kt @@ -0,0 +1,212 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.publish + +import io.spine.internal.gradle.Repository +import io.spine.internal.gradle.isSnapshot +import org.gradle.api.Project +import org.gradle.api.artifacts.dsl.RepositoryHandler +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.create + +/** + * The name of the Maven Publishing Gradle plugin. + */ +private const val MAVEN_PUBLISH = "maven-publish" + +/** + * Abstract base for handlers of publications in a project + * with [spinePublishing] settings declared. + */ +internal sealed class PublicationHandler( + protected val project: Project, + private val destinations: Set +) { + + fun apply() = with(project) { + if (!hasCustomPublishing) { + apply(plugin = MAVEN_PUBLISH) + } + + pluginManager.withPlugin(MAVEN_PUBLISH) { + handlePublications() + registerDestinations() + configurePublishTask(destinations) + } + } + + /** + * Either handles publications already declared in the given project, + * or creates new ones. + */ + abstract fun handlePublications() + + /** + * Goes through the [destinations] and registers each as a repository for publishing + * in the given Gradle project. + */ + private fun registerDestinations() { + val repositories = project.publishingExtension.repositories + destinations.forEach { destination -> + repositories.register(project, destination) + } + } + + /** + * Takes a group name and a version from the given [project] and assigns + * them to this publication. + */ + protected fun MavenPublication.assignMavenCoordinates() { + groupId = project.group.toString() + artifactId = project.spinePublishing.artifactPrefix + artifactId + version = project.version.toString() + } +} + +/** + * Adds a Maven repository to the project specifying credentials, if they are + * [available][Repository.credentials] from the root project. + */ +private fun RepositoryHandler.register(project: Project, repository: Repository) { + val isSnapshot = project.version.toString().isSnapshot() + val target = if (isSnapshot) repository.snapshots else repository.releases + val credentials = repository.credentials(project.rootProject) + maven { + url = project.uri(target) + credentials { + username = credentials?.username + password = credentials?.password + } + } +} + +/** + * A publication for a typical Java project. + * + * In Gradle, in order to publish something somewhere one should create a publication. + * A publication has a name and consists of one or more artifacts plus information about + * those artifacts – the metadata. + * + * An instance of this class represents [MavenPublication] named "mavenJava". It is generally + * accepted that a publication with this name contains a Java project published to one or + * more Maven repositories. + * + * By default, only a jar with the compilation output of `main` source set and its + * metadata files are published. Other artifacts are specified through the + * [constructor parameter][jarFlags]. Please, take a look on [specifyArtifacts] for additional info. + * + * @param jarFlags + * flags for additional JARs published along with the compilation output. + * @param destinations + * Maven repositories to which the produced artifacts will be sent. + * @see + * Maven Publish Plugin | Publications + */ +internal class StandardJavaPublicationHandler( + project: Project, + private val jarFlags: JarFlags, + destinations: Set, +) : PublicationHandler(project, destinations) { + + /** + * Creates a new "mavenJava" [MavenPublication] in the given project. + */ + override fun handlePublications() { + val jars = project.artifacts(jarFlags) + val publications = project.publications + publications.create("mavenJava") { + assignMavenCoordinates() + specifyArtifacts(jars) + } + } + + /** + * Specifies which artifacts this [MavenPublication] will contain. + * + * A typical Maven publication contains: + * + * 1. Jar archives. For example: compilation output, sources, javadoc, etc. + * 2. Maven metadata file that has ".pom" extension. + * 3. Gradle's metadata file that has ".module" extension. + * + * Metadata files contain information about a publication itself, its artifacts and their + * dependencies. Presence of ".pom" file is mandatory for publication to be consumed by + * `mvn` build tool itself or other build tools that understand Maven notation (Gradle, Ivy). + * Presence of ".module" is optional, but useful when a publication is consumed by Gradle. + * + * @see Maven – POM Reference + * @see + * Understanding Gradle Module Metadata + */ + private fun MavenPublication.specifyArtifacts(jars: Set>) { + + /* "java" component provides a jar with compilation output of "main" source set. + It is NOT defined as another `Jar` task intentionally. Doing that will leave the + publication without correct ".pom" and ".module" metadata files generated. + */ + val javaComponent = project.components.findByName("java") + javaComponent?.let { + from(it) + } + + /* Other artifacts are represented by `Jar` tasks. Those artifacts don't bring any other + metadata in comparison with `Component` (such as dependencies notation). + */ + jars.forEach { + artifact(it) + } + } +} + +/** + * A handler for custom publications, which are declared under the [publications] + * section of a module. + * + * Such publications should be treated differently than [StandardJavaPublicationHandler], + * which is created for a module. Instead, since the publications are already declared, + * this class only [assigns maven coordinates][assignMavenCoordinates]. + * + * A module which declares custom publications must be specified in + * the [SpinePublishing.modulesWithCustomPublishing] property. + * + * If a module with [publications] declared locally is not specified as one with custom publishing, + * it may cause a name clash between an artifact produced by the [standard][MavenPublication] + * publication, and custom ones. In order to have both standard and custom publications, + * please specify custom artifact IDs or classifiers for each custom publication. + */ +internal class CustomPublicationHandler(project: Project, destinations: Set) : + PublicationHandler(project, destinations) { + + override fun handlePublications() { + project.publications.forEach { + (it as MavenPublication).assignMavenCoordinates() + } + } +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt deleted file mode 100644 index c68e57a5..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingConfig.kt +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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.internal.gradle.publish - -import io.spine.internal.gradle.Repository -import org.gradle.api.Project -import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.bundling.Jar -import org.gradle.kotlin.dsl.apply - -/** - * Information, required to set up publishing of a project using `maven-publish` plugin. - * - * @param artifactId a name that a project is known by. - * @param destinations set of repositories, to which the resulting artifacts will be sent. - * @param includeProtoJar tells whether [protoJar] artifact should be published. - * @param includeTestJar tells whether [testJar] artifact should be published. - */ -internal class PublishingConfig( - val artifactId: String, - val destinations: Set, - val includeProtoJar: Boolean = true, - val includeTestJar: Boolean = false, -) - -/** - * Applies this configuration to the given project. - * - * This method does the following: - * - * 1. Applies `maven-publish` plugin to the project. - * 2. Registers [MavenJavaPublication] in Gradle's [PublicationContainer][org.gradle.api.publish.PublicationContainer]. - * 4. Configures "publish" task. - * - * The actual list of resulted artifacts is determined by [registerArtifacts]. - */ -internal fun PublishingConfig.apply(project: Project) = with(project) { - apply(plugin = "maven-publish") - createPublication(project) - configurePublishTask(destinations) -} - -private fun PublishingConfig.createPublication(project: Project) { - val artifacts = project.registerArtifacts(includeProtoJar, includeTestJar) - val publication = MavenJavaPublication( - artifactId = artifactId, - jars = artifacts, - destinations = destinations - ) - publication.registerIn(project) -} - -/** - * Registers [Jar] tasks, output of which is used as Maven artifacts. - * - * By default, only a jar with java compilation output is included into publication. This method - * registers tasks which produce additional artifacts. - * - * The list of additional artifacts to be registered: - * - * 1. [sourcesJar] – Java, Kotlin and Proto source files. - * 2. [protoJar] – only Proto source files. - * 3. [javadocJar] – documentation, generated upon Java files. - * 4. [testJar] – compilation output of "test" source set. - * - * Registration of [protoJar] and [testJar] is optional. It can be controlled by the method's - * parameters. - * - * @return the list of the registered tasks. - */ -private fun Project.registerArtifacts( - includeProtoJar: Boolean = true, - includeTestJar: Boolean = false -): Set> { - - val artifacts = mutableSetOf( - sourcesJar(), - javadocJar(), - ) - - // We don't want to have an empty "proto.jar" when a project doesn't have any Proto files. - if (hasProto() && includeProtoJar) { - artifacts.add(protoJar()) - } - - // Here, we don't have the corresponding `hasTests()` check, since this artifact is disabled - // by default. And turning it on means "We have tests and need them to be published." - if (includeTestJar) { - artifacts.add(testJar()) - } - - return artifacts -} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExts.kt new file mode 100644 index 00000000..78e73954 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExts.kt @@ -0,0 +1,264 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.publish + +import dokkaKotlinJar +import io.spine.internal.gradle.Repository +import io.spine.internal.gradle.sourceSets +import java.util.* +import org.gradle.api.InvalidUserDataException +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.publish.PublicationContainer +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.tasks.TaskContainer +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.get +import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.named +import org.gradle.kotlin.dsl.register +import org.gradle.kotlin.dsl.the +import org.gradle.kotlin.dsl.withType + +/** + * Obtains [PublishingExtension] of this project. + */ +internal val Project.publishingExtension: PublishingExtension + get() = extensions.getByType() + +/** + * Obtains [PublicationContainer] of this project. + */ +internal val Project.publications: PublicationContainer + get() = publishingExtension.publications + +/** + * Obtains [SpinePublishing] extension from the root project. + */ +internal val Project.spinePublishing: SpinePublishing + get() = this.rootProject.the() + +/** + * Tells if this project has custom publishing. + */ +internal val Project.hasCustomPublishing: Boolean + get() = spinePublishing.modulesWithCustomPublishing.contains(name) + +private const val PUBLISH_TASK = "publish" + +/** + * Locates `publish` task in this [TaskContainer]. + * + * This task publishes all defined publications to all defined repositories. To achieve that, + * the task depends on all `publish`*PubName*`PublicationTo`*RepoName*`Repository` tasks. + * + * Please note, task execution would not copy publications to the local Maven cache. + * + * @see + * Tasks | Maven Publish Plugin + */ +internal val TaskContainer.publish: TaskProvider + get() = named(PUBLISH_TASK) + +/** + * Sets dependencies for `publish` task in this [Project]. + * + * This method performs the following: + * + * 1. When this [Project] is not a root, makes `publish` task in a root project + * depend on a local `publish`. + * 2. Makes local `publish` task verify that credentials are present for each + * of destination repositories. + */ +internal fun Project.configurePublishTask(destinations: Set) { + attachCredentialsVerification(destinations) + bindToRootPublish() +} + +private fun Project.attachCredentialsVerification(destinations: Set) { + val checkCredentials = tasks.registerCheckCredentialsTask(destinations) + val localPublish = tasks.publish + localPublish.configure { dependsOn(checkCredentials) } +} + +private fun Project.bindToRootPublish() { + if (project == rootProject) { + return + } + + val localPublish = tasks.publish + val rootPublish = rootProject.tasks.getOrCreatePublishTask() + rootPublish.configure { dependsOn(localPublish) } +} + +/** + * Use this task accessor when it is not guaranteed that the task is present + * in this [TaskContainer]. + */ +private fun TaskContainer.getOrCreatePublishTask(): TaskProvider = + if (names.contains(PUBLISH_TASK)) { + named(PUBLISH_TASK) + } else { + register(PUBLISH_TASK) + } + +private fun TaskContainer.registerCheckCredentialsTask( + destinations: Set +): TaskProvider = + register("checkCredentials") { + doLast { + destinations.forEach { it.ensureCredentials(project) } + } + } + +private fun Repository.ensureCredentials(project: Project) { + val credentials = credentials(project) + if (Objects.isNull(credentials)) { + throw InvalidUserDataException( + "No valid credentials for repository `${this}`. Please make sure " + + "to pass username/password or a valid `.properties` file." + ) + } +} + +/** + * Excludes Google `.proto` sources from all artifacts. + * + * Goes through all registered `Jar` tasks and filters out Google's files. + */ +@Suppress("unused") +fun TaskContainer.excludeGoogleProtoFromArtifacts() { + withType().configureEach { + exclude { it.isGoogleProtoSource() } + } +} + +/** + * Locates or creates `sourcesJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains sources from `main` source set. + * The task makes sure that sources from the directories below will be included into + * a resulted archive: + * + * - Kotlin + * - Java + * - Proto + * + * Java and Kotlin sources are default to `main` source set since it is created by `java` plugin. + * For Proto sources to be included – [special treatment][protoSources] is needed. + */ +internal fun Project.sourcesJar(): TaskProvider = tasks.getOrCreate("sourcesJar") { + dependOnGenerateProto() + archiveClassifier.set("sources") + from(sourceSets["main"].allSource) // Puts Java and Kotlin sources. + from(protoSources()) // Puts Proto sources. + exclude("desc.ref", "*.desc") // Exclude descriptor files and the descriptor reference. +} + +/** + * Locates or creates `protoJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains only + * [Proto sources][protoSources] from `main` source set. + */ +internal fun Project.protoJar(): TaskProvider = tasks.getOrCreate("protoJar") { + dependOnGenerateProto() + archiveClassifier.set("proto") + from(protoSources()) +} + +/** + * Locates or creates `testJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains compilation output + * of `test` source set. + */ +internal fun Project.testJar(): TaskProvider = tasks.getOrCreate("testJar") { + archiveClassifier.set("test") + from(sourceSets["test"].output) +} + +/** + * Locates or creates `javadocJar` task in this [Project]. + * + * The output of this task is a `jar` archive. The archive contains Javadoc, + * generated upon Java sources from `main` source set. If javadoc for Kotlin is also needed, + * apply Dokka plugin. It tunes `javadoc` task to generate docs upon Kotlin sources as well. + */ +fun Project.javadocJar(): TaskProvider = tasks.getOrCreate("javadocJar") { + archiveClassifier.set("javadoc") + from(files("$buildDir/docs/javadoc")) + dependsOn("javadoc") +} + +internal fun TaskContainer.getOrCreate(name: String, init: Jar.() -> Unit): TaskProvider = + if (names.contains(name)) { + named(name) + } else { + register(name) { + init() + } + } + +/** + * Obtains as a set of [Jar] tasks, output of which is used as Maven artifacts. + * + * By default, only a jar with Java compilation output is included into publication. This method + * registers tasks which produce additional artifacts according to the values of [jarFlags]. + * + * @return the list of the registered tasks. + */ +internal fun Project.artifacts(jarFlags: JarFlags): Set> { + val tasks = mutableSetOf>() + + if (jarFlags.sourcesJar) { + tasks.add(sourcesJar()) + } + + if (jarFlags.javadocJar) { + tasks.add(javadocJar()) + } + + // We don't want to have an empty "proto.jar" when a project doesn't have any Proto files. + if (hasProto() && jarFlags.publishProtoJar) { + tasks.add(protoJar()) + } + + // Here, we don't have the corresponding `hasTests()` check, since this artifact is disabled + // by default. And turning it on means "We have tests and need them to be published." + if (jarFlags.publishTestJar) { + tasks.add(testJar()) + } + + if (jarFlags.publishDokkaKotlinJar) { + tasks.add(dokkaKotlinJar()) + } + + return tasks +} + diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt index 27ed0703..36fcac4d 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingRepos.kt @@ -33,14 +33,6 @@ import io.spine.internal.gradle.Repository */ object PublishingRepos { - @Suppress("HttpUrlsUsage") // HTTPS is not supported by this repository. - val mavenTeamDev = Repository( - name = "maven.teamdev.com", - releases = "http://maven.teamdev.com/repository/spine", - snapshots = "http://maven.teamdev.com/repository/spine-snapshots", - credentialsFile = "credentials.properties" - ) - val cloudRepo = CloudRepo.destination val cloudArtifactRegistry = CloudArtifactRegistry.repository diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt index 30cfc08c..09edecd7 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt @@ -26,8 +26,12 @@ package io.spine.internal.gradle.publish +import dokkaJavaJar +import dokkaKotlinJar import io.spine.internal.gradle.Repository import org.gradle.api.Project +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin +import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.create import org.gradle.kotlin.dsl.findByType @@ -71,7 +75,7 @@ import org.gradle.kotlin.dsl.findByType * `spinePublishing` extension within `subprojectA` itself would lead to an exception. * * In Gradle, in order to publish something somewhere one should create a publication. In each - * of published modules, the extension will create a [publication][MavenJavaPublication] + * of published modules, the extension will create a [publication][StandardJavaPublicationHandler] * named "mavenJava". All artifacts, published by this extension belong to this publication. * * By default, along with the compilation output of "main" source set, the extension publishes @@ -98,17 +102,24 @@ import org.gradle.kotlin.dsl.findByType * 3. [javadocJar] - javadoc, generated upon Java sources from "main" source set. * If javadoc for Kotlin is also needed, apply Dokka plugin. It tunes `javadoc` task to generate * docs upon Kotlin sources as well. + * 4. [dokkaKotlinJar] - documentation generated by Dokka for Kotlin and Java sources + * using the Kotlin API mode. + * 5. [dokkaJavaJar] - documentation generated by Dokka for Kotlin and Java sources + * * using the Java API mode. * * Additionally, [testJar] artifact can be published. This artifact contains compilation output * of "test" source set. Use [SpinePublishing.testJar] to enable its publishing. * - * @see [registerArtifacts] + * @see [artifacts] */ -fun Project.spinePublishing(configuration: SpinePublishing.() -> Unit) { +fun Project.spinePublishing(block: SpinePublishing.() -> Unit) { + apply() val name = SpinePublishing::class.java.simpleName - val extension = with(extensions) { findByType() ?: create(name, project) } + val extension = with(extensions) { + findByType() ?: create(name, project) + } extension.run { - configuration() + block() configured() } } @@ -116,8 +127,9 @@ fun Project.spinePublishing(configuration: SpinePublishing.() -> Unit) { /** * A Gradle extension for setting up publishing of spine modules using `maven-publish` plugin. * - * @param project a project in which the extension is opened. By default, this project will be - * published as long as a [set][modules] of modules to publish is not specified explicitly. + * @param project + * a project in which the extension is opened. By default, this project will be + * published as long as a [set][modules] of modules to publish is not specified explicitly. * * @see spinePublishing */ @@ -125,6 +137,7 @@ open class SpinePublishing(private val project: Project) { private val protoJar = ProtoJar() private val testJar = TestJar() + private val dokkaJar = DokkaJar() /** * Set of modules to be published. @@ -139,6 +152,13 @@ open class SpinePublishing(private val project: Project) { */ var modules: Set = emptySet() + /** + * Set of modules that have custom publications and do not need standard ones. + * + * Empty by default. + */ + var modulesWithCustomPublishing: Set = emptySet() + /** * Set of repositories, to which the resulting artifacts will be sent. * @@ -201,7 +221,7 @@ open class SpinePublishing(private val project: Project) { * implementation("io.spine:spine-client:$version@proto") * ``` */ - fun protoJar(configuration: ProtoJar.() -> Unit) = protoJar.run(configuration) + fun protoJar(block: ProtoJar.() -> Unit) = protoJar.run(block) /** * Allows enabling publishing of [testJar] artifact, containing compilation output @@ -233,14 +253,42 @@ open class SpinePublishing(private val project: Project) { * } * ``` * - * The resulting artifact is available under "test" classifier. I.e., in Gradle 7+, one could - * depend on it like this: + * The resulting artifact is available under "test" classifier. For example, + * in Gradle 7+, one could depend on it like this: * * ``` * implementation("io.spine:spine-client:$version@test") * ``` */ - fun testJar(configuration: TestJar.() -> Unit) = testJar.run(configuration) + fun testJar(block: TestJar.() -> Unit) = testJar.run(block) + + /** + * Configures publishing of [dokkaKotlinJar] and [dokkaJavaJar] artifacts, + * containing Dokka-generated documentation. + * + * By default, publishing of the [dokkaKotlinJar] artifact is enabled, and [dokkaJavaJar] + * is disabled. + * + * Remember that the Dokka Gradle plugin should be applied to publish this artifact as it is + * produced by the `dokkaHtml` task. It can be done by using the + * [io.spine.internal.dependency.Dokka] dependency object or by applying the + * `buildSrc/src/main/kotlin/dokka-for-kotlin` or + * `buildSrc/src/main/kotlin/dokka-for-java` script plugins. + * + * Here's an example of how to use this option: + * + * ``` + * spinePublishing { + * dokkaJar { + * kotlin = false + * java = true + * } + * } + * ``` + * + * The resulting artifact is available under "dokka" classifier. + */ + fun dokkaJar(block: DokkaJar.() -> Unit) = dokkaJar.run(block) /** * Called to notify the extension that its configuration is completed. @@ -249,20 +297,14 @@ open class SpinePublishing(private val project: Project) { * `maven-publish` plugin for each published module. */ internal fun configured() { - ensureProtoJarExclusionsArePublished() ensureTestJarInclusionsArePublished() ensuresModulesNotDuplicated() - val protoJarExclusions = protoJar.exclusions - val testJarInclusions = testJar.inclusions - val publishedProjects = publishedProjects() - - publishedProjects.forEach { project -> - val name = project.name - val includeProtoJar = (protoJarExclusions.contains(name) || protoJar.disabled).not() - val includeTestJar = (testJarInclusions.contains(name) || testJar.enabled) - setUpPublishing(project, includeProtoJar, includeTestJar) + val projectsToPublish = projectsToPublish() + projectsToPublish.forEach { project -> + val jarFlags = JarFlags.create(project.name, protoJar, testJar, dokkaJar) + project.setUpPublishing(jarFlags) } } @@ -278,41 +320,46 @@ open class SpinePublishing(private val project: Project) { * * @see modules */ - private fun publishedProjects() = modules.map { name -> project.project(name) } - .ifEmpty { setOf(project) } + private fun projectsToPublish(): Collection { + if (project.subprojects.isEmpty()) { + return setOf(project) + } + return modules.union(modulesWithCustomPublishing) + .map { name -> project.project(name) } + .ifEmpty { setOf(project) } + } /** * Sets up `maven-publish` plugin for the given project. * - * Firstly, an instance of [PublishingConfig] is assembled for the project. Then, this - * config is applied. + * Firstly, an instance of [PublicationHandler] is created for the project depending + * on the nature of the publication process configured. + * Then, this the handler is scheduled to apply on [Project.afterEvaluate]. * - * This method utilizes `project.afterEvaluate` closure. General rule of thumb is to avoid using - * of this closure, as it configures a project when its configuration is considered completed. + * General rule of thumb is to avoid using [Project.afterEvaluate] of this closure, + * as it configures a project when its configuration is considered completed. * Which is quite counter-intuitive. * - * The root cause why it is used here is a possibility to configure publishing of multiple - * modules from a root project. When this possibility is employed, in fact, we configure - * publishing for a module, build file of which has not been even evaluated by that time. - * That leads to an unexpected behavior. + * We selected to use [Project.afterEvaluate] so that we can configure publishing of multiple + * modules from a root project. When we do this, we configure publishing for a module, + * build file of which has not been even evaluated yet. * * The simplest example here is specifying of `version` and `group` for Maven coordinates. * Let's suppose, they are declared in a module's build file. It is a common practice. * But publishing of the module is configured from a root project's build file. By the time, * when we need to specify them, we just don't know them. As a result, we have to use - * `project.afterEvaluate` in order to guarantee that a module will be configured by the time + * [Project.afterEvaluate] in order to guarantee that a module will be configured by the time * we configure publishing for it. */ - private fun setUpPublishing(project: Project, includeProtoJar: Boolean, includeTestJar: Boolean) { - val artifactId = artifactId(project) - val publishingConfig = PublishingConfig( - artifactId, - destinations, - includeProtoJar, - includeTestJar, - ) - project.afterEvaluate { - publishingConfig.apply(project) + private fun Project.setUpPublishing(jarFlags: JarFlags) { + val customPublishing = modulesWithCustomPublishing.contains(name) + val handler = if (customPublishing) { + CustomPublicationHandler(project, destinations) + } else { + StandardJavaPublicationHandler(project, jarFlags, destinations) + } + afterEvaluate { + handler.apply() } } @@ -322,7 +369,7 @@ open class SpinePublishing(private val project: Project) { * It consists of a project's name and [prefix][artifactPrefix]: * ``. */ - internal fun artifactId(project: Project): String = "$artifactPrefix${project.name}" + fun artifactId(project: Project): String = "$artifactPrefix${project.name}" /** * Ensures that all modules, marked as excluded from [protoJar] publishing, @@ -349,8 +396,10 @@ open class SpinePublishing(private val project: Project) { private fun ensureTestJarInclusionsArePublished() { val nonPublishedInclusions = testJar.inclusions.minus(modules) if (nonPublishedInclusions.isNotEmpty()) { - throw IllegalStateException("One or more modules are marked as `included into test " + - "JAR publication`, but they are not even published: $nonPublishedInclusions") + error( + "One or more modules are marked as `included into test JAR publication`," + + " but they are not even published: $nonPublishedInclusions." + ) } } @@ -370,10 +419,10 @@ open class SpinePublishing(private val project: Project) { rootExtension?.let { rootPublishing -> val thisProject = setOf(project.name, project.path) if (thisProject.minus(rootPublishing.modules).size != 2) { - throw IllegalStateException("Publishing of `$thisProject` module is already " + - "configured in a root project!") + error( + "Publishing of `$thisProject` module is already configured in a root project!" + ) } } } } - diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt deleted file mode 100644 index f41d72b6..00000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/Tasks.kt +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2023, 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 - * - * http://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.internal.gradle.publish - -import io.spine.internal.gradle.Repository -import java.util.* -import org.gradle.api.InvalidUserDataException -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.tasks.TaskContainer -import org.gradle.api.tasks.TaskProvider - -private const val PUBLISH = "publish" - -/** - * Locates `publish` task in this [TaskContainer]. - * - * This task publishes all defined publications to all defined repositories. To achieve that, - * the task depends on all `publish`*PubName*`PublicationTo`*RepoName*`Repository` tasks. - * - * Please note, task execution would not copy publications to the local Maven cache. - * - * @see - * Tasks | Maven Publish Plugin - */ -internal val TaskContainer.publish: TaskProvider - get() = named(PUBLISH) - -/** - * Sets dependencies for `publish` task in this [Project]. - * - * This method performs the following: - * - * 1. When this [Project] is not a root, makes `publish` task in a root project - * depend on a local `publish`. - * 2. Makes local `publish` task verify that credentials are present for each - * of destination repositories. - */ -internal fun Project.configurePublishTask(destinations: Set) { - attachCredentialsVerification(destinations) - bindToRootPublish() -} - -private fun Project.attachCredentialsVerification(destinations: Set) { - val checkCredentials = tasks.registerCheckCredentialsTask(destinations) - val localPublish = tasks.publish - localPublish.configure { dependsOn(checkCredentials) } -} - -private fun Project.bindToRootPublish() { - if (project == rootProject) { - return - } - - val localPublish = tasks.publish - val rootPublish = rootProject.tasks.getOrCreatePublishTask() - rootPublish.configure { dependsOn(localPublish) } -} - -/** - * Use this task accessor when it is not guaranteed that the task is present - * in this [TaskContainer]. - */ -private fun TaskContainer.getOrCreatePublishTask() = - if (names.contains(PUBLISH)) { - named(PUBLISH) - } else { - register(PUBLISH) - } - -private fun TaskContainer.registerCheckCredentialsTask(destinations: Set) = - register("checkCredentials") { - doLast { - destinations.forEach { it.ensureCredentials(project) } - } - } - -private fun Repository.ensureCredentials(project: Project) { - val credentials = credentials(project) - if (Objects.isNull(credentials)) { - throw InvalidUserDataException( - "No valid credentials for repository `${this}`. Please make sure " + - "to pass username/password or a valid `.properties` file." - ) - } -} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt index f67f9b80..4d789a59 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt @@ -89,12 +89,9 @@ class JacocoConfig( */ fun applyTo(project: Project) { project.applyPlugin(BasePlugin::class.java) - project.afterEvaluate { - val javaProjects: Iterable = eligibleProjects(project) - val reportsDir = project.rootProject.buildDir.resolve(reportsDirSuffix) - JacocoConfig(project.rootProject, reportsDir, javaProjects) - .configure() - } + val javaProjects: Iterable = eligibleProjects(project) + val reportsDir = project.rootProject.buildDir.resolve(reportsDirSuffix) + JacocoConfig(project.rootProject, reportsDir, javaProjects).configure() } /** diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ModuleDataExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ModuleDataExtensions.kt index b472396b..9adbb3fb 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ModuleDataExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/ModuleDataExtensions.kt @@ -49,7 +49,7 @@ internal fun MarkdownDocument.printSection( } /** - * Prints the metadata of the module to the specified [Markdown document][out]. + * Prints the module metadata to this [MarkdownDocument]. */ private fun MarkdownDocument.printModule(module: ModuleData) { ol() @@ -105,7 +105,7 @@ private fun MarkdownDocument.printProjectUrl(projectUrl: String?, indent: Int) { } /** - * Prints the links to the the source code licenses. + * Prints the links to the source code licenses. */ @Suppress("SameParameterValue" /* Indentation is consistent across the list. */) private fun MarkdownDocument.printLicenses(licenses: Set, indent: Int) { diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyWriter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyWriter.kt index ab189033..fb1920b4 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyWriter.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/DependencyWriter.kt @@ -38,7 +38,8 @@ import org.gradle.kotlin.dsl.withGroovyBuilder /** * Writes the dependencies of a Gradle project in a `pom.xml` format. * - * Includes the dependencies of the subprojects. Does not include the transitive dependencies. + * Includes the dependencies of the subprojects. Does not include + * the transitive dependencies. * * ``` * @@ -51,6 +52,9 @@ import org.gradle.kotlin.dsl.withGroovyBuilder * * ``` * + * When there are several versions of the same dependency, only the one with + * the newest version is retained. + * * @see PomGenerator */ internal class DependencyWriter @@ -96,32 +100,35 @@ private constructor( * Returns the [scoped dependencies][ScopedDependency] of a Gradle project. */ fun Project.dependencies(): SortedSet { - val dependencies = mutableSetOf() + val dependencies = mutableSetOf() dependencies.addAll(this.depsFromAllConfigurations()) this.subprojects.forEach { subproject -> val subprojectDeps = subproject.depsFromAllConfigurations() dependencies.addAll(subprojectDeps) } - return dependencies.toSortedSet() + + val result = deduplicate(dependencies) + .map { it.scoped } + .toSortedSet() + return result } /** - * Returns the scoped dependencies of the project from all the project configurations. + * Returns the external dependencies of the project from all the project configurations. */ -private fun Project.depsFromAllConfigurations(): Set { - val result = mutableSetOf() +private fun Project.depsFromAllConfigurations(): Set { + val result = mutableSetOf() this.configurations.forEach { configuration -> if (configuration.isCanBeResolved) { // Force resolution of the configuration. configuration.resolvedConfiguration } - configuration.dependencies.forEach { - if (it.isExternal()) { - val dependency = ScopedDependency.of(it, configuration) - result.add(dependency) + configuration.dependencies.filter { it.isExternal() } + .forEach { dependency -> + val moduleDependency = ModuleDependency(project, configuration, dependency) + result.add(moduleDependency) } - } } return result } @@ -132,3 +139,47 @@ private fun Project.depsFromAllConfigurations(): Set { private fun Dependency.isExternal(): Boolean { return this.javaClass.kotlin.isSubclassOf(AbstractExternalModuleDependency::class) } + +/** + * Filters out duplicated dependencies by group and name. + * + * When there are several versions of the same dependency, the method will retain only + * the one with the newest version. + * + * Sometimes, a project uses several versions of the same dependency. This may happen + * when different modules of the project use different versions of the same dependency. + * But for our `pom.xml`, which has clearly representative character, a single version + * of a dependency is quite enough. + * + * The rejected duplicates are logged. + */ +private fun Project.deduplicate(dependencies: Set): List { + val groups = dependencies.distinctBy { it.gav } + .groupBy { it.run { "$group:$name" } } + + logDuplicates(groups) + + val filtered = groups.map { group -> + group.value.maxByOrNull { dep -> dep.version!! }!! + } + return filtered +} + +private fun Project.logDuplicates(dependencies: Map>) { + dependencies.filter { it.value.size > 1 } + .forEach { (dependency, versions) -> logDuplicate(dependency, versions) } +} + +private fun Project.logDuplicate(dependency: String, versions: List) { + logger.lifecycle("") + logger.lifecycle("The project uses several versions of `$dependency` dependency.") + + versions.forEach { + logger.lifecycle( + "module: {}, configuration: {}, version: {}", + it.module.name, + it.configuration.name, + it.version + ) + } +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ModuleDependency.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ModuleDependency.kt new file mode 100644 index 00000000..0dbb11c0 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ModuleDependency.kt @@ -0,0 +1,92 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.report.pom + +import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration +import org.gradle.api.artifacts.Dependency + +/** + * A module's dependency. + * + * Contains information about a module and configuration, from which + * the dependency comes. + */ +internal class ModuleDependency( + val module: Project, + val configuration: Configuration, + private val dependency: Dependency, + +) : Dependency by dependency, Comparable { + + companion object { + private val COMPARATOR = compareBy { it.module } + .thenBy { it.configuration.name } + .thenBy { it.group } + .thenBy { it.name } + .thenBy { it.version } + } + + /** + * A project dependency with its [scope][DependencyScope]. + * + * Doesn't contain any info about an origin module and configuration. + */ + val scoped = ScopedDependency.of(dependency, configuration) + + /** + * GAV coordinates of this dependency. + * + * Gradle's [Dependency] is a mutable object. Its properties can change their + * values with time. In parcticular, the version can be changed as more + * configurations are getting resolved. This is why this property is calculated. + */ + val gav: String + get() = "$group:$name:$version" + + override fun compareTo(other: ModuleDependency): Int = COMPARATOR.compare(this, other) + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ModuleDependency + + if (module != other.module) return false + if (configuration != other.configuration) return false + if (dependency != other.dependency) return false + + return true + } + + override fun hashCode(): Int { + var result = module.hashCode() + result = 31 * result + configuration.hashCode() + result = 31 * result + dependency.hashCode() + return result + } +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt index 389604d2..d25ebd62 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomFormatting.kt @@ -28,6 +28,7 @@ package io.spine.internal.gradle.report.pom import java.io.StringWriter import java.lang.System.lineSeparator +import java.util.* /** * Helps to format the `pom.xml` file according to its expected XML structure. @@ -74,6 +75,7 @@ internal object PomFormatting { "structure per-subproject." + NL return String.format( + Locale.US, "", NL, description, NL ) diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt index 3fe39649..3535922a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/PomGenerator.kt @@ -28,7 +28,6 @@ package io.spine.internal.gradle.report.pom import org.gradle.api.Project import org.gradle.api.plugins.BasePlugin -import org.gradle.kotlin.dsl.extra /** * Generates a `pom.xml` file that contains dependencies of the root project as diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ScopedDependency.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ScopedDependency.kt index d7e09880..5e6bf13b 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ScopedDependency.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/pom/ScopedDependency.kt @@ -94,17 +94,17 @@ private constructor( */ fun of(dependency: Dependency, configuration: Configuration): ScopedDependency { val configurationName = configuration.name - - if (CONFIG_TO_SCOPE.containsKey(configurationName)) { - val scope = CONFIG_TO_SCOPE[configurationName] - return ScopedDependency(dependency, scope!!) - } - if (configurationName.toLowerCase().startsWith("test")) { - return ScopedDependency(dependency, test) + val knownScope = CONFIG_TO_SCOPE[configurationName] + return when { + knownScope != null -> ScopedDependency(dependency, knownScope) + isTestsRelated(configurationName) -> ScopedDependency(dependency, test) + else -> ScopedDependency(dependency, undefined) } - return ScopedDependency(dependency, undefined) } + private fun isTestsRelated(configurationName: String): Boolean = + configurationName.startsWith("test", ignoreCase = true) + /** * Performs comparison of {@code DependencyWithScope} instances according to these rules: * diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt index 4c15d912..b9d9c2aa 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Multiproject.kt @@ -62,10 +62,8 @@ import io.spine.internal.gradle.publish.testJar @Suppress("unused") fun Project.exposeTestConfiguration() { - if (pluginManager.hasPlugin("java").not()) { - throw IllegalStateException( - "Can't expose the test configuration because `java` plugin has not been applied." - ) + check(pluginManager.hasPlugin("java")) { + "Can't expose the test configuration because `java` plugin has not been applied." } configurations.create("testArtifacts") { diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt index 5ac10159..1d7a656e 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt @@ -45,6 +45,15 @@ import org.gradle.kotlin.dsl.register */ @Suppress("unused") fun TaskContainer.registerTestTasks() { + withType(Test::class.java).configureEach { + filter { + // There could be cases with no matching tests. E.g. tests could be based on Kotest, + // which has custom task types and names. + isFailOnNoMatchingTests = false + includeTestsMatching("*Test") + includeTestsMatching("*Spec") + } + } register("fastTest").let { register("slowTest") { shouldRunAfter(it) @@ -56,8 +65,10 @@ fun TaskContainer.registerTestTasks() { * Name of a tag for annotating a test class or method that is known to be slow and * should not normally be run together with the main test suite. * - * @see [SlowTest](https://spine.io/base/reference/testlib/io/spine/testing/SlowTest.html) - * @see [Tag](https://junit.org/junit5/docs/5.0.2/api/org/junit/jupiter/api/Tag.html) + * @see + * SlowTest + * @see + * Tag */ private const val SLOW_TAG = "slow" @@ -82,7 +93,8 @@ private open class SlowTest : Test() { init { description = "Executes JUnit tests tagged as `slow`." group = "Verification" - + // No slow tests -- no problem. + filter.isFailOnNoMatchingTests = false this.useJUnitPlatform { includeTags(SLOW_TAG) } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/markup/MarkdownDocument.kt b/buildSrc/src/main/kotlin/io/spine/internal/markup/MarkdownDocument.kt index a8fb5373..af9154fa 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/markup/MarkdownDocument.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/markup/MarkdownDocument.kt @@ -28,16 +28,12 @@ package io.spine.internal.markup import java.io.File -/** - * Shortcuts for the Markdown syntax. - */ - /** * A virtual document written in Markdown. * * After it's finished, end-users would typically write it to a [real file][writeToFile]. */ -@SuppressWarnings("detekt.complexity.TooManyFunctions") /* By design. */ +@Suppress("TooManyFunctions") class MarkdownDocument { private val builder: StringBuilder = StringBuilder() diff --git a/buildSrc/src/main/kotlin/travis-warnings.gradle.kt b/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts similarity index 51% rename from buildSrc/src/main/kotlin/travis-warnings.gradle.kt rename to buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts index 14acad05..b6b49326 100644 --- a/buildSrc/src/main/kotlin/travis-warnings.gradle.kt +++ b/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts @@ -24,32 +24,47 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import org.gradle.api.Project -import org.gradle.api.tasks.javadoc.Javadoc -import org.gradle.external.javadoc.CoreJavadocOptions -import org.gradle.kotlin.dsl.named +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 +plugins { + jacoco +} + +/** + * 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") -object TravisLogs { +private val about = "" + +/** + * Configure Jacoco task with custom input from this Kotlin Multiplatform project. + */ +val jacocoTestReport: JacocoReport by tasks.getting(JacocoReport::class) { + + val classFiles = File("${buildDir}/classes/kotlin/jvm/") + .walkBottomUp() + .toSet() + classDirectories.setFrom(classFiles) + + val coverageSourceDirs = arrayOf( + "src/commonMain", + "src/jvmMain" + ) + sourceDirectories.setFrom(files(coverageSourceDirs)) - /** - * Specific setup for a Travis build, which prevents warning messages related to - * `javadoc` tasks in build logs. - * - * It is expected that warnings are viewed and analyzed during local builds. - */ - fun hideJavadocWarnings(p: Project) { - // - val isTravis = System.getenv("TRAVIS") == "true" - if (isTravis) { - // Set the maximum number of Javadoc warnings to print. - // If the parameter value is zero, all warnings will be printed. - p.tasks.named("javadoc") { - val opt = options - if (opt is CoreJavadocOptions) { - opt.addStringOption("Xmaxwarns", "1") - } - } - } - } + executionData.setFrom(files("${buildDir}/jacoco/jvmTest.exec")) } diff --git a/buildSrc/src/main/kotlin/jvm-module.gradle.kts b/buildSrc/src/main/kotlin/jvm-module.gradle.kts new file mode 100644 index 00000000..81c7a875 --- /dev/null +++ b/buildSrc/src/main/kotlin/jvm-module.gradle.kts @@ -0,0 +1,217 @@ +/* + * Copyright 2023, 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 + * + * http://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 BuildSettings.javaVersion +import io.spine.internal.dependency.CheckerFramework +import io.spine.internal.dependency.Dokka +import io.spine.internal.dependency.ErrorProne +import io.spine.internal.dependency.Guava +import io.spine.internal.dependency.JUnit +import io.spine.internal.dependency.JavaX +import io.spine.internal.dependency.Kotest +import io.spine.internal.dependency.Protobuf +import io.spine.internal.dependency.Spine +import io.spine.internal.gradle.checkstyle.CheckStyleConfig +import io.spine.internal.gradle.github.pages.updateGitHubPages +import io.spine.internal.gradle.javac.configureErrorProne +import io.spine.internal.gradle.javac.configureJavac +import io.spine.internal.gradle.javadoc.JavadocConfig +import io.spine.internal.gradle.kotlin.applyJvmToolchain +import io.spine.internal.gradle.kotlin.setFreeCompilerArgs +import io.spine.internal.gradle.report.license.LicenseReporter +import io.spine.internal.gradle.testing.configureLogging +import io.spine.internal.gradle.testing.registerTestTasks +import org.gradle.api.Project +import org.gradle.api.tasks.Delete +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getValue +import org.gradle.kotlin.dsl.idea +import org.gradle.kotlin.dsl.invoke +import org.gradle.kotlin.dsl.`java-library` +import org.gradle.kotlin.dsl.kotlin +import org.gradle.kotlin.dsl.provideDelegate +import org.gradle.kotlin.dsl.registering +import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + `java-library` + idea + id("net.ltgt.errorprone") + id("pmd-settings") + id("project-report") + id("dokka-for-java") + kotlin("jvm") + id("io.kotest") + id("org.jetbrains.kotlinx.kover") + id("detekt-code-analysis") + id("dokka-for-kotlin") +} + +LicenseReporter.generateReportIn(project) +JavadocConfig.applyTo(project) +CheckStyleConfig.applyTo(project) + +project.run { + configureJava(javaVersion) + configureKotlin(javaVersion) + addDependencies() + forceConfigurations() + + val generatedDir = "$projectDir/generated" + setTaskDependencies(generatedDir) + setupTests() + + configureGitHubPages() +} + +typealias Module = Project + +fun Module.configureJava(javaVersion: JavaLanguageVersion) { + java { + toolchain.languageVersion.set(javaVersion) + } + + tasks { + withType().configureEach { + configureJavac() + configureErrorProne() + } + } +} + +fun Module.configureKotlin(javaVersion: JavaLanguageVersion) { + kotlin { + applyJvmToolchain(javaVersion.asInt()) + explicitApi() + } + + tasks { + withType().configureEach { + kotlinOptions.jvmTarget = javaVersion.toString() + setFreeCompilerArgs() + } + } + + kover { + useJacoco() + } + + koverReport { + defaults { + xml { + onCheck = true + } + } + } +} + +/** + * These dependencies are applied to all subprojects and do not have to + * be included explicitly. + * + * We expose production code dependencies as API because they are used + * by the framework parts that depend on `base`. + */ +fun Module.addDependencies() = dependencies { + errorprone(ErrorProne.core) + + Protobuf.libs.forEach { api(it) } + api(Guava.lib) + + compileOnlyApi(CheckerFramework.annotations) + compileOnlyApi(JavaX.annotations) + ErrorProne.annotations.forEach { compileOnlyApi(it) } + + implementation(Spine.Logging.lib) + runtimeOnly(Spine.Logging.backend) + + testImplementation(Guava.testLib) + testImplementation(JUnit.runner) + testImplementation(JUnit.pioneer) + JUnit.api.forEach { testImplementation(it) } + + testImplementation(Spine.testlib) + testImplementation(Kotest.frameworkEngine) + testImplementation(Kotest.datatest) + testImplementation(Kotest.runnerJUnit5Jvm) + testImplementation(JUnit.runner) +} + +fun Module.forceConfigurations() { + with(configurations) { + forceVersions() + excludeProtobufLite() + all { + resolutionStrategy { + force( + JUnit.bom, + JUnit.runner, + Dokka.BasePlugin.lib + ) + } + } + } +} + +fun Module.setupTests() { + tasks { + registerTestTasks() + test.configure { + useJUnitPlatform { + includeEngines("junit-jupiter") + } + configureLogging() + } + } +} + +fun Module.setTaskDependencies(generatedDir: String) { + tasks { + val cleanGenerated by registering(Delete::class) { + delete(generatedDir) + } + clean.configure { + dependsOn(cleanGenerated) + } + + project.afterEvaluate { + val publish = tasks.findByName("publish") + publish?.dependsOn("${project.path}:updateGitHubPages") + } + } + configureTaskDependencies() +} + +fun Module.configureGitHubPages() { + val docletVersion = project.version.toString() + updateGitHubPages(docletVersion) { + allowInternalJavadoc.set(true) + rootFolder.set(rootDir) + } +} diff --git a/buildSrc/src/main/kotlin/write-manifest.gradle.kts b/buildSrc/src/main/kotlin/write-manifest.gradle.kts new file mode 100644 index 00000000..aff16776 --- /dev/null +++ b/buildSrc/src/main/kotlin/write-manifest.gradle.kts @@ -0,0 +1,164 @@ +/* + * Copyright 2023, 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 + * + * http://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.internal.gradle.publish.SpinePublishing +import java.nio.file.Files.createDirectories +import java.nio.file.Files.createFile +import java.text.SimpleDateFormat +import java.util.* +import java.util.jar.Attributes.Name.IMPLEMENTATION_TITLE +import java.util.jar.Attributes.Name.IMPLEMENTATION_VENDOR +import java.util.jar.Attributes.Name.IMPLEMENTATION_VERSION +import java.util.jar.Attributes.Name.MANIFEST_VERSION +import java.util.jar.Manifest + +plugins { + java +} + +/** + * Obtains a string value of a [System] property with the given key. + */ +fun prop(key: String): String = System.getProperties()[key].toString() + +/** + * Obtains the current time in UTC using ISO 8601 format. + */ +fun currentTime(): String = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(Date()) + +/** + * Obtains the information on the JDK used for the build. + */ +fun buildJdk(): String = + "${prop("java.version")} (${prop("java.vendor")} ${prop("java.vm.version")})" + +/** + * Obtains the information on the operating system used for the build. + */ +fun buildOs(): String = + "${prop("os.name")} ${prop("os.arch")} ${prop("os.version")}" + +/** The publishing settings from the root project. */ +val spinePublishing = rootProject.the() +val artifactPrefix = spinePublishing.artifactPrefix + +/** + * Obtains the implementation title for the project using project group, + * artifact prefix from [SpinePublishing], and the name of the project to which + * this script plugin is applied. + */ +fun implementationTitle() = "${project.group}:$artifactPrefix${project.name}" + +/** + * The name of the manifest attribute holding the timestamp of the build. + */ +val buildTimestampAttr = "Build-Timestamp" + +/** + * The attributes we put into the JAR manifest. + * + * This map is shared between the [exposeManifestForTests] task and the action which + * customizes the [Jar] task below. + */ +val manifestAttributes = mapOf( + "Built-By" to prop("user.name"), + buildTimestampAttr to currentTime(), + "Created-By" to "Gradle ${gradle.gradleVersion}", + "Build-Jdk" to buildJdk(), + "Build-OS" to buildOs(), + IMPLEMENTATION_TITLE.toString() to implementationTitle(), + IMPLEMENTATION_VERSION.toString() to project.version, + IMPLEMENTATION_VENDOR.toString() to "TeamDev" +) + +/** + * Creates a manifest file in `resources` so that it is available for the tests. + * + * This task does the same what does the block which configures the `tasks.jar` below. + * We cannot use the manifest file created by the `Jar` task because it's not visible + * when running tests. We cannot depend on the `Jar` from `resources` because it would + * form a circular dependency. + */ +val exposeManifestForTests by tasks.creating { + + val outputFile = layout.buildDirectory.file("resources/main/META-INF/MANIFEST.MF") + outputs.file(outputFile).withPropertyName("manifestFile") + + fun createManifest(): Manifest { + val manifest = Manifest() + + // The manifest version attribute is crucial for writing. + // It it's absent nothing would be written. + manifest.mainAttributes[MANIFEST_VERSION] = "1.0" + + manifestAttributes.forEach { entry -> + manifest.mainAttributes.putValue(entry.key, entry.value.toString()) + } + return manifest + } + + fun writeManifest(manifest: Manifest) { + val file = outputFile.get().getAsFile() + val path = file.toPath() + createDirectories(path.parent) + if (!file.exists()) { + createFile(path) + } + val stream = file.outputStream() + stream.use { + manifest.write(stream) + } + } + + doLast { + val manifest = createManifest() + writeManifest(manifest) + } +} + +tasks.processResources { + dependsOn(exposeManifestForTests) +} + +tasks.jar { + manifest { + attributes(manifestAttributes) + } +} + +/** + * Makes Gradle ignore the [buildTimestampAttr] attribute during normalization. + * + * See [Java META-INF normalization](https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:meta_inf_normalization) + * section of the Gradle documentation for details. + */ +normalization { + runtimeClasspath { + metaInf { + ignoreAttribute(buildTimestampAttr) + } + } +} diff --git a/buildSrc/src/main/resources/dokka/assets/logo-icon.svg b/buildSrc/src/main/resources/dokka/assets/logo-icon.svg new file mode 100644 index 00000000..ced7f0d7 --- /dev/null +++ b/buildSrc/src/main/resources/dokka/assets/logo-icon.svg @@ -0,0 +1,17 @@ + + + + diff --git a/buildSrc/src/main/resources/dokka/styles/custom-styles.css b/buildSrc/src/main/resources/dokka/styles/custom-styles.css new file mode 100644 index 00000000..8c442fe4 --- /dev/null +++ b/buildSrc/src/main/resources/dokka/styles/custom-styles.css @@ -0,0 +1,52 @@ +/* + * Copyright 2023, 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 + * + * http://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. + */ + +:root, +:root.theme-dark { + --color-dark: #007bff; +} + +:root.theme-dark dt { + color: #fff; +} + +.library-name a::before { + background-image: url('https://spine.io/img/spine-sign-white.svg') +} + +.cover a, +.keyValue > div:first-child > .inline-flex > div:first-child > a { + font-family: var(--default-monospace-font-family); +} + +.keyValue > div:first-child > .inline-flex > div:first-child { + overflow: hidden; + text-overflow: ellipsis; +} + +.symbol.monospace.block { + margin: 10px; +} diff --git a/buildSrc/src/main/resources/pmd.xml b/buildSrc/src/main/resources/pmd.xml deleted file mode 100644 index 72e04058..00000000 --- a/buildSrc/src/main/resources/pmd.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - A set of PMD rules applied to Spine Event Engine projects. - - - - .*/generated/.* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 6d50825779b7e7167f4ae14a6446d65212d2534f Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Wed, 23 Aug 2023 17:30:24 +0100 Subject: [PATCH 10/25] =?UTF-8?q?Update=20Gradle=20=E2=80=94>=207.6.2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 61574 bytes gradle/wrapper/gradle-wrapper.properties | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..943f0cbfa754578e88a3dae77fce6e3dea56edbf 100644 GIT binary patch delta 36900 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

yHlr~Qj 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 GTKgBj+ffbx diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fce..4e86b927 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From d2e5561b315ee7bc6df675ecdc46d035215e0ba5 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Wed, 23 Aug 2023 17:30:46 +0100 Subject: [PATCH 11/25] =?UTF-8?q?Update=20Gradle=20executable=20files=20?= =?UTF-8?q?=E2=80=94>=207.6.2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradlew | 18 ++++++++++++++---- gradlew.bat | 15 +++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/gradlew b/gradlew index 1b6c7873..65dcd68d 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -205,6 +209,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd32..93e3f59f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal From ff0e0000ad3b783e348dfed82d14393526b4f97a Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Wed, 23 Aug 2023 17:34:32 +0100 Subject: [PATCH 12/25] Migrate to the new Logging API. Address test failures related to the changes in parent (`core-java`) tests. Incorporate PMD and Checkstyle feedback as well. --- datastore/build.gradle.kts | 18 +++++++-------- .../datastore/DatastoreStorageFactory.java | 4 ++-- .../storage/datastore/DatastoreWrapper.java | 23 ++++++++++++------- .../storage/datastore/DsQueryIterator.java | 4 ++-- .../storage/datastore/DsReaderLookup.java | 19 +++++++++------ .../datastore/delivery/DsSessionStorage.java | 2 ++ .../delivery/DsShardedWorkRegistry.java | 4 ++-- .../datastore/record/DsRecordStorage.java | 4 +++- .../storage/datastore/BigDataTester.java | 12 ++++++---- .../datastore/config/DsColumnMappingTest.java | 7 +++++- .../trace/stackdriver/AsyncTraceService.java | 15 ++++++++---- .../trace/stackdriver/SpanAttribute.java | 2 +- .../TestDatastoreStorageFactory.java | 10 ++++---- .../datastore/TestDatastoreWrapper.java | 9 +++++--- .../storage/datastore/TestDatastores.java | 4 ++-- 15 files changed, 83 insertions(+), 54 deletions(-) diff --git a/datastore/build.gradle.kts b/datastore/build.gradle.kts index a8973f04..8dbc8863 100644 --- a/datastore/build.gradle.kts +++ b/datastore/build.gradle.kts @@ -24,30 +24,30 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import com.github.psxpaul.task.ExecFork import io.spine.internal.dependency.GoogleCloud import io.spine.internal.dependency.Spine import io.spine.internal.gradle.publish.IncrementGuard -import io.spine.tools.gradle.exec.ExecFork plugins { - id("io.spine.execfork") + id("com.github.psxpaul.execfork") version "0.2.2" } apply() -val spine = Spine(project) - dependencies { // Google Cloud Datastore api(GoogleCloud.datastore) { exclude(group = "com.google.protobuf") exclude(group = "com.google.guava") } - api(spine.base) - api(spine.baseTypes) + api(Spine.base) + api(Spine.baseTypes) + + api(Spine.Logging.lib) testImplementation(project(":testutil-gcloud")) - testImplementation(spine.server) + testImplementation(Spine.server) } val startDatastore by tasks.registering(ExecFork::class) { @@ -65,8 +65,8 @@ val startDatastore by tasks.registering(ExecFork::class) { // waitForPort = 8081 - standardOutput = "$buildDir/ds-emulator/stdout.log" - errorOutput = "$buildDir/ds-emulator/stderr.log" + standardOutput.set(File("$buildDir/ds-emulator/stdout.log")) + errorOutput.set(File("$buildDir/ds-emulator/stderr.log")) // Suppress a console warning for JRE < 9 killDescendants = false diff --git a/datastore/src/main/java/io/spine/server/storage/datastore/DatastoreStorageFactory.java b/datastore/src/main/java/io/spine/server/storage/datastore/DatastoreStorageFactory.java index 51086647..980286aa 100644 --- a/datastore/src/main/java/io/spine/server/storage/datastore/DatastoreStorageFactory.java +++ b/datastore/src/main/java/io/spine/server/storage/datastore/DatastoreStorageFactory.java @@ -34,7 +34,7 @@ import com.google.protobuf.Message; import io.spine.annotation.Internal; import io.spine.base.EntityState; -import io.spine.logging.Logging; +import io.spine.logging.WithLogging; import io.spine.server.BoundedContextBuilder; import io.spine.server.ContextSpec; import io.spine.server.delivery.InboxStorage; @@ -80,7 +80,7 @@ * * @see DatastoreStorageFactory#configureTenantIndex(BoundedContextBuilder) */ -public class DatastoreStorageFactory implements StorageFactory, Logging { +public class DatastoreStorageFactory implements StorageFactory, WithLogging { private final Datastore datastore; diff --git a/datastore/src/main/java/io/spine/server/storage/datastore/DatastoreWrapper.java b/datastore/src/main/java/io/spine/server/storage/datastore/DatastoreWrapper.java index 57bc1283..53f49d41 100644 --- a/datastore/src/main/java/io/spine/server/storage/datastore/DatastoreWrapper.java +++ b/datastore/src/main/java/io/spine/server/storage/datastore/DatastoreWrapper.java @@ -41,7 +41,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Streams; import com.google.errorprone.annotations.InlineMe; -import io.spine.logging.Logging; +import io.spine.logging.WithLogging; import io.spine.server.storage.datastore.record.Entities; import io.spine.server.storage.datastore.record.RecordId; import io.spine.server.storage.datastore.tenant.NamespaceSupplier; @@ -58,12 +58,13 @@ import static com.google.common.collect.Iterables.toArray; import static com.google.common.collect.Streams.stream; import static java.lang.Math.min; +import static java.lang.String.format; import static java.util.stream.Collectors.toList; /** * Adapts {@link Datastore} API for being used for storages. */ -public class DatastoreWrapper extends DatastoreMedium implements Logging { +public class DatastoreWrapper extends DatastoreMedium implements WithLogging { private static final int MAX_ENTITIES_PER_WRITE_REQUEST = 500; @@ -197,7 +198,7 @@ public Iterator readAll(StructuredQuery query, int pageSize) { /** * Queries the Datastore for all entities matching query. * - *

Read is performed in batches until all of the matching entities are fetched, resulting + *

Read is performed in batches until all the matching entities are fetched, resulting * in multiple Datastore queries. * *

The resulting {@code Iterator} is evaluated lazily. A call to @@ -237,7 +238,6 @@ public Iterator readAll(StructuredQuery query) { * if the provided {@linkplain StructuredQuery#getLimit() query includes a limit} or * the provided {@code batchSize} is 0 */ - @SuppressWarnings("UnstableApiUsage") /* Guava's `Streams.stream` is fine. */ private Iterator readAllPageByPage(StructuredQuery query, @Nullable Integer pageSize) { checkArgument(query.getLimit() == null, @@ -278,8 +278,12 @@ protected void dropTable(Kind table) { .setNamespace(namespace.value()) .setKind(table.value()) .build(); - _trace().log("Deleting all entities of `%s` kind in `%s` namespace.", - table, namespace.value()); + logger() + .atTrace() + .log(() -> format( + "Deleting all entities of `%s` kind in `%s` namespace.", + table, namespace.value()) + ); var queryResult = read(query); var keys = toIterable(queryResult); deleteEntities(toArray(keys, Key.class)); @@ -338,8 +342,11 @@ public KeyFactory keyFactory(Kind kind) { .newKeyFactory() .setKind(kind.value()); var namespace = namespace(); - _trace().log("Retrieving KeyFactory for kind `%s` in `%s` namespace.", - kind, namespace.value()); + logger().atTrace() + .log(() -> format( + "Retrieving KeyFactory for kind `%s` in `%s` namespace.", + kind, namespace.value()) + ); keyFactory.setNamespace(namespace.value()); return keyFactory; } diff --git a/datastore/src/main/java/io/spine/server/storage/datastore/DsQueryIterator.java b/datastore/src/main/java/io/spine/server/storage/datastore/DsQueryIterator.java index 1a2b8cec..1991c9b4 100644 --- a/datastore/src/main/java/io/spine/server/storage/datastore/DsQueryIterator.java +++ b/datastore/src/main/java/io/spine/server/storage/datastore/DsQueryIterator.java @@ -32,7 +32,7 @@ import com.google.cloud.datastore.StructuredQuery; import com.google.common.collect.UnmodifiableIterator; import io.spine.annotation.Internal; -import io.spine.logging.Logging; +import io.spine.logging.WithLogging; import java.util.NoSuchElementException; @@ -58,7 +58,7 @@ * the type of queried objects */ @Internal -public final class DsQueryIterator extends UnmodifiableIterator implements Logging { +public final class DsQueryIterator extends UnmodifiableIterator implements WithLogging { private final StructuredQuery query; private final QueryResults currentPage; diff --git a/datastore/src/main/java/io/spine/server/storage/datastore/DsReaderLookup.java b/datastore/src/main/java/io/spine/server/storage/datastore/DsReaderLookup.java index f073b35c..e290dc1a 100644 --- a/datastore/src/main/java/io/spine/server/storage/datastore/DsReaderLookup.java +++ b/datastore/src/main/java/io/spine/server/storage/datastore/DsReaderLookup.java @@ -31,7 +31,7 @@ import com.google.cloud.datastore.Key; import com.google.cloud.datastore.StructuredQuery; import com.google.common.collect.ImmutableList; -import io.spine.logging.Logging; +import io.spine.logging.WithLogging; import io.spine.server.storage.datastore.tenant.Namespace; import org.checkerframework.checker.nullness.qual.Nullable; @@ -41,13 +41,14 @@ import static com.google.common.base.Preconditions.checkNotNull; import static java.lang.Math.min; +import static java.lang.String.format; /** * A low-level Datastore lookup. * *

Uses a given {@link DatastoreReader} to find requested methods. */ -final class DsReaderLookup implements Logging { +final class DsReaderLookup implements WithLogging { private static final int MAX_KEYS_PER_READ_REQUEST = 1000; @@ -65,9 +66,12 @@ DsQueryIterator execute(StructuredQuery query, Namespace namespace) { .setNamespace(namespace.value()) .build(); var iterator = new DsQueryIterator<>(queryWithNamespace, datastore); - iterator._trace() - .log("Reading the records of `%s` kind in `%s` namespace.", - query.getKind(), namespace.value()); + iterator.logger() + .atTrace() + .log(() -> format( + "Reading the records of `%s` kind in `%s` namespace.", + query.getKind(), namespace.value()) + ); return iterator; } @@ -98,8 +102,9 @@ DsQueryIterator execute(StructuredQuery query, Namespace namespace) { */ private List readBulk(List keys) { var pageCount = keys.size() / MAX_KEYS_PER_READ_REQUEST + 1; - _trace().log("Reading a big bulk of records synchronously. The data is read as %d pages.", - pageCount); + logger().atTrace() + .log(() -> format( + "Reading a big bulk of records synchronously. The data is read as %d pages.", pageCount)); var lowerBound = 0; var higherBound = MAX_KEYS_PER_READ_REQUEST; var keysLeft = keys.size(); diff --git a/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsSessionStorage.java b/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsSessionStorage.java index a3f416d0..74f2d1ae 100644 --- a/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsSessionStorage.java +++ b/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsSessionStorage.java @@ -122,6 +122,7 @@ private static MessageRecordSpec messageSpec() { */ @Override public Optional read(ShardIndex index) { + checkNotClosed(); var key = keyOf(index); try (var tx = newTransaction()) { var result = tx.read(key); @@ -145,6 +146,7 @@ protected Iterator readAll() { */ @SuppressWarnings("OverlyBroadCatchBlock") /* Treating all exceptions similarly. */ public void write(ShardSessionRecord message) { + checkNotClosed(); try (var tx = newTransaction()) { var record = appendColumns(message); var entity = entityRecordToEntity(record); diff --git a/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsShardedWorkRegistry.java b/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsShardedWorkRegistry.java index aefbe55f..79e7a114 100644 --- a/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsShardedWorkRegistry.java +++ b/datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsShardedWorkRegistry.java @@ -28,7 +28,7 @@ import com.google.cloud.datastore.DatastoreException; import com.google.protobuf.Duration; -import io.spine.logging.Logging; +import io.spine.logging.WithLogging; import io.spine.server.ContextSpec; import io.spine.server.NodeId; import io.spine.server.delivery.AbstractWorkRegistry; @@ -56,7 +56,7 @@ * this implementation with Cloud Firestore in Datastore mode, as it enforces serializable isolation * for transactions. */ -public class DsShardedWorkRegistry extends AbstractWorkRegistry implements Logging { +public class DsShardedWorkRegistry extends AbstractWorkRegistry implements WithLogging { private final DsSessionStorage storage; diff --git a/datastore/src/main/java/io/spine/server/storage/datastore/record/DsRecordStorage.java b/datastore/src/main/java/io/spine/server/storage/datastore/record/DsRecordStorage.java index ee5a5dd7..a6057ded 100644 --- a/datastore/src/main/java/io/spine/server/storage/datastore/record/DsRecordStorage.java +++ b/datastore/src/main/java/io/spine/server/storage/datastore/record/DsRecordStorage.java @@ -108,6 +108,7 @@ protected Iterator index(RecordQuery query) { @Override public Optional read(I id) { + checkNotClosed(); var key = keyOf(id); var raw = datastore.read(key); var result = raw.map(r -> { @@ -119,6 +120,7 @@ public Optional read(I id) { @Override public void write(I id, R record) { + checkNotClosed(); writeRecord(RecordWithColumns.of(id, record)); } @@ -214,7 +216,7 @@ protected final TransactionWrapper newTransaction() { * Converts a Datastore {@code Entity} to the record of type served by this storage. */ protected final R toRecord(Entity entity) { - return Entities.toMessage(entity, typeUrl); + return toMessage(entity, typeUrl); } private V read(ReadOperation operation) { diff --git a/datastore/src/test/java/io/spine/server/storage/datastore/BigDataTester.java b/datastore/src/test/java/io/spine/server/storage/datastore/BigDataTester.java index ab82b6e3..06c26fcc 100644 --- a/datastore/src/test/java/io/spine/server/storage/datastore/BigDataTester.java +++ b/datastore/src/test/java/io/spine/server/storage/datastore/BigDataTester.java @@ -28,7 +28,7 @@ import com.google.common.base.Throwables; import com.google.protobuf.Message; -import io.spine.logging.Logging; +import io.spine.logging.WithLogging; import io.spine.server.storage.RecordStorage; import io.spine.server.storage.RecordStorageUnderTest; @@ -53,7 +53,7 @@ * separately. * *

The test suits based on this utility are not expected to check if the read records match - * those that were written or not. Instead they should just check the time consumed by + * those that were written or not. Instead, they should just check the time consumed by * the operations and the consistency of the data (i.e. count of the records written and read). * * @param @@ -61,7 +61,7 @@ * @param * the type of the records served by the {@code RecordStorage} under test */ -public final class BigDataTester implements Logging { +public final class BigDataTester implements WithLogging { private static final int DEFAULT_BULK_SIZE = 500; @@ -126,7 +126,8 @@ public void testBigDataOperations(RecordStorageUnderTest storage) { writeTime)); } - _debug().log("Writing took %d millis.", writeTime); + logger().atDebug() + .log(() -> format("Writing took %d millis.", writeTime)); try { Thread.sleep(1000); @@ -147,7 +148,8 @@ public void testBigDataOperations(RecordStorageUnderTest storage) { readMillisLimit, readTime)); } - _debug().log("Reading took %d millis.", readTime); + logger().atDebug() + .log(() -> format("Reading took %d millis.", readTime)); assertEquals(records.size(), size(readResults), "Unexpected record count read."); } diff --git a/datastore/src/test/java/io/spine/server/storage/datastore/config/DsColumnMappingTest.java b/datastore/src/test/java/io/spine/server/storage/datastore/config/DsColumnMappingTest.java index 1e960844..8c6d9727 100644 --- a/datastore/src/test/java/io/spine/server/storage/datastore/config/DsColumnMappingTest.java +++ b/datastore/src/test/java/io/spine/server/storage/datastore/config/DsColumnMappingTest.java @@ -41,6 +41,7 @@ import io.spine.string.Stringifiers; import io.spine.test.storage.StgProject; import io.spine.test.storage.StgProject.Status; +import io.spine.test.storage.StgProjectId; import io.spine.testing.TestValues; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -48,6 +49,7 @@ import static com.google.cloud.Timestamp.ofTimeSecondsAndNanos; import static com.google.common.truth.Truth.assertThat; +import static io.spine.base.Time.currentTime; import static java.nio.charset.StandardCharsets.UTF_8; @DisplayName("`DsColumnMapping` should") @@ -121,7 +123,9 @@ void enumAsLongValue() { @Test @DisplayName("generic `Message` as `StringValue`") void messageAsStringValue() { + StgProjectId id = StgProjectId.newBuilder().setId("ID").build(); var project = StgProject.newBuilder() + .setId(id) .setName("project-name") .build(); var messageAsString = Stringifiers.toString(project); @@ -131,7 +135,7 @@ void messageAsStringValue() { @Test @DisplayName("`Timestamp` as `TimestampValue`") void timestampAsTimestampValue() { - var timestamp = Time.currentTime(); + var timestamp = currentTime(); assertConverts(timestamp, TimestampValue.of( ofTimeSecondsAndNanos(timestamp.getSeconds(), timestamp.getNanos()) )); @@ -143,6 +147,7 @@ void versionAsLongValue() { var number = 42; var version = Version.newBuilder() .setNumber(number) + .setTimestamp(currentTime()) .build(); assertConverts(version, LongValue.of(number)); } diff --git a/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java b/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java index 840ca154..c367148a 100644 --- a/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java +++ b/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java @@ -28,17 +28,18 @@ import com.google.cloud.trace.v2.stub.GrpcTraceServiceStub; import com.google.devtools.cloudtrace.v2.BatchWriteSpansRequest; -import io.spine.logging.Logging; +import io.spine.logging.WithLogging; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.util.concurrent.MoreExecutors.directExecutor; +import static java.lang.String.format; /** * An async implementation of the {@link TraceService}. * *

Logs when the request is executed successfully. */ -final class AsyncTraceService implements TraceService, Logging { +final class AsyncTraceService implements TraceService, WithLogging { private final GrpcTraceServiceStub client; @@ -49,9 +50,13 @@ final class AsyncTraceService implements TraceService, Logging { @Override public void writeSpans(BatchWriteSpansRequest request) { client.batchWriteSpansCallable() - .futureCall(request) - .addListener(() -> _debug().log("Submitted %d spans.", request.getSpansCount()), - directExecutor()); + .futureCall(request) + .addListener(() -> logSpans(request), + directExecutor()); + } + + private void logSpans(BatchWriteSpansRequest request) { + logger().atDebug().log(() -> format("Submitted %d spans.", request.getSpansCount())); } @Override diff --git a/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/SpanAttribute.java b/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/SpanAttribute.java index a1f5a23e..29f4ad80 100644 --- a/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/SpanAttribute.java +++ b/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/SpanAttribute.java @@ -27,8 +27,8 @@ package io.spine.server.trace.stackdriver; import com.google.devtools.cloudtrace.v2.AttributeValue; -import io.spine.json.Json; import io.spine.string.Stringifiers; +import io.spine.type.Json; import static io.spine.protobuf.AnyPacker.unpack; diff --git a/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastoreStorageFactory.java b/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastoreStorageFactory.java index 27b345de..289f7140 100644 --- a/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastoreStorageFactory.java +++ b/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastoreStorageFactory.java @@ -28,7 +28,6 @@ import com.google.cloud.datastore.Datastore; import com.google.common.collect.ImmutableSet; -import com.google.common.flogger.FluentLogger; import io.spine.annotation.Internal; import io.spine.server.storage.datastore.DatastoreStorageFactory; import io.spine.server.storage.datastore.DatastoreWrapper; @@ -37,6 +36,7 @@ import java.util.HashSet; import static com.google.common.base.Preconditions.checkNotNull; +import static java.lang.String.format; /** * A test implementation of the {@link DatastoreStorageFactory}. @@ -46,8 +46,6 @@ */ public class TestDatastoreStorageFactory extends DatastoreStorageFactory { - private static final FluentLogger logger = FluentLogger.forEnclosingClass(); - private final Collection allCreatedWrappers = new HashSet<>(); protected TestDatastoreStorageFactory(Datastore datastore) { @@ -131,9 +129,9 @@ public void clear() { try { datastore.dropAllTables(); } catch (Throwable e) { - logger.atSevere() - .withCause(e) - .log("Unable to drop tables in Datastore `%s`.", datastore); + logger().atError() + .withCause(e) + .log(() -> format("Unable to drop tables in Datastore `%s`.", datastore)); throw new IllegalStateException(e); } } diff --git a/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastoreWrapper.java b/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastoreWrapper.java index b47ad807..c658a011 100644 --- a/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastoreWrapper.java +++ b/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastoreWrapper.java @@ -163,10 +163,12 @@ private void dropTableConsistently(Kind table) { private void waitForConsistency() { if (!waitForConsistency) { - _debug().log("Wait for consistency is not required."); + logger().atDebug() + .log(() -> "Waiting for consistency is not required."); return; } - _debug().log("Waiting for data consistency to establish."); + logger().atDebug() + .log(() -> "Waiting for data consistency to establish."); doWaitForConsistency(); } @@ -182,7 +184,8 @@ protected void doWaitForConsistency() { * Deletes all records from the datastore. */ public void dropAllTables() { - _debug().log("Dropping all tables..."); + logger().atDebug() + .log(() -> "Dropping all tables..."); for (var kind : kindsCache) { dropTable(kind); } diff --git a/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastores.java b/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastores.java index b481693d..c7d2b112 100644 --- a/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastores.java +++ b/testutil-gcloud/src/main/java/io/spine/testing/server/storage/datastore/TestDatastores.java @@ -32,7 +32,7 @@ import com.google.cloud.datastore.DatastoreOptions; import com.google.common.annotations.VisibleForTesting; import io.spine.io.Resource; -import io.spine.logging.Logging; +import io.spine.logging.WithLogging; import io.spine.server.storage.datastore.ProjectId; import java.io.IOException; @@ -46,7 +46,7 @@ /** * A factory of test {@link Datastore} instances. */ -public final class TestDatastores implements Logging { +public final class TestDatastores implements WithLogging { /** * The default port to which the local Datastore emulator is bound. From bc53f1ed6656a96f9f236ed559e87fd6ac47f39a Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Wed, 23 Aug 2023 17:35:04 +0100 Subject: [PATCH 13/25] Refine the build script style, taking `core-java` as an example. --- build.gradle.kts | 422 ++++++++++++++++++++++++----------------------- 1 file changed, 219 insertions(+), 203 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6cac4583..e67f29b5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,84 +24,72 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import io.spine.internal.dependency.ApacheHttp -import io.spine.internal.dependency.CommonsCodec -import io.spine.internal.dependency.ErrorProne -import io.spine.internal.dependency.GoogleApis -import io.spine.internal.dependency.Grpc -import io.spine.internal.dependency.JUnit -import io.spine.internal.dependency.PerfMark -import io.spine.internal.dependency.Spine -import io.spine.internal.gradle.javadoc.JavadocConfig -import io.spine.internal.gradle.applyStandard +@file:Suppress("RemoveRedundantQualifierName") + +import Build_gradle.Subproject +import io.spine.internal.dependency.* +import io.spine.internal.gradle.VersionWriter import io.spine.internal.gradle.checkstyle.CheckStyleConfig -import io.spine.internal.gradle.excludeProtobufLite -import io.spine.internal.gradle.forceVersions import io.spine.internal.gradle.github.pages.updateGitHubPages import io.spine.internal.gradle.javac.configureErrorProne import io.spine.internal.gradle.javac.configureJavac +import io.spine.internal.gradle.javadoc.JavadocConfig +import io.spine.internal.gradle.kotlin.applyJvmToolchain +import io.spine.internal.gradle.kotlin.setFreeCompilerArgs +import io.spine.internal.gradle.publish.IncrementGuard import io.spine.internal.gradle.publish.PublishingRepos import io.spine.internal.gradle.publish.spinePublishing import io.spine.internal.gradle.report.coverage.JacocoConfig import io.spine.internal.gradle.report.license.LicenseReporter import io.spine.internal.gradle.report.pom.PomGenerator +import io.spine.internal.gradle.standardToSpineSdk import io.spine.internal.gradle.testing.configureLogging import io.spine.internal.gradle.testing.registerTestTasks +import org.gradle.jvm.tasks.Jar import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -@Suppress("RemoveRedundantQualifierName") // Cannot use imported things here. buildscript { - io.spine.internal.gradle.doApplyStandard(repositories) + standardSpineSdkRepositories() - val execForkPlugin = io.spine.internal.dependency.ExecForkPlugin - repositories { - val repos = io.spine.internal.gradle.publish.PublishingRepos - repos.gitHub(execForkPlugin.repository) - } - - apply(from = "$rootDir/version.gradle.kts") - io.spine.internal.gradle.doForceVersions(configurations) - - @Suppress("LocalVariableName" /* For better readability. */) - val Kotlin = io.spine.internal.dependency.Kotlin - @Suppress("LocalVariableName" /* For better readability. */) - val Jackson = io.spine.internal.dependency.Jackson - val Spine = io.spine.internal.dependency.Spine.DefaultVersion - - configurations.all { - resolutionStrategy { - force( - Kotlin.stdLib, - Kotlin.stdLibCommon, - Jackson.databind, - Jackson.annotations, - Jackson.bom, - Jackson.core, - "io.spine:spine-base:${Spine.base}", - "io.spine.tools:spine-tool-base:${Spine.toolBase}", - "io.spine.tools:spine-plugin-base:${Spine.toolBase}", - "io.spine.validation:spine-validation-java-runtime:${Spine.validation}", - "io.spine:spine-time:${Spine.time}", + doForceVersions(configurations) + configurations { + all { + resolutionStrategy { + val spine = io.spine.internal.dependency.Spine + force( + spine.base, + spine.toolBase, + spine.server, + io.spine.internal.dependency.Spine.Logging.lib, + io.spine.internal.dependency.Spine.Logging.backend, + io.spine.internal.dependency.Spine.Logging.floggerApi, + io.spine.internal.dependency.Validation.runtime, ) + } } } dependencies { - classpath("io.spine.tools:spine-mc-java:${Spine.mcJava}") - classpath(execForkPlugin.classpath) + classpath(io.spine.internal.dependency.Spine.McJava.pluginLib) } } + plugins { `java-library` kotlin("jvm") idea + protobuf + errorprone + `gradle-doctor` +} - @Suppress("RemoveRedundantQualifierName") - id(io.spine.internal.dependency.ErrorProne.GradlePlugin.id) - id(io.spine.internal.dependency.Protobuf.GradlePlugin.id) +object BuildSettings { + const val JAVA_VERSION = 11 } +repositories.standardToSpineSdk() + spinePublishing { modules = setOf( "datastore", @@ -118,145 +106,113 @@ spinePublishing { } } -val spineBaseVersion: String by extra -val spineToolBaseVersion: String by extra -val validationVersion: String by extra - allprojects { - apply(from = "$rootDir/version.gradle.kts") - apply { - plugin("java-library") - plugin("kotlin") plugin("jacoco") plugin("idea") + plugin("project-report") } + apply(from = "$rootDir/version.gradle.kts") group = "io.spine.gcloud" version = extra["versionToPublish"]!! - - repositories.applyStandard() } subprojects { + repositories.standardToSpineSdk() + applyPlugins() + + val javaVersion = JavaLanguageVersion.of(BuildSettings.JAVA_VERSION) + setupJava(javaVersion) + setupKotlin(javaVersion) + + defineDependencies() + forceConfigurations() + + val generated = "$projectDir/generated" + applyGeneratedDirectories(generated) + setupTestTasks() + setupPublishing() + configureTaskDependencies() +} + + +JacocoConfig.applyTo(project) +PomGenerator.applyTo(project) +LicenseReporter.mergeAllReports(project) + +/** + * The alias for typed extensions functions related to subprojects. + */ +typealias Subproject = Project + +/** + * Applies plugins common to all modules to this subproject. + */ +fun Subproject.applyPlugins() { apply { + plugin("java-library") + plugin("jacoco") plugin("com.google.protobuf") plugin("net.ltgt.errorprone") - plugin("io.spine.mc-java") + plugin("kotlin") plugin("pmd") plugin("maven-publish") plugin("pmd-settings") + plugin("dokka-for-java") + plugin("io.spine.mc-java") } - val javaVersion = JavaVersion.VERSION_11 - - java { - sourceCompatibility = javaVersion - targetCompatibility = javaVersion - - tasks.withType().configureEach { - configureJavac() - configureErrorProne() - } - } - - kotlin { - explicitApi() - - tasks.withType().configureEach { - kotlinOptions { - jvmTarget = javaVersion.toString() - freeCompilerArgs = listOf("-Xskip-prerelease-check") - } - } - } + apply() + apply() LicenseReporter.generateReportIn(project) JavadocConfig.applyTo(project) CheckStyleConfig.applyTo(project) +} - // Required to fetch `androidx.annotation:annotation:1.1.0`, - // which is a transitive dependency of `com.google.cloud:google-cloud-datastore`. - repositories { - google() +/** + * Configures Java tasks in this project. + */ +fun Subproject.setupJava(javaVersion: JavaLanguageVersion) { + java { + toolchain.languageVersion.set(javaVersion) } - - val spine = Spine(this) - defineDependencies(spine) - forceConfigurations(spine) - - configurations { - forceVersions() - excludeProtobufLite() - all { - resolutionStrategy { - force( - ApacheHttp.core, - CommonsCodec.lib, - Grpc.api, - Grpc.auth, - Grpc.core, - Grpc.context, - Grpc.stub, - Grpc.protobuf, - Grpc.protobufLite, - PerfMark.api, - GoogleApis.AuthLibrary.credentials, - GoogleApis.commonProtos, - JUnit.runner, -// "io.spine:spine-base:$spineBaseVersion", -// "io.spine.validation:spine-validation-java-runtime:$validationVersion", -// "io.spine.tools:spine-tool-base:$spineToolBaseVersion", -// "io.spine.tools:spine-testlib:$spineBaseVersion" - ) - } + tasks { + withType().configureEach { + configureJavac() + configureErrorProne() } - } - - val spineCoreVersion: String by extra - dependencies { - ErrorProne.apply { - errorprone(core) + withType().configureEach { + duplicatesStrategy = DuplicatesStrategy.INCLUDE } - - implementation("io.spine:spine-server:$spineCoreVersion") - - testImplementation(JUnit.runner) - testImplementation("io.spine.tools:spine-testutil-server:$spineCoreVersion") - testImplementation( - group = "io.spine", - name = "spine-server", - version = spineCoreVersion, - classifier = "test" - ) } +} - val generatedRootDir = "$projectDir/generated" - val generatedJavaDir = "$generatedRootDir/main/java" - val generatedTestJavaDir = "$generatedRootDir/test/java" - val generatedGrpcDir = "$generatedRootDir/main/grpc" - val generatedTestGrpcDir = "$generatedRootDir/test/grpc" - val generatedSpineDir = "$generatedRootDir/main/spine" - val generatedTestSpineDir = "$generatedRootDir/test/spine" +/** + * Configures Kotlin tasks in this project. + */ +fun Subproject.setupKotlin(javaVersion: JavaLanguageVersion) { + kotlin { + applyJvmToolchain(javaVersion.asInt()) + explicitApi() - sourceSets { - main { - java.srcDirs(generatedJavaDir, generatedSpineDir) - resources.srcDir("$generatedRootDir/main/resources") - } - test { - java.srcDirs(generatedTestJavaDir, generatedTestSpineDir) - resources.srcDir("$generatedRootDir/test/resources") + tasks.withType().configureEach { + kotlinOptions.jvmTarget = javaVersion.toString() + setFreeCompilerArgs() } } +} +/** + * Configures test tasks in this project. + */ +fun Subproject.setupTestTasks() { tasks { registerTestTasks() - withType().configureEach { + test { + useJUnitPlatform { includeEngines("junit-jupiter") } configureLogging() - useJUnitPlatform { - includeEngines("junit-jupiter") - } } val copyCredentials by registering(Copy::class) { @@ -271,63 +227,97 @@ subprojects { dependsOn(copyCredentials) } } - - // Apply the same IDEA module configuration for each of sub-projects. - idea { - module { - generatedSourceDirs.addAll( - files( - generatedJavaDir, - generatedGrpcDir, - generatedSpineDir, - generatedTestJavaDir, - generatedTestGrpcDir, - generatedTestSpineDir - ) - ) - testSourceDirs.add(file(generatedTestJavaDir)) - - isDownloadJavadoc = true - isDownloadSources = true - } - } - - updateGitHubPages(spineBaseVersion) { - allowInternalJavadoc.set(true) - rootFolder.set(rootDir) - } - - project.tasks.named("publish") { - dependsOn("${project.path}:updateGitHubPages") - } } -/** - * The alias for typed extensions functions related to subprojects. - */ -typealias Subproject = Project - /** * Defines dependencies of this subproject. */ -fun Subproject.defineDependencies(spine: Spine) { +fun Subproject.defineDependencies() { dependencies { ErrorProne.apply { errorprone(core) } + implementation(Spine.server) + // Strangely, Gradle does not see `protoData` via DSL here, so we add using the string. - add("protoData", spine.validation.java) - implementation(spine.validation.runtime) + add("protoData", Validation.java) + implementation(Validation.runtime) testImplementation(JUnit.runner) - testImplementation(spine.testlib) + testImplementation(Spine.testlib) + + testImplementation(Spine.CoreJava.testUtilServer) + testImplementation(Spine.CoreJava.serverTests) + } +} + +/** + * Adds directories with the generated source code to source sets of the project and + * to IntelliJ IDEA module settings. + * + * @param generatedDir + * the name of the root directory with the generated code + */ +fun Subproject.applyGeneratedDirectories(generatedDir: String) { + val generatedMain = "$generatedDir/main" + val generatedJava = "$generatedMain/java" + val generatedKotlin = "$generatedMain/kotlin" + val generatedGrpc = "$generatedMain/grpc" + val generatedSpine = "$generatedMain/spine" + + val generatedTest = "$generatedDir/test" + val generatedTestJava = "$generatedTest/java" + val generatedTestKotlin = "$generatedTest/kotlin" + val generatedTestGrpc = "$generatedTest/grpc" + val generatedTestSpine = "$generatedTest/spine" + + sourceSets { + main { + java.srcDirs( + generatedJava, + generatedGrpc, + generatedSpine, + ) + kotlin.srcDirs( + generatedKotlin, + ) + } + test { + java.srcDirs( + generatedTestJava, + generatedTestGrpc, + generatedTestSpine, + ) + kotlin.srcDirs( + generatedTestKotlin, + ) + } + } + + idea { + module { + generatedSourceDirs.addAll(files( + generatedJava, + generatedKotlin, + generatedGrpc, + generatedSpine, + )) + testSources.from( + generatedTestJava, + generatedTestKotlin, + generatedTestGrpc, + generatedTestSpine, + ) + isDownloadJavadoc = true + isDownloadSources = true + } } } /** * Forces dependencies of this project. */ -fun Subproject.forceConfigurations(spine: Spine) { +fun Subproject.forceConfigurations() { configurations { forceVersions() excludeProtobufLite() @@ -342,26 +332,52 @@ fun Subproject.forceConfigurations(spine: Spine) { See `io.spine.tools.mc.java.gradle.plugins.JavaProtocConfigurationPlugin .configureProtocPlugins()` method which sets the version from resources. */ Grpc.ProtocPlugin.artifact, + Grpc.api, JUnit.runner, + Guava.lib, + + Spine.base, + Validation.runtime, + Spine.time, + Spine.Logging.lib, + Spine.Logging.backend, + Spine.Logging.floggerApi, + Spine.baseTypes, + Spine.change, + Spine.testlib, + Spine.toolBase, + Spine.pluginBase, - spine.base, - spine.validation.runtime, - spine.time, - spine.baseTypes, - spine.change, - spine.testlib, - spine.toolBase, - spine.pluginBase, - + Grpc.api, + Grpc.auth, Grpc.core, + Grpc.context, + Grpc.stub, Grpc.protobuf, - Grpc.stub + Grpc.protobufLite, + GoogleApis.AuthLibrary.credentials, + GoogleApis.commonProtos, + + ApacheHttp.core, + CommonsCodec.lib, + PerfMark.api ) } } } } -JacocoConfig.applyTo(project) -PomGenerator.applyTo(project) -LicenseReporter.mergeAllReports(project) +/** + * Configures publishing for this subproject. + */ +fun Subproject.setupPublishing() { + updateGitHubPages(project.version.toString()) { + allowInternalJavadoc.set(true) + rootFolder.set(rootDir) + } + + tasks.named("publish") { + dependsOn("${project.path}:updateGitHubPages") + } +} + From 0d0baef2c7ce99d11e5ab9bc14b335e1abe0419f Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Wed, 23 Aug 2023 17:35:17 +0100 Subject: [PATCH 14/25] Update the reference to `config`. --- config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config b/config index 5a9e4272..327bc212 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 5a9e4272cf45d4fc2d102bf2e95bfc6d30b27636 +Subproject commit 327bc212a335bf4badd560394364def291c0282e From 2373852cc3f70c620219fb41fc07107882679b35 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Wed, 23 Aug 2023 17:35:24 +0100 Subject: [PATCH 15/25] Update the license reports. --- license-report.md | 1916 +++++++++++++++++++++++++++++---------------- pom.xml | 135 +++- 2 files changed, 1358 insertions(+), 693 deletions(-) diff --git a/license-report.md b/license-report.md index 31b59140..7d979c09 100644 --- a/license-report.md +++ b/license-report.md @@ -1,13 +1,13 @@ -# Dependencies of `io.spine.gcloud:spine-datastore:2.0.0-SNAPSHOT.94` +# Dependencies of `io.spine.gcloud:spine-datastore:2.0.0-SNAPSHOT.149` ## Runtime -1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.13.0.**No license information found** -1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.13.0. +1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.2.**No license information found** +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.15.2. * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. * **Project URL:** [http://source.android.com/](http://source.android.com/) @@ -47,8 +47,8 @@ 1. **Group** : com.google.auth. **Name** : google-auth-library-oauth2-http. **Version** : 1.3.0. * **License:** [BSD New license](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9. - * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value) +1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. + * **Project URL:** [https://github.com/google/auto/tree/main/value](https://github.com/google/auto/tree/main/value) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.cloud. **Name** : google-cloud-core. **Version** : 2.3.3. @@ -74,25 +74,23 @@ * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. - * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) - * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. - * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) - * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) + * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1. * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.2-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.2-jre.**No license information found** 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -124,46 +122,46 @@ * **Project URL:** [https://www.google.com/](https://www.google.com/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.23.4. + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.15. +1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.16.0. * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : commons-logging. **Name** : commons-logging. **Version** : 1.2. * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -175,11 +173,11 @@ * **Project URL:** [https://github.com/census-instrumentation/opencensus-java](https://github.com/census-instrumentation/opencensus-java) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.23.0. +1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.26.0. * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -192,59 +190,87 @@ * **Project URL:** [http://hc.apache.org/httpcomponents-core-ga](http://hc.apache.org/httpcomponents-core-ga) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.5. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) - * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) - * **License:** [The MIT License](http://opensource.org/licenses/MIT) - -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.36.0. + * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](http://opensource.org/licenses/MIT) 1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. - * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 23.0.0. + * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.9.0. * **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.ow2.asm. **Name** : asm. **Version** : 9.2. + * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) + * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.threeten. **Name** : threetenbp. **Version** : 1.5.2. * **Project URL:** [https://www.threeten.org/threetenbp](https://www.threeten.org/threetenbp) * **License:** [BSD 3-clause](https://raw.githubusercontent.com/ThreeTen/threetenbp/master/LICENSE.txt) ## Compile, tests, and tooling +1. **Group** : aopalliance. **Name** : aopalliance. **Version** : 1.0. + * **Project URL:** [http://aopalliance.sourceforge.net](http://aopalliance.sourceforge.net) + * **License:** Public Domain + 1. **Group** : com.beust. **Name** : jcommander. **Version** : 1.48. * **Project URL:** [http://beust.com/jcommander](http://beust.com/jcommander) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.13.0.**No license information found** -1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.13.0. +1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.2.**No license information found** +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-annotations. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.15.2. * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-xml. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-dataformat-xml](https://github.com/FasterXML/jackson-dataformat-xml) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 2.8.8. +1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.woodstox. **Name** : woodstox-core. **Version** : 6.5.1. + * **Project URL:** [https://github.com/FasterXML/woodstox](https://github.com/FasterXML/woodstox) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 3.0.5. * **Project URL:** [https://github.com/ben-manes/caffeine](https://github.com/ben-manes/caffeine) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -290,16 +316,16 @@ 1. **Group** : com.google.auth. **Name** : google-auth-library-oauth2-http. **Version** : 1.3.0. * **License:** [BSD New license](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.1. - * **Project URL:** [https://github.com/google/auto/tree/master/common](https://github.com/google/auto/tree/master/common) +1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.2. + * **Project URL:** [https://github.com/google/auto/tree/main/common](https://github.com/google/auto/tree/main/common) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.0.1. - * **Project URL:** [https://github.com/google/auto/tree/master/service](https://github.com/google/auto/tree/master/service) +1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.1.1. + * **Project URL:** [https://github.com/google/auto/tree/main/service](https://github.com/google/auto/tree/main/service) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9. - * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value) +1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. + * **Project URL:** [https://github.com/google/auto/tree/main/value](https://github.com/google/auto/tree/main/value) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.cloud. **Name** : google-cloud-core. **Version** : 2.3.3. @@ -317,10 +343,6 @@ 1. **Group** : com.google.cloud.datastore. **Name** : datastore-v1-proto-client. **Version** : 2.2.1. * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.findbugs. **Name** : jFormatString. **Version** : 3.0.0. - * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) - * **License:** [GNU Lesser Public License](http://www.gnu.org/licenses/lgpl.html) - 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -329,21 +351,30 @@ * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.errorprone. **Name** : javac. **Version** : 9+181-r4173-1. + * **Project URL:** [https://github.com/google/error-prone-javac](https://github.com/google/error-prone-javac) + * **License:** [GNU General Public License, version 2, with the Classpath Exception](http://openjdk.java.net/legal/gplv2+ce.html) + 1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -352,19 +383,16 @@ * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.gradle. **Name** : osdetector-gradle-plugin. **Version** : 1.7.0. - * **Project URL:** [https://github.com/google/osdetector-gradle-plugin](https://github.com/google/osdetector-gradle-plugin) - * **License:** [Apache License 2.0](http://opensource.org/licenses/Apache-2.0) - 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1. * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.2-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.2-jre.**No license information found** +1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 32.1.2-jre. * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. @@ -390,6 +418,10 @@ 1. **Group** : com.google.http-client. **Name** : google-http-client-protobuf. **Version** : 1.40.1. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.inject. **Name** : guice. **Version** : 5.1.0. + * **Project URL:** [https://github.com/google/guice](https://github.com/google/guice) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : com.google.j2objc. **Name** : j2objc-annotations. **Version** : 1.3. * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -398,42 +430,42 @@ * **Project URL:** [https://www.google.com/](https://www.google.com/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-gradle-plugin. **Version** : 0.8.18. - * **Project URL:** [https://github.com/google/protobuf-gradle-plugin](https://github.com/google/protobuf-gradle-plugin) - * **License:** [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) - -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.23.4. + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.18.0. +1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.3. +1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.1. +1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.3.4. * **Project URL:** [https://checkstyle.org/](https://checkstyle.org/) * **License:** [LGPL-2.1+](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) +1. **Group** : com.soywiz.korlibs.korte. **Name** : korte-jvm. **Version** : 2.7.0. + * **Project URL:** [https://github.com/korlibs/korge-next](https://github.com/korlibs/korge-next) + * **License:** [MIT](https://raw.githubusercontent.com/korlibs/korge-next/master/korge/LICENSE.txt) + 1. **Group** : com.squareup. **Name** : javapoet. **Version** : 1.13.0. * **Project URL:** [http://github.com/square/javapoet/](http://github.com/square/javapoet/) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -442,22 +474,14 @@ * **Project URL:** [https://commons.apache.org/proper/commons-beanutils/](https://commons.apache.org/proper/commons-beanutils/) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.15. +1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.16.0. * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : commons-collections. **Name** : commons-collections. **Version** : 3.2.2. * **Project URL:** [http://commons.apache.org/collections/](http://commons.apache.org/collections/) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : commons-io. **Name** : commons-io. **Version** : 2.6. - * **Project URL:** [http://commons.apache.org/proper/commons-io/](http://commons.apache.org/proper/commons-io/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : commons-lang. **Name** : commons-lang. **Version** : 2.6. - * **Project URL:** [http://commons.apache.org/lang/](http://commons.apache.org/lang/) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : commons-logging. **Name** : commons-logging. **Version** : 1.2. * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -466,38 +490,61 @@ * **Project URL:** [http://picocli.info](http://picocli.info) * **License:** [The Apache Software License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.0. - * **Project URL:** [https://github.com/java-diff-utils/java-diff-utils](https://github.com/java-diff-utils/java-diff-utils) +1. **Group** : io.github.eisop. **Name** : dataflow-errorprone. **Version** : 3.34.0-eisop1. + * **Project URL:** [https://eisop.github.io/](https://eisop.github.io/) + * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) + +1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.12. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : protoc-gen-grpc-java. **Version** : 1.38.0. +1. **Group** : io.grpc. **Name** : protoc-gen-grpc-java. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.kotest. **Name** : kotest-assertions-api. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-api-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + 1. **Group** : io.opencensus. **Name** : opencensus-api. **Version** : 0.28.0. * **Project URL:** [https://github.com/census-instrumentation/opencensus-java](https://github.com/census-instrumentation/opencensus-java) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -506,48 +553,56 @@ * **Project URL:** [https://github.com/census-instrumentation/opencensus-java](https://github.com/census-instrumentation/opencensus-java) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.23.0. +1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.26.0. * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-codegen-java. **Version** : 0.9.6.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-fat-cli. **Version** : 0.9.11.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-protoc. **Version** : 0.9.11.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-configuration. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-context. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-model. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) +1. **Group** : javax.inject. **Name** : javax.inject. **Version** : 1. + * **Project URL:** [http://code.google.com/p/atinject/](http://code.google.com/p/atinject/) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : junit. **Name** : junit. **Version** : 4.13.1. * **Project URL:** [http://junit.org](http://junit.org) * **License:** [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) -1. **Group** : kr.motd.maven. **Name** : os-maven-plugin. **Version** : 1.7.0. - * **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** : net.java.dev.jna. **Name** : jna. **Version** : 5.6.0. * **Project URL:** [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna) * **License:** [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [LGPL, version 2.1](http://www.gnu.org/licenses/licenses.html) -1. **Group** : net.ltgt.gradle. **Name** : gradle-errorprone-plugin. **Version** : 2.0.2.**No license information found** -1. **Group** : net.sf.saxon. **Name** : Saxon-HE. **Version** : 10.6. +1. **Group** : net.ltgt.gradle. **Name** : gradle-errorprone-plugin. **Version** : 3.1.0.**No license information found** +1. **Group** : net.sf.saxon. **Name** : Saxon-HE. **Version** : 11.4. * **Project URL:** [http://www.saxonica.com/](http://www.saxonica.com/) * **License:** [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/2.0/) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.44.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.55.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.44.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.55.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) 1. **Group** : net.sourceforge.saxon. **Name** : saxon. **Version** : 9.1.0.8. * **Project URL:** [http://saxon.sourceforge.net/](http://saxon.sourceforge.net/) * **License:** [Mozilla Public License Version 1.0](http://www.mozilla.org/MPL/MPL-1.0.txt) -1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.7.2. - * **Project URL:** [http://www.antlr.org](http://www.antlr.org) - * **License:** [The BSD License](http://www.antlr.org/license.html) +1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.11.1. + * **Project URL:** [https://www.antlr.org/](https://www.antlr.org/) + * **License:** [BSD-3-Clause](https://www.antlr.org/license.html) -1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.9.3. +1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.7.2. * **Project URL:** [http://www.antlr.org](http://www.antlr.org) * **License:** [The BSD License](http://www.antlr.org/license.html) @@ -563,43 +618,59 @@ * **Project URL:** [http://hc.apache.org/httpcomponents-core-ga](http://hc.apache.org/httpcomponents-core-ga) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.httpcomponents.client5. **Name** : httpclient5. **Version** : 5.1.3. + * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.apache.httpcomponents.core5. **Name** : httpcore5. **Version** : 5.1.3. + * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.apache.httpcomponents.core5. **Name** : httpcore5-h2. **Version** : 5.1.3. + * **License:** [Apache License, Version 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) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.5. +1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.36.0. + * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : dataflow-errorprone. **Version** : 3.15.0. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) - * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) - 1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.eclipse.jgit. **Name** : org.eclipse.jgit. **Version** : 4.4.1.201607150455-r. - * **License:** Eclipse Distribution License (New BSD License) +1. **Group** : org.codehaus.woodstox. **Name** : stax2-api. **Version** : 4.2.1. + * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The BSD License](http://www.opensource.org/licenses/bsd-license.php) + +1. **Group** : org.freemarker. **Name** : freemarker. **Version** : 2.3.31. + * **Project URL:** [https://freemarker.apache.org/](https://freemarker.apache.org/) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.hamcrest. **Name** : hamcrest. **Version** : 2.2. + * **Project URL:** [http://hamcrest.org/JavaHamcrest/](http://hamcrest.org/JavaHamcrest/) + * **License:** [BSD License 3](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 1.3. - * **License:** [New BSD License](http://www.opensource.org/licenses/bsd-license.php) +1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 2.2. + * **Project URL:** [http://hamcrest.org/JavaHamcrest/](http://hamcrest.org/JavaHamcrest/) + * **License:** [BSD License 3](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) 1. **Group** : org.javassist. **Name** : javassist. **Version** : 3.28.0-GA. @@ -608,119 +679,183 @@ * **License:** [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) * **License:** [MPL 1.1](http://www.mozilla.org/MPL/MPL-1.1.html) -1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. - * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) +1. **Group** : org.jboss.forge.roaster. **Name** : roaster-api. **Version** : 2.28.0.Final. + * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html) + * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt) + +1. **Group** : org.jboss.forge.roaster. **Name** : roaster-jdt. **Version** : 2.28.0.Final. + * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html) + * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt) + +1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 23.0.0. + * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains. **Name** : markdown. **Version** : 0.3.1.**No license information found** +1. **Group** : org.jetbrains. **Name** : markdown-jvm. **Version** : 0.3.1. + * **Project URL:** [https://github.com/JetBrains/markdown](https://github.com/JetBrains/markdown) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20181211. +1. **Group** : org.jetbrains.dokka. **Name** : dokka-analysis. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : dokka-base. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : dokka-core. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : javadoc-plugin. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-analysis-compiler. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-analysis-intellij. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-as-java-plugin. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20200330. * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 1.8.22. * **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-daemon-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 1.8.22. * **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-klib-commonizer-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 1.8.22. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.9.0. * **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-script-runtime. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 1.8.22. * **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-scripting-common. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 1.8.22. * **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-scripting-compiler-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 1.8.22. * **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-scripting-compiler-impl-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 1.8.22. * **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-scripting-jvm. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 1.8.22. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.9.0. * **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.junit. **Name** : junit-bom. **Version** : 5.8.2.**No license information found** -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.8.2. +1. **Group** : org.jetbrains.kotlinx. **Name** : atomicfu. **Version** : 0.20.2. + * **Project URL:** [https://github.com/Kotlin/kotlinx.atomicfu](https://github.com/Kotlin/kotlinx.atomicfu) + * **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-bom. **Version** : 1.6.3.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.0.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.6.3.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.0.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.6.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.7.0. + * **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.7.0. + * **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-html-jvm. **Version** : 0.7.5. + * **Project URL:** [https://github.com/Kotlin/kotlinx.html](https://github.com/Kotlin/kotlinx.html) + * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jsoup. **Name** : jsoup. **Version** : 1.15.3. + * **Project URL:** [https://jsoup.org/](https://jsoup.org/) + * **License:** [The MIT License](https://jsoup.org/license) + +1. **Group** : org.junit. **Name** : junit-bom. **Version** : 5.10.0.**No license information found** +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.8.2. +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.8.2. +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.8.2. +1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.8.2. +1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.2.0. +1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.3.0. * **Project URL:** [https://github.com/ota4j-team/opentest4j](https://github.com/ota4j-team/opentest4j) - * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.1. - * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) - * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 2.1.2. - * **Project URL:** [http://pcollections.org](http://pcollections.org) - * **License:** [The MIT License](http://www.opensource.org/licenses/mit-license.php) +1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 3.1.4. + * **Project URL:** [https://github.com/hrldcpr/pcollections](https://github.com/hrldcpr/pcollections) + * **License:** [The MIT License](https://opensource.org/licenses/mit-license.php) 1. **Group** : org.reflections. **Name** : reflections. **Version** : 0.10.2. * **Project URL:** [http://github.com/ronmamo/reflections](http://github.com/ronmamo/reflections) @@ -731,15 +866,19 @@ * **Project URL:** [https://www.threeten.org/threetenbp](https://www.threeten.org/threetenbp) * **License:** [BSD 3-clause](https://raw.githubusercontent.com/ThreeTen/threetenbp/master/LICENSE.txt) +1. **Group** : org.xmlresolver. **Name** : xmlresolver. **Version** : 4.4.3. + * **Project URL:** [https://github.com/xmlresolver/xmlresolver](https://github.com/xmlresolver/xmlresolver) + * **License:** [Apache License version 2.0](https://www.apache.org/licenses/LICENSE-2.0) + The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 11 14:29:57 EEST 2022** 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). +This report was generated on **Wed Aug 23 17:14:45 WEST 2023** 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.gcloud:spine-pubsub:2.0.0-SNAPSHOT.94` +# Dependencies of `io.spine.gcloud:spine-pubsub:2.0.0-SNAPSHOT.149` ## Runtime 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. @@ -758,8 +897,8 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/googleapis/java-iam/proto-google-common-protos](https://github.com/googleapis/java-iam/proto-google-common-protos) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9. - * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value) +1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. + * **Project URL:** [https://github.com/google/auto/tree/main/value](https://github.com/google/auto/tree/main/value) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -770,25 +909,23 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. - * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) - * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. - * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) - * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) + * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1. * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.2-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.2-jre.**No license information found** 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -796,93 +933,127 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.23.4. + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.23.0. +1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.26.0. * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) -1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.5. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) - * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) - * **License:** [The MIT License](http://opensource.org/licenses/MIT) - -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.36.0. + * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](http://opensource.org/licenses/MIT) 1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. - * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 23.0.0. + * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.9.0. * **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.ow2.asm. **Name** : asm. **Version** : 9.2. + * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) + * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + ## Compile, tests, and tooling +1. **Group** : aopalliance. **Name** : aopalliance. **Version** : 1.0. + * **Project URL:** [http://aopalliance.sourceforge.net](http://aopalliance.sourceforge.net) + * **License:** Public Domain + 1. **Group** : com.beust. **Name** : jcommander. **Version** : 1.48. * **Project URL:** [http://beust.com/jcommander](http://beust.com/jcommander) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 2.8.8. +1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.2.**No license information found** +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-annotations. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-xml. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-dataformat-xml](https://github.com/FasterXML/jackson-dataformat-xml) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.woodstox. **Name** : woodstox-core. **Version** : 6.5.1. + * **Project URL:** [https://github.com/FasterXML/woodstox](https://github.com/FasterXML/woodstox) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 3.0.5. * **Project URL:** [https://github.com/ben-manes/caffeine](https://github.com/ben-manes/caffeine) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -906,22 +1077,18 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/googleapis/java-iam/proto-google-common-protos](https://github.com/googleapis/java-iam/proto-google-common-protos) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.1. - * **Project URL:** [https://github.com/google/auto/tree/master/common](https://github.com/google/auto/tree/master/common) +1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.2. + * **Project URL:** [https://github.com/google/auto/tree/main/common](https://github.com/google/auto/tree/main/common) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.0.1. - * **Project URL:** [https://github.com/google/auto/tree/master/service](https://github.com/google/auto/tree/master/service) +1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.1.1. + * **Project URL:** [https://github.com/google/auto/tree/main/service](https://github.com/google/auto/tree/main/service) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9. - * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value) +1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. + * **Project URL:** [https://github.com/google/auto/tree/main/value](https://github.com/google/auto/tree/main/value) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.findbugs. **Name** : jFormatString. **Version** : 3.0.0. - * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) - * **License:** [GNU Lesser Public License](http://www.gnu.org/licenses/lgpl.html) - 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -930,21 +1097,30 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.errorprone. **Name** : javac. **Version** : 9+181-r4173-1. + * **Project URL:** [https://github.com/google/error-prone-javac](https://github.com/google/error-prone-javac) + * **License:** [GNU General Public License, version 2, with the Classpath Exception](http://openjdk.java.net/legal/gplv2+ce.html) + 1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -953,64 +1129,65 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.gradle. **Name** : osdetector-gradle-plugin. **Version** : 1.7.0. - * **Project URL:** [https://github.com/google/osdetector-gradle-plugin](https://github.com/google/osdetector-gradle-plugin) - * **License:** [Apache License 2.0](http://opensource.org/licenses/Apache-2.0) - 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1. * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.2-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.2-jre.**No license information found** +1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 32.1.2-jre. * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.inject. **Name** : guice. **Version** : 5.1.0. + * **Project URL:** [https://github.com/google/guice](https://github.com/google/guice) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : com.google.j2objc. **Name** : j2objc-annotations. **Version** : 1.3. * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-gradle-plugin. **Version** : 0.8.18. - * **Project URL:** [https://github.com/google/protobuf-gradle-plugin](https://github.com/google/protobuf-gradle-plugin) - * **License:** [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) - -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.23.4. + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.18.0. +1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.3. +1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.1. +1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.3.4. * **Project URL:** [https://checkstyle.org/](https://checkstyle.org/) * **License:** [LGPL-2.1+](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) +1. **Group** : com.soywiz.korlibs.korte. **Name** : korte-jvm. **Version** : 2.7.0. + * **Project URL:** [https://github.com/korlibs/korge-next](https://github.com/korlibs/korge-next) + * **License:** [MIT](https://raw.githubusercontent.com/korlibs/korge-next/master/korge/LICENSE.txt) + 1. **Group** : com.squareup. **Name** : javapoet. **Version** : 1.13.0. * **Project URL:** [http://github.com/square/javapoet/](http://github.com/square/javapoet/) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1019,96 +1196,123 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://commons.apache.org/proper/commons-beanutils/](https://commons.apache.org/proper/commons-beanutils/) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.16.0. + * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : commons-collections. **Name** : commons-collections. **Version** : 3.2.2. * **Project URL:** [http://commons.apache.org/collections/](http://commons.apache.org/collections/) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : commons-io. **Name** : commons-io. **Version** : 2.6. - * **Project URL:** [http://commons.apache.org/proper/commons-io/](http://commons.apache.org/proper/commons-io/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : commons-lang. **Name** : commons-lang. **Version** : 2.6. - * **Project URL:** [http://commons.apache.org/lang/](http://commons.apache.org/lang/) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : info.picocli. **Name** : picocli. **Version** : 4.6.3. * **Project URL:** [http://picocli.info](http://picocli.info) * **License:** [The Apache Software License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.0. - * **Project URL:** [https://github.com/java-diff-utils/java-diff-utils](https://github.com/java-diff-utils/java-diff-utils) +1. **Group** : io.github.eisop. **Name** : dataflow-errorprone. **Version** : 3.34.0-eisop1. + * **Project URL:** [https://eisop.github.io/](https://eisop.github.io/) + * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) + +1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.12. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : protoc-gen-grpc-java. **Version** : 1.38.0. +1. **Group** : io.grpc. **Name** : protoc-gen-grpc-java. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.23.0. +1. **Group** : io.kotest. **Name** : kotest-assertions-api. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-api-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.26.0. * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-codegen-java. **Version** : 0.9.6.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-fat-cli. **Version** : 0.9.11.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-protoc. **Version** : 0.9.11.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-configuration. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-context. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-model. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) +1. **Group** : javax.inject. **Name** : javax.inject. **Version** : 1. + * **Project URL:** [http://code.google.com/p/atinject/](http://code.google.com/p/atinject/) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : junit. **Name** : junit. **Version** : 4.13.1. * **Project URL:** [http://junit.org](http://junit.org) * **License:** [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) -1. **Group** : kr.motd.maven. **Name** : os-maven-plugin. **Version** : 1.7.0. - * **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** : net.java.dev.jna. **Name** : jna. **Version** : 5.6.0. * **Project URL:** [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna) * **License:** [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [LGPL, version 2.1](http://www.gnu.org/licenses/licenses.html) -1. **Group** : net.ltgt.gradle. **Name** : gradle-errorprone-plugin. **Version** : 2.0.2.**No license information found** -1. **Group** : net.sf.saxon. **Name** : Saxon-HE. **Version** : 10.6. +1. **Group** : net.ltgt.gradle. **Name** : gradle-errorprone-plugin. **Version** : 3.1.0.**No license information found** +1. **Group** : net.sf.saxon. **Name** : Saxon-HE. **Version** : 11.4. * **Project URL:** [http://www.saxonica.com/](http://www.saxonica.com/) * **License:** [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/2.0/) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.44.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.55.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.44.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.55.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) 1. **Group** : net.sourceforge.saxon. **Name** : saxon. **Version** : 9.1.0.8. * **Project URL:** [http://saxon.sourceforge.net/](http://saxon.sourceforge.net/) * **License:** [Mozilla Public License Version 1.0](http://www.mozilla.org/MPL/MPL-1.0.txt) -1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.7.2. - * **Project URL:** [http://www.antlr.org](http://www.antlr.org) - * **License:** [The BSD License](http://www.antlr.org/license.html) +1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.11.1. + * **Project URL:** [https://www.antlr.org/](https://www.antlr.org/) + * **License:** [BSD-3-Clause](https://www.antlr.org/license.html) -1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.9.3. +1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.7.2. * **Project URL:** [http://www.antlr.org](http://www.antlr.org) * **License:** [The BSD License](http://www.antlr.org/license.html) @@ -1116,43 +1320,59 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [http://commons.apache.org/proper/commons-lang/](http://commons.apache.org/proper/commons-lang/) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.httpcomponents.client5. **Name** : httpclient5. **Version** : 5.1.3. + * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.apache.httpcomponents.core5. **Name** : httpcore5. **Version** : 5.1.3. + * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.apache.httpcomponents.core5. **Name** : httpcore5-h2. **Version** : 5.1.3. + * **License:** [Apache License, Version 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) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.5. +1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.36.0. + * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : dataflow-errorprone. **Version** : 3.15.0. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) - * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) - 1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.eclipse.jgit. **Name** : org.eclipse.jgit. **Version** : 4.4.1.201607150455-r. - * **License:** Eclipse Distribution License (New BSD License) +1. **Group** : org.codehaus.woodstox. **Name** : stax2-api. **Version** : 4.2.1. + * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The BSD License](http://www.opensource.org/licenses/bsd-license.php) + +1. **Group** : org.freemarker. **Name** : freemarker. **Version** : 2.3.31. + * **Project URL:** [https://freemarker.apache.org/](https://freemarker.apache.org/) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.hamcrest. **Name** : hamcrest. **Version** : 2.2. + * **Project URL:** [http://hamcrest.org/JavaHamcrest/](http://hamcrest.org/JavaHamcrest/) + * **License:** [BSD License 3](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 1.3. - * **License:** [New BSD License](http://www.opensource.org/licenses/bsd-license.php) +1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 2.2. + * **Project URL:** [http://hamcrest.org/JavaHamcrest/](http://hamcrest.org/JavaHamcrest/) + * **License:** [BSD License 3](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) 1. **Group** : org.javassist. **Name** : javassist. **Version** : 3.28.0-GA. @@ -1161,134 +1381,202 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **License:** [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) * **License:** [MPL 1.1](http://www.mozilla.org/MPL/MPL-1.1.html) -1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. - * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) +1. **Group** : org.jboss.forge.roaster. **Name** : roaster-api. **Version** : 2.28.0.Final. + * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html) + * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt) + +1. **Group** : org.jboss.forge.roaster. **Name** : roaster-jdt. **Version** : 2.28.0.Final. + * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html) + * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt) + +1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 23.0.0. + * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains. **Name** : markdown. **Version** : 0.3.1.**No license information found** +1. **Group** : org.jetbrains. **Name** : markdown-jvm. **Version** : 0.3.1. + * **Project URL:** [https://github.com/JetBrains/markdown](https://github.com/JetBrains/markdown) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20181211. +1. **Group** : org.jetbrains.dokka. **Name** : dokka-analysis. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : dokka-base. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : dokka-core. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : javadoc-plugin. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-analysis-compiler. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-analysis-intellij. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-as-java-plugin. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20200330. * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 1.8.22. * **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-daemon-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 1.8.22. * **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-klib-commonizer-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 1.8.22. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.9.0. * **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-script-runtime. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 1.8.22. * **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-scripting-common. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 1.8.22. * **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-scripting-compiler-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 1.8.22. * **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-scripting-compiler-impl-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 1.8.22. * **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-scripting-jvm. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 1.8.22. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.9.0. * **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.junit. **Name** : junit-bom. **Version** : 5.8.2.**No license information found** -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.8.2. +1. **Group** : org.jetbrains.kotlinx. **Name** : atomicfu. **Version** : 0.20.2. + * **Project URL:** [https://github.com/Kotlin/kotlinx.atomicfu](https://github.com/Kotlin/kotlinx.atomicfu) + * **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-bom. **Version** : 1.6.3.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.0.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.6.3.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.0.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.6.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.7.0. + * **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.7.0. + * **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-html-jvm. **Version** : 0.7.5. + * **Project URL:** [https://github.com/Kotlin/kotlinx.html](https://github.com/Kotlin/kotlinx.html) + * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jsoup. **Name** : jsoup. **Version** : 1.15.3. + * **Project URL:** [https://jsoup.org/](https://jsoup.org/) + * **License:** [The MIT License](https://jsoup.org/license) + +1. **Group** : org.junit. **Name** : junit-bom. **Version** : 5.10.0.**No license information found** +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.8.2. +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.8.2. +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.8.2. +1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.8.2. +1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.2.0. +1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.3.0. * **Project URL:** [https://github.com/ota4j-team/opentest4j](https://github.com/ota4j-team/opentest4j) - * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.1. - * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) - * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 2.1.2. - * **Project URL:** [http://pcollections.org](http://pcollections.org) - * **License:** [The MIT License](http://www.opensource.org/licenses/mit-license.php) +1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 3.1.4. + * **Project URL:** [https://github.com/hrldcpr/pcollections](https://github.com/hrldcpr/pcollections) + * **License:** [The MIT License](https://opensource.org/licenses/mit-license.php) 1. **Group** : org.reflections. **Name** : reflections. **Version** : 0.10.2. * **Project URL:** [http://github.com/ronmamo/reflections](http://github.com/ronmamo/reflections) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [WTFPL](http://www.wtfpl.net/) +1. **Group** : org.xmlresolver. **Name** : xmlresolver. **Version** : 4.4.3. + * **Project URL:** [https://github.com/xmlresolver/xmlresolver](https://github.com/xmlresolver/xmlresolver) + * **License:** [Apache License version 2.0](https://www.apache.org/licenses/LICENSE-2.0) + The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 11 14:29:57 EEST 2022** 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). +This report was generated on **Wed Aug 23 17:14:46 WEST 2023** 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.gcloud:spine-stackdriver-trace:2.0.0-SNAPSHOT.94` +# Dependencies of `io.spine.gcloud:spine-stackdriver-trace:2.0.0-SNAPSHOT.149` ## Runtime 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. @@ -1325,8 +1613,8 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic 1. **Group** : com.google.auth. **Name** : google-auth-library-oauth2-http. **Version** : 1.3.0. * **License:** [BSD New license](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9. - * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value) +1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. + * **Project URL:** [https://github.com/google/auto/tree/main/value](https://github.com/google/auto/tree/main/value) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.cloud. **Name** : google-cloud-trace. **Version** : 2.1.0. @@ -1341,25 +1629,23 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. - * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) - * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. - * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) - * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) + * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1. * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.2-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.2-jre.**No license information found** 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1374,24 +1660,24 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.23.4. + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) 1. **Group** : com.google.re2j. **Name** : re2j. **Version** : 1.5. * **Project URL:** [http://github.com/google/re2j](http://github.com/google/re2j) * **License:** [Go License](https://golang.org/LICENSE) -1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.15. +1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.16.0. * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : commons-logging. **Name** : commons-logging. **Version** : 1.2. * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) @@ -1401,19 +1687,19 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-auth. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-auth. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1425,11 +1711,11 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1437,7 +1723,7 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1457,11 +1743,11 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/census-instrumentation/opencensus-proto](https://github.com/census-instrumentation/opencensus-proto) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.23.0. +1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.26.0. * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -1482,13 +1768,8 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [http://www.bouncycastle.org/java.html](http://www.bouncycastle.org/java.html) * **License:** [Bouncy Castle Licence](http://www.bouncycastle.org/licence.html) -1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.5. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) - * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) - * **License:** [The MIT License](http://opensource.org/licenses/MIT) - -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.36.0. + * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](http://opensource.org/licenses/MIT) 1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. @@ -1499,40 +1780,79 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://conscrypt.org/](https://conscrypt.org/) * **License:** [Apache 2](https://www.apache.org/licenses/LICENSE-2.0) -1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. - * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 23.0.0. + * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.9.0. * **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.ow2.asm. **Name** : asm. **Version** : 9.2. + * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) + * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.threeten. **Name** : threetenbp. **Version** : 1.5.2. * **Project URL:** [https://www.threeten.org/threetenbp](https://www.threeten.org/threetenbp) * **License:** [BSD 3-clause](https://raw.githubusercontent.com/ThreeTen/threetenbp/master/LICENSE.txt) ## Compile, tests, and tooling +1. **Group** : aopalliance. **Name** : aopalliance. **Version** : 1.0. + * **Project URL:** [http://aopalliance.sourceforge.net](http://aopalliance.sourceforge.net) + * **License:** Public Domain + 1. **Group** : com.beust. **Name** : jcommander. **Version** : 1.48. * **Project URL:** [http://beust.com/jcommander](http://beust.com/jcommander) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 2.8.8. +1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.2.**No license information found** +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-annotations. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-xml. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-dataformat-xml](https://github.com/FasterXML/jackson-dataformat-xml) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.woodstox. **Name** : woodstox-core. **Version** : 6.5.1. + * **Project URL:** [https://github.com/FasterXML/woodstox](https://github.com/FasterXML/woodstox) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 3.0.5. * **Project URL:** [https://github.com/ben-manes/caffeine](https://github.com/ben-manes/caffeine) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1574,26 +1894,22 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic 1. **Group** : com.google.auth. **Name** : google-auth-library-oauth2-http. **Version** : 1.3.0. * **License:** [BSD New license](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.1. - * **Project URL:** [https://github.com/google/auto/tree/master/common](https://github.com/google/auto/tree/master/common) +1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.2. + * **Project URL:** [https://github.com/google/auto/tree/main/common](https://github.com/google/auto/tree/main/common) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.0.1. - * **Project URL:** [https://github.com/google/auto/tree/master/service](https://github.com/google/auto/tree/master/service) +1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.1.1. + * **Project URL:** [https://github.com/google/auto/tree/main/service](https://github.com/google/auto/tree/main/service) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9. - * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value) +1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. + * **Project URL:** [https://github.com/google/auto/tree/main/value](https://github.com/google/auto/tree/main/value) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.cloud. **Name** : google-cloud-trace. **Version** : 2.1.0. * **Project URL:** [https://github.com/googleapis/java-trace](https://github.com/googleapis/java-trace) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.findbugs. **Name** : jFormatString. **Version** : 3.0.0. - * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) - * **License:** [GNU Lesser Public License](http://www.gnu.org/licenses/lgpl.html) - 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1602,21 +1918,30 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.errorprone. **Name** : javac. **Version** : 9+181-r4173-1. + * **Project URL:** [https://github.com/google/error-prone-javac](https://github.com/google/error-prone-javac) + * **License:** [GNU General Public License, version 2, with the Classpath Exception](http://openjdk.java.net/legal/gplv2+ce.html) + 1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1625,19 +1950,16 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.gradle. **Name** : osdetector-gradle-plugin. **Version** : 1.7.0. - * **Project URL:** [https://github.com/google/osdetector-gradle-plugin](https://github.com/google/osdetector-gradle-plugin) - * **License:** [Apache License 2.0](http://opensource.org/licenses/Apache-2.0) - 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1. * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.2-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.2-jre.**No license information found** +1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 32.1.2-jre. * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. @@ -1650,50 +1972,54 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic 1. **Group** : com.google.http-client. **Name** : google-http-client-gson. **Version** : 1.40.1. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.inject. **Name** : guice. **Version** : 5.1.0. + * **Project URL:** [https://github.com/google/guice](https://github.com/google/guice) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : com.google.j2objc. **Name** : j2objc-annotations. **Version** : 1.3. * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-gradle-plugin. **Version** : 0.8.18. - * **Project URL:** [https://github.com/google/protobuf-gradle-plugin](https://github.com/google/protobuf-gradle-plugin) - * **License:** [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) - -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.23.4. + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.18.0. +1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.re2j. **Name** : re2j. **Version** : 1.5. * **Project URL:** [http://github.com/google/re2j](http://github.com/google/re2j) * **License:** [Go License](https://golang.org/LICENSE) -1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.3. +1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.1. +1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.3.4. * **Project URL:** [https://checkstyle.org/](https://checkstyle.org/) * **License:** [LGPL-2.1+](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) +1. **Group** : com.soywiz.korlibs.korte. **Name** : korte-jvm. **Version** : 2.7.0. + * **Project URL:** [https://github.com/korlibs/korge-next](https://github.com/korlibs/korge-next) + * **License:** [MIT](https://raw.githubusercontent.com/korlibs/korge-next/master/korge/LICENSE.txt) + 1. **Group** : com.squareup. **Name** : javapoet. **Version** : 1.13.0. * **Project URL:** [http://github.com/square/javapoet/](http://github.com/square/javapoet/) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1702,22 +2028,14 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://commons.apache.org/proper/commons-beanutils/](https://commons.apache.org/proper/commons-beanutils/) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.15. +1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.16.0. * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : commons-collections. **Name** : commons-collections. **Version** : 3.2.2. * **Project URL:** [http://commons.apache.org/collections/](http://commons.apache.org/collections/) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : commons-io. **Name** : commons-io. **Version** : 2.6. - * **Project URL:** [http://commons.apache.org/proper/commons-io/](http://commons.apache.org/proper/commons-io/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : commons-lang. **Name** : commons-lang. **Version** : 2.6. - * **Project URL:** [http://commons.apache.org/lang/](http://commons.apache.org/lang/) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : commons-logging. **Name** : commons-logging. **Version** : 1.2. * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1726,27 +2044,30 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [http://picocli.info](http://picocli.info) * **License:** [The Apache Software License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.0. - * **Project URL:** [https://github.com/java-diff-utils/java-diff-utils](https://github.com/java-diff-utils/java-diff-utils) +1. **Group** : io.github.eisop. **Name** : dataflow-errorprone. **Version** : 3.34.0-eisop1. + * **Project URL:** [https://eisop.github.io/](https://eisop.github.io/) + * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) + +1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.12. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : io.grpc. **Name** : grpc-alts. **Version** : 1.42.1. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-auth. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-auth. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1758,11 +2079,11 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1770,7 +2091,7 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -1778,10 +2099,30 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : protoc-gen-grpc-java. **Version** : 1.38.0. +1. **Group** : io.grpc. **Name** : protoc-gen-grpc-java. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.kotest. **Name** : kotest-assertions-api. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-api-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + 1. **Group** : io.opencensus. **Name** : opencensus-api. **Version** : 0.28.0. * **Project URL:** [https://github.com/census-instrumentation/opencensus-java](https://github.com/census-instrumentation/opencensus-java) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1794,48 +2135,56 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/census-instrumentation/opencensus-proto](https://github.com/census-instrumentation/opencensus-proto) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.23.0. +1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.26.0. * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-codegen-java. **Version** : 0.9.6.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-fat-cli. **Version** : 0.9.11.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-protoc. **Version** : 0.9.11.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-configuration. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-context. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-model. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) +1. **Group** : javax.inject. **Name** : javax.inject. **Version** : 1. + * **Project URL:** [http://code.google.com/p/atinject/](http://code.google.com/p/atinject/) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : junit. **Name** : junit. **Version** : 4.13.1. * **Project URL:** [http://junit.org](http://junit.org) * **License:** [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) -1. **Group** : kr.motd.maven. **Name** : os-maven-plugin. **Version** : 1.7.0. - * **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** : net.java.dev.jna. **Name** : jna. **Version** : 5.6.0. * **Project URL:** [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna) * **License:** [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [LGPL, version 2.1](http://www.gnu.org/licenses/licenses.html) -1. **Group** : net.ltgt.gradle. **Name** : gradle-errorprone-plugin. **Version** : 2.0.2.**No license information found** -1. **Group** : net.sf.saxon. **Name** : Saxon-HE. **Version** : 10.6. +1. **Group** : net.ltgt.gradle. **Name** : gradle-errorprone-plugin. **Version** : 3.1.0.**No license information found** +1. **Group** : net.sf.saxon. **Name** : Saxon-HE. **Version** : 11.4. * **Project URL:** [http://www.saxonica.com/](http://www.saxonica.com/) * **License:** [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/2.0/) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.44.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.55.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.44.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.55.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) 1. **Group** : net.sourceforge.saxon. **Name** : saxon. **Version** : 9.1.0.8. * **Project URL:** [http://saxon.sourceforge.net/](http://saxon.sourceforge.net/) * **License:** [Mozilla Public License Version 1.0](http://www.mozilla.org/MPL/MPL-1.0.txt) -1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.7.2. - * **Project URL:** [http://www.antlr.org](http://www.antlr.org) - * **License:** [The BSD License](http://www.antlr.org/license.html) +1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.11.1. + * **Project URL:** [https://www.antlr.org/](https://www.antlr.org/) + * **License:** [BSD-3-Clause](https://www.antlr.org/license.html) -1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.9.3. +1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.7.2. * **Project URL:** [http://www.antlr.org](http://www.antlr.org) * **License:** [The BSD License](http://www.antlr.org/license.html) @@ -1851,6 +2200,15 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [http://hc.apache.org/httpcomponents-core-ga](http://hc.apache.org/httpcomponents-core-ga) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.httpcomponents.client5. **Name** : httpclient5. **Version** : 5.1.3. + * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.apache.httpcomponents.core5. **Name** : httpcore5. **Version** : 5.1.3. + * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.apache.httpcomponents.core5. **Name** : httpcore5-h2. **Version** : 5.1.3. + * **License:** [Apache License, Version 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) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1863,43 +2221,50 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [http://www.bouncycastle.org/java.html](http://www.bouncycastle.org/java.html) * **License:** [Bouncy Castle Licence](http://www.bouncycastle.org/licence.html) -1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.5. +1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.36.0. + * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : dataflow-errorprone. **Version** : 3.15.0. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) - * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) - 1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.codehaus.woodstox. **Name** : stax2-api. **Version** : 4.2.1. + * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The BSD License](http://www.opensource.org/licenses/bsd-license.php) + 1. **Group** : org.conscrypt. **Name** : conscrypt-openjdk-uber. **Version** : 2.5.1. * **Project URL:** [https://conscrypt.org/](https://conscrypt.org/) * **License:** [Apache 2](https://www.apache.org/licenses/LICENSE-2.0) -1. **Group** : org.eclipse.jgit. **Name** : org.eclipse.jgit. **Version** : 4.4.1.201607150455-r. - * **License:** Eclipse Distribution License (New BSD License) +1. **Group** : org.freemarker. **Name** : freemarker. **Version** : 2.3.31. + * **Project URL:** [https://freemarker.apache.org/](https://freemarker.apache.org/) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.hamcrest. **Name** : hamcrest. **Version** : 2.2. + * **Project URL:** [http://hamcrest.org/JavaHamcrest/](http://hamcrest.org/JavaHamcrest/) + * **License:** [BSD License 3](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 1.3. - * **License:** [New BSD License](http://www.opensource.org/licenses/bsd-license.php) +1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 2.2. + * **Project URL:** [http://hamcrest.org/JavaHamcrest/](http://hamcrest.org/JavaHamcrest/) + * **License:** [BSD License 3](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) 1. **Group** : org.javassist. **Name** : javassist. **Version** : 3.28.0-GA. @@ -1908,119 +2273,183 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **License:** [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) * **License:** [MPL 1.1](http://www.mozilla.org/MPL/MPL-1.1.html) -1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. - * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) +1. **Group** : org.jboss.forge.roaster. **Name** : roaster-api. **Version** : 2.28.0.Final. + * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html) + * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt) + +1. **Group** : org.jboss.forge.roaster. **Name** : roaster-jdt. **Version** : 2.28.0.Final. + * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html) + * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt) + +1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 23.0.0. + * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains. **Name** : markdown. **Version** : 0.3.1.**No license information found** +1. **Group** : org.jetbrains. **Name** : markdown-jvm. **Version** : 0.3.1. + * **Project URL:** [https://github.com/JetBrains/markdown](https://github.com/JetBrains/markdown) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : dokka-analysis. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20181211. +1. **Group** : org.jetbrains.dokka. **Name** : dokka-base. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : dokka-core. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : javadoc-plugin. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-analysis-compiler. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-analysis-intellij. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-as-java-plugin. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20200330. * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 1.8.22. * **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-daemon-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 1.8.22. * **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-klib-commonizer-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 1.8.22. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.9.0. * **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-script-runtime. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 1.8.22. * **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-scripting-common. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 1.8.22. * **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-scripting-compiler-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 1.8.22. * **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-scripting-compiler-impl-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 1.8.22. * **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-scripting-jvm. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 1.8.22. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.9.0. * **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.junit. **Name** : junit-bom. **Version** : 5.8.2.**No license information found** -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.8.2. +1. **Group** : org.jetbrains.kotlinx. **Name** : atomicfu. **Version** : 0.20.2. + * **Project URL:** [https://github.com/Kotlin/kotlinx.atomicfu](https://github.com/Kotlin/kotlinx.atomicfu) + * **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-bom. **Version** : 1.6.3.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.0.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.6.3.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.0.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.6.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.7.0. + * **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.7.0. + * **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-html-jvm. **Version** : 0.7.5. + * **Project URL:** [https://github.com/Kotlin/kotlinx.html](https://github.com/Kotlin/kotlinx.html) + * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jsoup. **Name** : jsoup. **Version** : 1.15.3. + * **Project URL:** [https://jsoup.org/](https://jsoup.org/) + * **License:** [The MIT License](https://jsoup.org/license) + +1. **Group** : org.junit. **Name** : junit-bom. **Version** : 5.10.0.**No license information found** +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.8.2. +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.8.2. +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.8.2. +1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.8.2. +1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.2.0. +1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.3.0. * **Project URL:** [https://github.com/ota4j-team/opentest4j](https://github.com/ota4j-team/opentest4j) - * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.1. - * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) - * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 2.1.2. - * **Project URL:** [http://pcollections.org](http://pcollections.org) - * **License:** [The MIT License](http://www.opensource.org/licenses/mit-license.php) +1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 3.1.4. + * **Project URL:** [https://github.com/hrldcpr/pcollections](https://github.com/hrldcpr/pcollections) + * **License:** [The MIT License](https://opensource.org/licenses/mit-license.php) 1. **Group** : org.reflections. **Name** : reflections. **Version** : 0.10.2. * **Project URL:** [http://github.com/ronmamo/reflections](http://github.com/ronmamo/reflections) @@ -2031,22 +2460,26 @@ This report was generated on **Mon Apr 11 14:29:57 EEST 2022** using [Gradle-Lic * **Project URL:** [https://www.threeten.org/threetenbp](https://www.threeten.org/threetenbp) * **License:** [BSD 3-clause](https://raw.githubusercontent.com/ThreeTen/threetenbp/master/LICENSE.txt) +1. **Group** : org.xmlresolver. **Name** : xmlresolver. **Version** : 4.4.3. + * **Project URL:** [https://github.com/xmlresolver/xmlresolver](https://github.com/xmlresolver/xmlresolver) + * **License:** [Apache License version 2.0](https://www.apache.org/licenses/LICENSE-2.0) + The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 11 14:29:58 EEST 2022** 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). +This report was generated on **Wed Aug 23 17:14:47 WEST 2023** 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.gcloud:spine-testutil-gcloud:2.0.0-SNAPSHOT.94` +# Dependencies of `io.spine.gcloud:spine-testutil-gcloud:2.0.0-SNAPSHOT.149` ## Runtime -1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.13.0.**No license information found** -1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.13.0. +1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.2.**No license information found** +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.15.2. * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. * **Project URL:** [http://source.android.com/](http://source.android.com/) @@ -2086,8 +2519,8 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic 1. **Group** : com.google.auth. **Name** : google-auth-library-oauth2-http. **Version** : 1.3.0. * **License:** [BSD New license](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9. - * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value) +1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. + * **Project URL:** [https://github.com/google/auto/tree/main/value](https://github.com/google/auto/tree/main/value) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.cloud. **Name** : google-cloud-core. **Version** : 2.3.3. @@ -2113,25 +2546,23 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. - * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) - * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4. - * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) - * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) + * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1. * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.2-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.2-jre.**No license information found** 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2163,46 +2594,46 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://www.google.com/](https://www.google.com/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.23.4. + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.15. +1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.16.0. * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : commons-logging. **Name** : commons-logging. **Version** : 1.2. * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -2214,11 +2645,11 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/census-instrumentation/opencensus-java](https://github.com/census-instrumentation/opencensus-java) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.23.0. +1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.26.0. * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) @@ -2231,59 +2662,87 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [http://hc.apache.org/httpcomponents-core-ga](http://hc.apache.org/httpcomponents-core-ga) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.5. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) - * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) - * **License:** [The MIT License](http://opensource.org/licenses/MIT) - -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.36.0. + * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](http://opensource.org/licenses/MIT) 1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. - * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 23.0.0. + * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.9.0. * **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.ow2.asm. **Name** : asm. **Version** : 9.2. + * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) + * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.threeten. **Name** : threetenbp. **Version** : 1.5.2. * **Project URL:** [https://www.threeten.org/threetenbp](https://www.threeten.org/threetenbp) * **License:** [BSD 3-clause](https://raw.githubusercontent.com/ThreeTen/threetenbp/master/LICENSE.txt) ## Compile, tests, and tooling +1. **Group** : aopalliance. **Name** : aopalliance. **Version** : 1.0. + * **Project URL:** [http://aopalliance.sourceforge.net](http://aopalliance.sourceforge.net) + * **License:** Public Domain + 1. **Group** : com.beust. **Name** : jcommander. **Version** : 1.48. * **Project URL:** [http://beust.com/jcommander](http://beust.com/jcommander) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.13.0.**No license information found** -1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.13.0. +1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.2.**No license information found** +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-annotations. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.15.2. * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-xml. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-dataformat-xml](https://github.com/FasterXML/jackson-dataformat-xml) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.15.2. + * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : com.fasterxml.woodstox. **Name** : woodstox-core. **Version** : 6.5.1. + * **Project URL:** [https://github.com/FasterXML/woodstox](https://github.com/FasterXML/woodstox) + * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 2.8.8. +1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 3.0.5. * **Project URL:** [https://github.com/ben-manes/caffeine](https://github.com/ben-manes/caffeine) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2329,16 +2788,16 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic 1. **Group** : com.google.auth. **Name** : google-auth-library-oauth2-http. **Version** : 1.3.0. * **License:** [BSD New license](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.1. - * **Project URL:** [https://github.com/google/auto/tree/master/common](https://github.com/google/auto/tree/master/common) +1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.2. + * **Project URL:** [https://github.com/google/auto/tree/main/common](https://github.com/google/auto/tree/main/common) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.0.1. - * **Project URL:** [https://github.com/google/auto/tree/master/service](https://github.com/google/auto/tree/master/service) +1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.1.1. + * **Project URL:** [https://github.com/google/auto/tree/main/service](https://github.com/google/auto/tree/main/service) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9. - * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value) +1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2. + * **Project URL:** [https://github.com/google/auto/tree/main/value](https://github.com/google/auto/tree/main/value) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.cloud. **Name** : google-cloud-core. **Version** : 2.3.3. @@ -2356,10 +2815,6 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic 1. **Group** : com.google.cloud.datastore. **Name** : datastore-v1-proto-client. **Version** : 2.2.1. * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.code.findbugs. **Name** : jFormatString. **Version** : 3.0.0. - * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) - * **License:** [GNU Lesser Public License](http://www.gnu.org/licenses/lgpl.html) - 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2368,21 +2823,30 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.10.0. +1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.20.0. + * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.errorprone. **Name** : javac. **Version** : 9+181-r4173-1. + * **Project URL:** [https://github.com/google/error-prone-javac](https://github.com/google/error-prone-javac) + * **License:** [GNU General Public License, version 2, with the Classpath Exception](http://openjdk.java.net/legal/gplv2+ce.html) + 1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4. * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2391,19 +2855,16 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger) * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.gradle. **Name** : osdetector-gradle-plugin. **Version** : 1.7.0. - * **Project URL:** [https://github.com/google/osdetector-gradle-plugin](https://github.com/google/osdetector-gradle-plugin) - * **License:** [Apache License 2.0](http://opensource.org/licenses/Apache-2.0) - 1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1. * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.2-jre. * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre. +1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.2-jre.**No license information found** +1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 32.1.2-jre. * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava. @@ -2429,6 +2890,10 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic 1. **Group** : com.google.http-client. **Name** : google-http-client-protobuf. **Version** : 1.40.1. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : com.google.inject. **Name** : guice. **Version** : 5.1.0. + * **Project URL:** [https://github.com/google/guice](https://github.com/google/guice) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : com.google.j2objc. **Name** : j2objc-annotations. **Version** : 1.3. * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2437,42 +2902,42 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://www.google.com/](https://www.google.com/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.protobuf. **Name** : protobuf-gradle-plugin. **Version** : 0.8.18. - * **Project URL:** [https://github.com/google/protobuf-gradle-plugin](https://github.com/google/protobuf-gradle-plugin) - * **License:** [BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) - -1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.19.4. +1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.19.4. - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) +1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.23.4. + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.18.0. +1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.23.4. * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) - * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) + * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.3. +1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.3. +1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.5. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.1. +1. **Group** : com.puppycrawl.tools. **Name** : checkstyle. **Version** : 10.3.4. * **Project URL:** [https://checkstyle.org/](https://checkstyle.org/) * **License:** [LGPL-2.1+](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) +1. **Group** : com.soywiz.korlibs.korte. **Name** : korte-jvm. **Version** : 2.7.0. + * **Project URL:** [https://github.com/korlibs/korge-next](https://github.com/korlibs/korge-next) + * **License:** [MIT](https://raw.githubusercontent.com/korlibs/korge-next/master/korge/LICENSE.txt) + 1. **Group** : com.squareup. **Name** : javapoet. **Version** : 1.13.0. * **Project URL:** [http://github.com/square/javapoet/](http://github.com/square/javapoet/) * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2481,22 +2946,14 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://commons.apache.org/proper/commons-beanutils/](https://commons.apache.org/proper/commons-beanutils/) * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.15. +1. **Group** : commons-codec. **Name** : commons-codec. **Version** : 1.16.0. * **Project URL:** [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : commons-collections. **Name** : commons-collections. **Version** : 3.2.2. * **Project URL:** [http://commons.apache.org/collections/](http://commons.apache.org/collections/) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : commons-io. **Name** : commons-io. **Version** : 2.6. - * **Project URL:** [http://commons.apache.org/proper/commons-io/](http://commons.apache.org/proper/commons-io/) - * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : commons-lang. **Name** : commons-lang. **Version** : 2.6. - * **Project URL:** [http://commons.apache.org/lang/](http://commons.apache.org/lang/) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : commons-logging. **Name** : commons-logging. **Version** : 1.2. * **Project URL:** [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2505,38 +2962,61 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [http://picocli.info](http://picocli.info) * **License:** [The Apache Software License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.0. - * **Project URL:** [https://github.com/java-diff-utils/java-diff-utils](https://github.com/java-diff-utils/java-diff-utils) +1. **Group** : io.github.eisop. **Name** : dataflow-errorprone. **Version** : 3.34.0-eisop1. + * **Project URL:** [https://eisop.github.io/](https://eisop.github.io/) + * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) + +1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.12. * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.45.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : protoc-gen-grpc-java. **Version** : 1.38.0. +1. **Group** : io.grpc. **Name** : protoc-gen-grpc-java. **Version** : 1.57.0. * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) +1. **Group** : io.kotest. **Name** : kotest-assertions-api. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-api-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 5.6.2.**No license information found** +1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 5.6.2. + * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest) + * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0) + 1. **Group** : io.opencensus. **Name** : opencensus-api. **Version** : 0.28.0. * **Project URL:** [https://github.com/census-instrumentation/opencensus-java](https://github.com/census-instrumentation/opencensus-java) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2545,48 +3025,56 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://github.com/census-instrumentation/opencensus-java](https://github.com/census-instrumentation/opencensus-java) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.23.0. +1. **Group** : io.perfmark. **Name** : perfmark-api. **Version** : 0.26.0. * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.spine.validation. **Name** : runtime. **Version** : 2.0.0-SNAPSHOT.12.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-codegen-java. **Version** : 0.9.6.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-fat-cli. **Version** : 0.9.11.**No license information found** +1. **Group** : io.spine.protodata. **Name** : protodata-protoc. **Version** : 0.9.11.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-configuration. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-context. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** +1. **Group** : io.spine.validation. **Name** : spine-validation-model. **Version** : 2.0.0-SNAPSHOT.99.**No license information found** 1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2. * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE) +1. **Group** : javax.inject. **Name** : javax.inject. **Version** : 1. + * **Project URL:** [http://code.google.com/p/atinject/](http://code.google.com/p/atinject/) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : junit. **Name** : junit. **Version** : 4.13.1. * **Project URL:** [http://junit.org](http://junit.org) * **License:** [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) -1. **Group** : kr.motd.maven. **Name** : os-maven-plugin. **Version** : 1.7.0. - * **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** : net.java.dev.jna. **Name** : jna. **Version** : 5.6.0. * **Project URL:** [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna) * **License:** [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [LGPL, version 2.1](http://www.gnu.org/licenses/licenses.html) -1. **Group** : net.ltgt.gradle. **Name** : gradle-errorprone-plugin. **Version** : 2.0.2.**No license information found** -1. **Group** : net.sf.saxon. **Name** : Saxon-HE. **Version** : 10.6. +1. **Group** : net.ltgt.gradle. **Name** : gradle-errorprone-plugin. **Version** : 3.1.0.**No license information found** +1. **Group** : net.sf.saxon. **Name** : Saxon-HE. **Version** : 11.4. * **Project URL:** [http://www.saxonica.com/](http://www.saxonica.com/) * **License:** [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/2.0/) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.44.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-core. **Version** : 6.55.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) -1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.44.0. +1. **Group** : net.sourceforge.pmd. **Name** : pmd-java. **Version** : 6.55.0. * **License:** [BSD-style](http://pmd.sourceforge.net/license.html) 1. **Group** : net.sourceforge.saxon. **Name** : saxon. **Version** : 9.1.0.8. * **Project URL:** [http://saxon.sourceforge.net/](http://saxon.sourceforge.net/) * **License:** [Mozilla Public License Version 1.0](http://www.mozilla.org/MPL/MPL-1.0.txt) -1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.7.2. - * **Project URL:** [http://www.antlr.org](http://www.antlr.org) - * **License:** [The BSD License](http://www.antlr.org/license.html) +1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.11.1. + * **Project URL:** [https://www.antlr.org/](https://www.antlr.org/) + * **License:** [BSD-3-Clause](https://www.antlr.org/license.html) -1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.9.3. +1. **Group** : org.antlr. **Name** : antlr4-runtime. **Version** : 4.7.2. * **Project URL:** [http://www.antlr.org](http://www.antlr.org) * **License:** [The BSD License](http://www.antlr.org/license.html) @@ -2602,43 +3090,59 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [http://hc.apache.org/httpcomponents-core-ga](http://hc.apache.org/httpcomponents-core-ga) * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.apache.httpcomponents.client5. **Name** : httpclient5. **Version** : 5.1.3. + * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.apache.httpcomponents.core5. **Name** : httpcore5. **Version** : 5.1.3. + * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.apache.httpcomponents.core5. **Name** : httpcore5-h2. **Version** : 5.1.3. + * **License:** [Apache License, Version 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) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.5. +1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.3. * **Project URL:** [https://checkerframework.org](https://checkerframework.org) * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.21.3. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) +1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.36.0. + * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](http://opensource.org/licenses/MIT) -1. **Group** : org.checkerframework. **Name** : dataflow-errorprone. **Version** : 3.15.0. - * **Project URL:** [https://checkerframework.org](https://checkerframework.org) - * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html) - 1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.21. * **License:** [MIT license](http://www.opensource.org/licenses/mit-license.php) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.eclipse.jgit. **Name** : org.eclipse.jgit. **Version** : 4.4.1.201607150455-r. - * **License:** Eclipse Distribution License (New BSD License) +1. **Group** : org.codehaus.woodstox. **Name** : stax2-api. **Version** : 4.2.1. + * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The BSD License](http://www.opensource.org/licenses/bsd-license.php) + +1. **Group** : org.freemarker. **Name** : freemarker. **Version** : 2.3.31. + * **Project URL:** [https://freemarker.apache.org/](https://freemarker.apache.org/) + * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.hamcrest. **Name** : hamcrest. **Version** : 2.2. + * **Project URL:** [http://hamcrest.org/JavaHamcrest/](http://hamcrest.org/JavaHamcrest/) + * **License:** [BSD License 3](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 1.3. - * **License:** [New BSD License](http://www.opensource.org/licenses/bsd-license.php) +1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 2.2. + * **Project URL:** [http://hamcrest.org/JavaHamcrest/](http://hamcrest.org/JavaHamcrest/) + * **License:** [BSD License 3](http://opensource.org/licenses/BSD-3-Clause) -1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) -1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.7. +1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.8. * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/) 1. **Group** : org.javassist. **Name** : javassist. **Version** : 3.28.0-GA. @@ -2647,119 +3151,183 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **License:** [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) * **License:** [MPL 1.1](http://www.mozilla.org/MPL/MPL-1.1.html) -1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. - * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) +1. **Group** : org.jboss.forge.roaster. **Name** : roaster-api. **Version** : 2.28.0.Final. + * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html) + * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt) + +1. **Group** : org.jboss.forge.roaster. **Name** : roaster-jdt. **Version** : 2.28.0.Final. + * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html) + * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt) + +1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 23.0.0. + * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains. **Name** : markdown. **Version** : 0.3.1.**No license information found** +1. **Group** : org.jetbrains. **Name** : markdown-jvm. **Version** : 0.3.1. + * **Project URL:** [https://github.com/JetBrains/markdown](https://github.com/JetBrains/markdown) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : dokka-analysis. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20181211. +1. **Group** : org.jetbrains.dokka. **Name** : dokka-base. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : dokka-core. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : javadoc-plugin. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-analysis-compiler. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-analysis-intellij. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.dokka. **Name** : kotlin-as-java-plugin. **Version** : 1.8.10. + * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka) + * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20200330. * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 1.8.22. * **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-daemon-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 1.8.22. * **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-klib-commonizer-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 1.8.22. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 1.9.0. * **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-script-runtime. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 1.8.22. * **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-scripting-common. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 1.8.22. * **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-scripting-compiler-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 1.8.22. * **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-scripting-compiler-impl-embeddable. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 1.8.22. * **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-scripting-jvm. **Version** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 1.8.22. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.0. * **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** : 1.6.10. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 1.9.0. * **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.junit. **Name** : junit-bom. **Version** : 5.8.2.**No license information found** -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.8.2. +1. **Group** : org.jetbrains.kotlinx. **Name** : atomicfu. **Version** : 0.20.2. + * **Project URL:** [https://github.com/Kotlin/kotlinx.atomicfu](https://github.com/Kotlin/kotlinx.atomicfu) + * **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-bom. **Version** : 1.6.3.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.7.0.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.6.3.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.7.0.**No license information found** +1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.6.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.7.0. + * **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.7.0. + * **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-html-jvm. **Version** : 0.7.5. + * **Project URL:** [https://github.com/Kotlin/kotlinx.html](https://github.com/Kotlin/kotlinx.html) + * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +1. **Group** : org.jsoup. **Name** : jsoup. **Version** : 1.15.3. + * **Project URL:** [https://jsoup.org/](https://jsoup.org/) + * **License:** [The MIT License](https://jsoup.org/license) + +1. **Group** : org.junit. **Name** : junit-bom. **Version** : 5.10.0.**No license information found** +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.8.2. +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.8.2. +1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.8.2. +1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.8.2. +1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.10.0. * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/) * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html) -1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.2.0. +1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.3.0. * **Project URL:** [https://github.com/ota4j-team/opentest4j](https://github.com/ota4j-team/opentest4j) - * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.1. - * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) - * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) - * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) 1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.1. +1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.2. * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/) * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 2.1.2. - * **Project URL:** [http://pcollections.org](http://pcollections.org) - * **License:** [The MIT License](http://www.opensource.org/licenses/mit-license.php) +1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 3.1.4. + * **Project URL:** [https://github.com/hrldcpr/pcollections](https://github.com/hrldcpr/pcollections) + * **License:** [The MIT License](https://opensource.org/licenses/mit-license.php) 1. **Group** : org.reflections. **Name** : reflections. **Version** : 0.10.2. * **Project URL:** [http://github.com/ronmamo/reflections](http://github.com/ronmamo/reflections) @@ -2770,7 +3338,11 @@ This report was generated on **Mon Apr 11 14:29:58 EEST 2022** using [Gradle-Lic * **Project URL:** [https://www.threeten.org/threetenbp](https://www.threeten.org/threetenbp) * **License:** [BSD 3-clause](https://raw.githubusercontent.com/ThreeTen/threetenbp/master/LICENSE.txt) +1. **Group** : org.xmlresolver. **Name** : xmlresolver. **Version** : 4.4.3. + * **Project URL:** [https://github.com/xmlresolver/xmlresolver](https://github.com/xmlresolver/xmlresolver) + * **License:** [Apache License version 2.0](https://www.apache.org/licenses/LICENSE-2.0) + The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 11 14:29:58 EEST 2022** 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 +This report was generated on **Wed Aug 23 17:14:49 WEST 2023** 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/pom.xml b/pom.xml index 50d5deae..f741f1cf 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.gcloud spine-gcloud-java -2.0.0-SNAPSHOT.94 +2.0.0-SNAPSHOT.149 2015 @@ -44,25 +44,37 @@ all modules and does not describe the project structure per-subproject. io.spine spine-base - 2.0.0-SNAPSHOT.88 + 2.0.0-SNAPSHOT.187 compile io.spine spine-base-types - 2.0.0-SNAPSHOT.88 + 2.0.0-SNAPSHOT.124 + compile + + + io.spine + spine-logging + 2.0.0-SNAPSHOT.206 compile io.spine spine-server - 2.0.0-SNAPSHOT.94 + 2.0.0-SNAPSHOT.155 + compile + + + io.spine.validation + spine-validation-java-runtime + 2.0.0-SNAPSHOT.99 compile org.jetbrains.kotlin kotlin-stdlib-jdk8 - 1.6.10 + 1.8.22 compile @@ -74,81 +86,162 @@ all modules and does not describe the project structure per-subproject. io.grpc grpc-auth - 1.45.0 + 1.57.0 + test + + + io.spine.tools + spine-testlib + 2.0.0-SNAPSHOT.184 test io.spine.tools spine-testutil-server - 2.0.0-SNAPSHOT.94 + 2.0.0-SNAPSHOT.155 test org.junit.jupiter junit-jupiter-engine - 5.8.2 + 5.10.0 test com.google.errorprone error_prone_core - 2.10.0 + 2.20.0 + + + com.google.errorprone + javac + 9+181-r4173-1 com.google.protobuf protoc - 3.18.0 + 3.23.4 com.puppycrawl.tools checkstyle - 10.1 + 10.3.4 io.grpc protoc-gen-grpc-java - 1.38.0 + 1.56.1 + + + io.spine.protodata + protodata-fat-cli + 0.9.11 + + + io.spine.protodata + protodata-protoc + 0.9.11 + + + io.spine.tools + spine-dokka-extensions + 2.0.0-SNAPSHOT.4 + + + io.spine.tools + spine-mc-java-annotation + 2.0.0-SNAPSHOT.168 + + + io.spine.tools + spine-mc-java-base + 2.0.0-SNAPSHOT.168 io.spine.tools spine-mc-java-checks - 2.0.0-SNAPSHOT.83 + 2.0.0-SNAPSHOT.168 provided io.spine.tools - spine-mc-java-protoc - 2.0.0-SNAPSHOT.83 + spine-mc-java-plugins + 2.0.0-SNAPSHOT.168 + + + io.spine.tools + spine-mc-java-rejection + 2.0.0-SNAPSHOT.168 + + + io.spine.tools + spine-tool-base + 2.0.0-SNAPSHOT.182 + + + io.spine.validation + spine-validation-java + 2.0.0-SNAPSHOT.99 + + + io.spine.validation + spine-validation-java-bundle + 2.0.0-SNAPSHOT.99 net.sourceforge.pmd pmd-java - 6.44.0 + 6.55.0 org.jacoco org.jacoco.agent - 0.8.7 + 0.8.8 org.jacoco org.jacoco.ant - 0.8.7 + 0.8.8 + + + org.jetbrains.dokka + dokka-analysis + 1.8.10 + + + org.jetbrains.dokka + dokka-base + 1.8.10 + + + org.jetbrains.dokka + dokka-core + 1.8.10 + + + org.jetbrains.dokka + javadoc-plugin + 1.8.10 + + + org.jetbrains.dokka + kotlin-as-java-plugin + 1.8.10 org.jetbrains.kotlin kotlin-compiler-embeddable - 1.6.10 + 1.8.22 org.jetbrains.kotlin kotlin-klib-commonizer-embeddable - 1.6.10 + 1.8.22 org.jetbrains.kotlin kotlin-scripting-compiler-embeddable - 1.6.10 + 1.8.22 From f282701ba3d4befed516b801c4533716dac42d24 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 11:49:31 +0100 Subject: [PATCH 16/25] Adjust Gradle properties according to `gradle-doctor`'s recommendations. --- gradle.properties | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 04beb707..b6ed5027 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,6 +25,7 @@ # # Allow more memory to builds, as long as bulk read-write operations are performed during testing. +# +# Also, Dokka plugin eats more memory than usual. Therefore, all builds should have enough. +org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -XX:+UseParallelGC -org.gradle.daemon=true -org.gradle.jvmargs=-Xmx2048m From 6c3529f4c08972a136d0b2e833271d36c58fe754 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 11:49:41 +0100 Subject: [PATCH 17/25] Leave only the version to publish. --- version.gradle.kts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/version.gradle.kts b/version.gradle.kts index 60613dc6..249031a2 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -24,12 +24,4 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -val spineBaseVersion: String by extra("2.0.0-SNAPSHOT.150") -val spineBaseTypesVersion: String by extra("2.0.0-SNAPSHOT.113") -val spineToolBaseVersion: String by extra("2.0.0-SNAPSHOT.156") -val spineTimeVersion: String by extra("2.0.0-SNAPSHOT.121") -val spineCoreVersion: String by extra("2.0.0-SNAPSHOT.149") -val mcJavaVersion: String by extra("2.0.0-SNAPSHOT.132") -val validationVersion: String by extra("2.0.0-SNAPSHOT.80") - -val versionToPublish: String by extra("2.0.0-SNAPSHOT.149") +val versionToPublish: String by extra("2.0.0-SNAPSHOT.155") From 1a21002994727bdb699611fda338c54315c2ca68 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 11:49:49 +0100 Subject: [PATCH 18/25] Update the report files. --- license-report.md | 16 ++++++++-------- pom.xml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/license-report.md b/license-report.md index 7d979c09..c8e3a132 100644 --- a/license-report.md +++ b/license-report.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.gcloud:spine-datastore:2.0.0-SNAPSHOT.149` +# Dependencies of `io.spine.gcloud:spine-datastore:2.0.0-SNAPSHOT.155` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.2.**No license information found** @@ -873,12 +873,12 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Aug 23 17:14:45 WEST 2023** 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). +This report was generated on **Thu Aug 24 11:27:04 WEST 2023** 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.gcloud:spine-pubsub:2.0.0-SNAPSHOT.149` +# Dependencies of `io.spine.gcloud:spine-pubsub:2.0.0-SNAPSHOT.155` ## Runtime 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. @@ -1571,12 +1571,12 @@ This report was generated on **Wed Aug 23 17:14:45 WEST 2023** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Aug 23 17:14:46 WEST 2023** 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). +This report was generated on **Thu Aug 24 11:27:06 WEST 2023** 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.gcloud:spine-stackdriver-trace:2.0.0-SNAPSHOT.149` +# Dependencies of `io.spine.gcloud:spine-stackdriver-trace:2.0.0-SNAPSHOT.155` ## Runtime 1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4. @@ -2467,12 +2467,12 @@ This report was generated on **Wed Aug 23 17:14:46 WEST 2023** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Aug 23 17:14:47 WEST 2023** 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). +This report was generated on **Thu Aug 24 11:27:07 WEST 2023** 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.gcloud:spine-testutil-gcloud:2.0.0-SNAPSHOT.149` +# Dependencies of `io.spine.gcloud:spine-testutil-gcloud:2.0.0-SNAPSHOT.155` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.2.**No license information found** @@ -3345,4 +3345,4 @@ This report was generated on **Wed Aug 23 17:14:47 WEST 2023** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Aug 23 17:14:49 WEST 2023** 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 +This report was generated on **Thu Aug 24 11:27:09 WEST 2023** 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/pom.xml b/pom.xml index f741f1cf..d943f8c6 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.gcloud spine-gcloud-java -2.0.0-SNAPSHOT.149 +2.0.0-SNAPSHOT.155 2015 From 61848a91522821e0468f17b749d6042df8fde11a Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 12:18:02 +0100 Subject: [PATCH 19/25] Remove Detekt analysis for now, as there is no Kotlin code in this repo yet --- .github/workflows/detekt-code-analysis.yml | 23 ---------------------- 1 file changed, 23 deletions(-) delete mode 100644 .github/workflows/detekt-code-analysis.yml diff --git a/.github/workflows/detekt-code-analysis.yml b/.github/workflows/detekt-code-analysis.yml deleted file mode 100644 index 92eb5a75..00000000 --- a/.github/workflows/detekt-code-analysis.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Run Detekt code analysis - -on: push - -jobs: - build: - name: Run Detekt code analysis - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - with: - submodules: 'true' - - - uses: actions/setup-java@v3 - with: - java-version: 11 - distribution: zulu - cache: gradle - - - name: Run analysis - shell: bash - run: ./gradlew detekt --stacktrace From ec37332c3c735fa47b3e67c97a5b6660c8171ea0 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 12:55:46 +0100 Subject: [PATCH 20/25] Improve the code layout. --- .../server/storage/datastore/config/DsColumnMappingTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/datastore/src/test/java/io/spine/server/storage/datastore/config/DsColumnMappingTest.java b/datastore/src/test/java/io/spine/server/storage/datastore/config/DsColumnMappingTest.java index 8c6d9727..3d646ea7 100644 --- a/datastore/src/test/java/io/spine/server/storage/datastore/config/DsColumnMappingTest.java +++ b/datastore/src/test/java/io/spine/server/storage/datastore/config/DsColumnMappingTest.java @@ -123,7 +123,9 @@ void enumAsLongValue() { @Test @DisplayName("generic `Message` as `StringValue`") void messageAsStringValue() { - StgProjectId id = StgProjectId.newBuilder().setId("ID").build(); + var id = StgProjectId.newBuilder() + .setId("ID") + .build(); var project = StgProject.newBuilder() .setId(id) .setName("project-name") From cd905ab42bc1593e5a1f9c492151bb18314b41c1 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 13:57:53 +0100 Subject: [PATCH 21/25] Adjust the code layout. --- .../io/spine/server/trace/stackdriver/AsyncTraceService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java b/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java index c367148a..38bf57db 100644 --- a/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java +++ b/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java @@ -51,8 +51,7 @@ final class AsyncTraceService implements TraceService, WithLogging { public void writeSpans(BatchWriteSpansRequest request) { client.batchWriteSpansCallable() .futureCall(request) - .addListener(() -> logSpans(request), - directExecutor()); + .addListener(() -> logSpans(request), directExecutor()); } private void logSpans(BatchWriteSpansRequest request) { From a681e6bcdbee88659756b886b9ae0286ebd8ad76 Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 13:58:11 +0100 Subject: [PATCH 22/25] Adjust the code layout once more. --- .../io/spine/server/trace/stackdriver/AsyncTraceService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java b/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java index 38bf57db..4f875157 100644 --- a/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java +++ b/stackdriver-trace/src/main/java/io/spine/server/trace/stackdriver/AsyncTraceService.java @@ -55,7 +55,8 @@ public void writeSpans(BatchWriteSpansRequest request) { } private void logSpans(BatchWriteSpansRequest request) { - logger().atDebug().log(() -> format("Submitted %d spans.", request.getSpansCount())); + logger().atDebug() + .log(() -> format("Submitted %d spans.", request.getSpansCount())); } @Override From 736cd863fd2f15c1d19d2ad1d61275852b23708e Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 16:04:59 +0100 Subject: [PATCH 23/25] Update the service key (encrypted content, GH Secret). --- .github/keys/spine-dev-framework-ci.json.gpg | Bin 0 -> 1739 bytes .github/workflows/build-on-ubuntu-gcloud.yml | 4 ++-- .github/workflows/publish-gcloud.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 .github/keys/spine-dev-framework-ci.json.gpg diff --git a/.github/keys/spine-dev-framework-ci.json.gpg b/.github/keys/spine-dev-framework-ci.json.gpg new file mode 100644 index 0000000000000000000000000000000000000000..3041f37ece646021035272d7980f6b0ada6efa60 GIT binary patch literal 1739 zcmV;+1~mDM4Fm}T2*vGhB1*_l==;*@0Yj144qDGbJ&>PS))*sB<)TM0D@c?Hgli1v zs`jw8!oc2c5~lEA^JSwujAnxBE#$!RuMvb#26Lr|HFxwU_SKs_BB-shz}@}TD=JZ= z-X8QT1J=?3`7JJ&r_M^Gr5n&GAhH8P66huG*wey_tcBHYn3A487@)m-Nuz3GBmRd8 zA#FXD4nmx?z4Y3_v;>f}r3mlqBN(t$?>7@e+dkI;bFSYk7myn_1s!0h&5VJ(SsEFi zFvz3N_~nE#2>vXt?A5StfN=6=%JfpH`bfHJ+Q~`@IZe!5S|J2%W!C9DyZakX{Dz!o ze!C3*Uo>yrk~KmNfKlJ`A;%hvG$OCE|0r6epdxNVseTi%c&&6^+b`Q60XqTr<0Qvk zsy512sv@Uv62am!hhxKm6vRef*t+}1vZQ~bzVmH_Mfs#I(_hFTem2hIj%S@YXXIt% zsd#M>!o8v%YcckmB}8d47aoC!DB}KhO4AJDJi1>^RwyM;XJ3eRYX4hAd5&M%CHFCh zWZisb5u6g3cb}Yx+PJy*pk>MX$+OGlk@VB@aF^y=uAxp_q{#-Uwz&kRat%}gwSE4s zj7F2??F`*>cL{*#7%g9L30PQ#c5AuUK6*bsmcUk!630FYDNwFd|4>(j;W)E$fqL&I z5)IDu!g52j`W1m-(t%3ttp1)Ejhjf(g9Ou4l0JlvF60&&$q+r((&6VbT4%<7VueJJAZz*=(??2Gz?GsyCe zR~1_Tl&XvSG)>e=;Qc@=3hwW|{wZSZx0p}!fWi-W;!{Gi!}Vn)Wsy2?IV`@rYcE+_ zaJ>;tiUVA0=+dxH+%?=4B8<@#Rdy1T*4diUjwjI{>7*Rl2lOf7qVk;1_d&E2*&R!8>`1n)dk}ocNjOAx|K*4tkr~{D^rfTp+;q)1{%WVCG=0J2_z;TtC7mBC4ta{!#}kJMp_b*GBxnpvNlYu-XiMN+;!|@V@=bMpyu2Z zUW|`4W)wr+m=Vj{`S42fcZhE6cPFMq<;puINVQRk5b^oLelm{$XlnE^H$`z#rQlXs z)BAk$rmPl$=?j@UhjaSX31lTS;&g-&2rSNi+HcZymFyt+58c3D=$@!Eil+mdnJD>;X& z60azaJnZsmeVX#N^mrr#zL#l)@Uui7MIX}2EzPYBg&TIN>VAl>3S(b zei!kix8+PW@zo+ec!(WRdK2)Ymmkqr zn7WQx_|~7|c=%`SNo)V@xh4u{se|2EGUlW9FuGA z2|Ttx=u`KtPqe6ZPnTN$De+^avZAbRSpH=v7J!#JR{InSD~eAXW@U7G9-f;MuJtG4 z6Sz{MFKN)*f^!>YL1$!c;XhdB^9?{>ehH)zdGbPw>^gmWOIZsC>b4q=MU||$(`B)B4^T)G`n_&%Kc*%*x!@Qe9*BKFr z5QQo|D9Lk|`F~k)vVs0$X3_Pn?&Q Date: Thu, 24 Aug 2023 16:32:45 +0100 Subject: [PATCH 24/25] Remove "old" encrypted credentials. --- .github/keys/spine-dev.json.gpg | Bin 1719 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .github/keys/spine-dev.json.gpg diff --git a/.github/keys/spine-dev.json.gpg b/.github/keys/spine-dev.json.gpg deleted file mode 100644 index 49f7fd52cf6eaf174899909921357ae3a052261d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1719 zcmV;o21xmg4Fm}T0>i;b?w5o72kFx40o)X?T?ZikA#SHo(cY?TZ9jKW?$OEMYE}cH z>edaCBwd$znT|E;%_^t6W)U|9hn1Wvm!;_nRF|{CT{aEoNNk2r7=qOB? z!q9c9tRKdDx~)x!Sdz0_WbX-4b{_d9Xw1W8)a^V4#;%8fz7*VDuVc1O&in21vZwj& zhsqGCfpCGcbdETg%0K!sJ_45Oprz;u_?(ikx?xT+FRm6>Yo1}Eb5Vh?O z1K``z0>0EWU&`lkN#ZqxI>oXMAdYX7;|b{Jsw`J}s@dntSXMZ_{>xSWI^iMn2t4R1 z(=`nW_pJigB&jSIqL{ME{Yvq^qwpr6aPPEyG~gW*&-5KFA)|>(S~z=yt9o8rP0K;n z@#wSlcZ0EY!$j=08@R8aFvGpR)U)1c{}0;y4K*r~Z{kc5HZ3uYP&DPj$ioA~8@l@D znK7+dzkeDvi`Fj9f9U`j7|E0!YFk0lsNVCQ5ih|C53C%S!%8ss`FNif2gH2nL{`pg zuXh_R$*$F`dYFz zzk#8UOMhx57iejWde?_v#+-d^{NTF4f{Wq%^A?I=O-r&!^H@HoI={QA7$*AGb+tkx$ZL4AL_h zKF6qEgu@DpS#0tJkk0pemmsdvsu~^LpwVf+QAn29{e6)F7KpfWDka-ndR4KUlxVVI zBlU}lyNy(Z2{%dbBQUC*(X=KQd5Y^SHb@~X;n4bQMIgv+=l$_;Um`rwI%!w^2MveL zP1EMP=`rH`X>D9WF-uG}%RQIAX=O5}s6G67au`7X^HX{q;mG8(8usW^8j{s7Rvgnj z>y5@P4QF}iEv3S3P__+1G`#89hlFjNS7&50DX zCcvExi}{-g92I(RBYzZveINwsErN+1cgwe|En6tY7lbL&?< zqDKiKajF`3kok;4iifmiuMnz*m3jeQMRADq@lKdpb*E0th2&RBIg`odTo{Ie0p_%W zp;&7Cz;GaFjLI1dhE1Z$K5=`0|4tEuyvyKOyu@l}4&WHL?@D?=gd;Mj(3U+v$Io1a zFW*G-U2$oCc70kOt)K@St-@gg4<~t%>C^`oxYbsKYHMNVQm$uv3%jos6ZP;u;tQV*$=8J*o;aCC-t1_P^rcg zrFK{7Lh#Rp6Oa$<;G+lr3Ew)DQ4)->qLWJ2bxYjn!uL9hC&46_U&UU%$JunG%iS&e zMD$4gViV7ap^FR>vk{QU()2so+;Ur2c$>Av(lYyGGCbLL2Q9q(H8}=QeOppK7AZ4^ N!2QC#hK<#d!8jwpVxa&4 From 7c7c2651a95d29b0df39aa30b1d40938f4cd997d Mon Sep 17 00:00:00 2001 From: Alex Tymchenko Date: Thu, 24 Aug 2023 16:33:40 +0100 Subject: [PATCH 25/25] For good measure, add the encrypted credentials to Gradle Plugin Portal, similarly to what we have in other repositories. --- .github/keys/gradle-plugin-portal.secret.properties.gpg | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/keys/gradle-plugin-portal.secret.properties.gpg diff --git a/.github/keys/gradle-plugin-portal.secret.properties.gpg b/.github/keys/gradle-plugin-portal.secret.properties.gpg new file mode 100644 index 00000000..8ec9a8aa --- /dev/null +++ b/.github/keys/gradle-plugin-portal.secret.properties.gpg @@ -0,0 +1,2 @@ +  2.y:ҢF`J1$9 D~ze!yuGBU2K0! q =˂p@zeqB>R#qj?1m굘U^2*kJ 3wq84}. +2M< \ No newline at end of file