From 3e53582b08fa83c08347a1535e1991cd78c33f72 Mon Sep 17 00:00:00 2001 From: Burt Beckwith Date: Mon, 14 Oct 2024 14:46:46 -0400 Subject: [PATCH] 4.6.0.3 release (#31) --- gdk/buildSrc/build.gradle | 4 + .../dependencies/VersionCatalogUpdate.groovy | 1 - .../graal/gdk/pom/GdkParentPlugin.groovy | 216 ++++++++++++++++++ .../cloud/graal/gdk/GdkGeneratorContext.java | 11 +- .../main/java/cloud/graal/gdk/GdkUtils.java | 2 +- .../java/cloud/graal/gdk/feature/GdkBom.java | 3 +- .../graal/gdk/feature/GdkTestedFeatures.java | 1 + .../database/AbstractDatabaseFeature.java | 15 +- .../template/MavenPlatformPostProcessor.java | 15 +- gdk/gradle.properties | 2 +- gdk/gradle/libs.versions.toml | 22 +- gdk/gradle/templates.versions.toml | 5 +- 12 files changed, 266 insertions(+), 31 deletions(-) create mode 100644 gdk/buildSrc/src/main/groovy/cloud/graal/gdk/pom/GdkParentPlugin.groovy diff --git a/gdk/buildSrc/build.gradle b/gdk/buildSrc/build.gradle index 2f1fb96..1612c39 100644 --- a/gdk/buildSrc/build.gradle +++ b/gdk/buildSrc/build.gradle @@ -55,6 +55,10 @@ gradlePlugin { id = 'gdk.version-catalog-updates' implementationClass = 'cloud.graal.gdk.dependencies.GdkVersionCatalogUpdatePlugin' } + gdkParentPlugin { + id = 'gdk.parent' + implementationClass = 'cloud.graal.gdk.pom.GdkParentPlugin' + } } } diff --git a/gdk/buildSrc/src/main/groovy/cloud/graal/gdk/dependencies/VersionCatalogUpdate.groovy b/gdk/buildSrc/src/main/groovy/cloud/graal/gdk/dependencies/VersionCatalogUpdate.groovy index 4bf05c5..96984f7 100644 --- a/gdk/buildSrc/src/main/groovy/cloud/graal/gdk/dependencies/VersionCatalogUpdate.groovy +++ b/gdk/buildSrc/src/main/groovy/cloud/graal/gdk/dependencies/VersionCatalogUpdate.groovy @@ -130,7 +130,6 @@ abstract class VersionCatalogUpdate extends DefaultTask { 'io.micronaut.build', 'io.micronaut.build.internal.bom', 'io.micronaut.gradle', - 'io.micronaut.platform', 'io.micronaut.starter', 'io.micronaut.maven', 'io.micronaut.testresources' diff --git a/gdk/buildSrc/src/main/groovy/cloud/graal/gdk/pom/GdkParentPlugin.groovy b/gdk/buildSrc/src/main/groovy/cloud/graal/gdk/pom/GdkParentPlugin.groovy new file mode 100644 index 0000000..9e278c4 --- /dev/null +++ b/gdk/buildSrc/src/main/groovy/cloud/graal/gdk/pom/GdkParentPlugin.groovy @@ -0,0 +1,216 @@ +/* + * Copyright 2024 Oracle and/or its affiliates + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cloud.graal.gdk.pom + +import groovy.namespace.QName +import groovy.transform.CompileStatic +import io.micronaut.build.catalogs.internal.VersionCatalogTomlModel +import io.micronaut.build.pom.VersionCatalogConverter +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration +import org.gradle.api.artifacts.DependencyConstraint +import org.gradle.api.artifacts.MinimalExternalModuleDependency +import org.gradle.api.artifacts.VersionCatalog +import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.api.artifacts.repositories.MavenArtifactRepository +import org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency +import org.gradle.api.plugins.JavaPlatformExtension +import org.gradle.api.plugins.JavaPlatformPlugin +import org.gradle.api.plugins.PluginManager +import org.gradle.api.plugins.catalog.CatalogPluginExtension +import org.gradle.api.plugins.catalog.VersionCatalogPlugin +import org.gradle.api.provider.Provider +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin +import org.gradle.api.tasks.CacheableTask +import org.gradle.api.tasks.TaskContainer + +import static org.gradle.api.plugins.JavaPlatformPlugin.API_CONFIGURATION_NAME + + +@CompileStatic +@CacheableTask +abstract class GdkParentPlugin implements Plugin { + + Map pluginsMap = Map.of( + "exclude-io-micronaut-maven-plugin", "micronaut-maven-plugin.version", + "exclude-io-micronaut-maven-test-resources-plugin", "micronaut.test.resources.version", + ) + + @Override + void apply(Project project) { + PluginManager plugins = project.pluginManager + plugins.apply(MavenPublishPlugin) + plugins.apply(JavaPlatformPlugin) + plugins.apply(VersionCatalogPlugin) + project.extensions.add(DependencyExclusion.NAME, DependencyExclusion) + configureParent(project) + } + + private void configureParent(Project project) { + project.extensions.getByType(JavaPlatformExtension).allowDependencies() + PublishingExtension publishing = project.extensions.getByType(PublishingExtension) + DependencyExclusion dependencyExclusion = project.extensions.getByType(DependencyExclusion) + project.afterEvaluate { unused -> configureLate(project, publishing, dependencyExclusion, project.tasks) } + } + + + private void configureLate(Project project, PublishingExtension publishing, DependencyExclusion dependencyExclusion, TaskContainer tasks) { + + final VersionCatalogConverter modelConverter = new VersionCatalogConverter( + project.rootProject.file("gradle/templates.versions.toml"), + project.extensions.findByType(CatalogPluginExtension) + ) + + VersionCatalog versionCatalog = project.extensions.findByType(VersionCatalogsExtension).find("templateLibs").get() + VersionCatalogTomlModel modelProvider = project.provider(modelConverter::getModel).get() + + Configuration api = project.configurations.named(API_CONFIGURATION_NAME).get() + + Map mapAliasToVersion = new HashMap<>() + publishing.publications.named("maven", MavenPublication, pub -> { + pub.artifactId = "gdk-parent" + pub.groupId = "cloud.graal.gdk" + pub.from(project.components.named("javaPlatform").get()) + pub.pom(pom -> { + pom.packaging = "pom" + def lib = modelProvider.librariesTable.find(l -> {l.alias == "exclude-io-micronaut-platform-micronaut-parent"}) + def platformVersion = modelProvider.versionsTable.find(x -> x.reference == lib.version.reference).version + + modelProvider.librariesTable.forEach(library -> { + if (!library.alias.startsWith("exclude-")) { + String alias = Optional.ofNullable(library.version.reference).map(a -> a.replace('-', '.')).orElse("") + String bomPropertyName = bomPropertyName(library.alias, alias) + def version = modelProvider.versionsTable.find(x -> x.reference == library.version.reference).version + mapAliasToVersion[library.alias] = '\${' + bomPropertyName + '}' + pom.properties.put(bomPropertyName, version.require) + } + }) + + pom.withXml { xml -> + Node parent = xml.asNode().appendNode('parent') + xml.asNode().children().remove(parent) + // add it after packaging + xml.asNode().children().add(5, parent) + + new Node(parent, "groupId", "io.micronaut.platform") + new Node(parent, "artifactId", "micronaut-parent") + new Node(parent, "version", platformVersion.require) + } + + pom.packaging = "pom" + pom.properties.put("micronaut.version", platformVersion.require) + + modelProvider.librariesTable.forEach(library -> { + if (!library.alias.startsWith("exclude-") || pluginsMap.containsKey(library.alias) ) { + String alias = Optional.ofNullable(library.version.reference).map(a -> a.replace('-', '.')).orElse("") + String bomPropertyName = pluginsMap.containsKey(library.alias) ? pluginsMap.get(library.alias) : bomPropertyName(library.alias, alias) + def version = modelProvider.versionsTable.find(x -> x.reference == library.version.reference).version + pom.properties.put(bomPropertyName, version.require) + } + }) + + pom.withXml { xml -> + Node dependencies = childOf(childOf(xml.asNode(), "dependencyManagement"), "dependencies") + Node dependency = new Node(dependencies, "dependency", "") + new Node(dependency, "groupId", "cloud.graal.gdk") + new Node(dependency, "artifactId", "gdk-bom") + new Node(dependency, "version", project.version) + new Node(dependency, "type", "pom") + new Node(dependency, "scope", "import") + } + }) + }) + + + + publishing.repositories(repositories -> { + Provider externalRepoUri = project.providers.environmentVariable("PUBLISH_REPO") + if (externalRepoUri.isPresent()) { + repositories.maven(maven -> { + MavenArtifactRepository repository = (MavenArtifactRepository) maven + repository.name = "External" + repository.url = externalRepoUri + Provider externalRepoUsername = project.providers.environmentVariable("PUBLISH_USERNAME") + Provider externalRepoPassword = project.providers.environmentVariable("PUBLISH_PASSWORD") + if (externalRepoUsername.isPresent() && externalRepoPassword.isPresent()) { + repository.credentials(credentials -> { + credentials.username = externalRepoUsername.get() + credentials.password = externalRepoPassword.get() + }) + } + }) + } + repositories.maven(maven -> { + MavenArtifactRepository repository = (MavenArtifactRepository) maven + repository.name = "Build" + repository.url = project.rootProject.layout.buildDirectory.dir("repo") + }) + }) + + versionCatalog.libraryAliases.sort { alias -> versionCatalog.findLibrary(alias).get().get().module.toString() }.forEach(alias -> { + MinimalExternalModuleDependency lib = versionCatalog.findLibrary(alias).map(Provider::get) + .orElseThrow(() -> new RuntimeException("Unexpected missing alias in catalog: " + alias)) as MinimalExternalModuleDependency + DefaultExternalModuleDependency existingDep = api.dependencies.find(x -> x.name == lib.name) as DefaultExternalModuleDependency + + if (existingDep != null) { + existingDep.version { it.strictly(mapAliasToVersion.get(alias.replace(".", "-"))) } + } else if (!alias.startsWith("exclude.") && !alias.endsWith(".bom")) { + DependencyConstraint dependencyConstraint = project.dependencies.constraints.create(lib) + dependencyConstraint.version { it.strictly(mapAliasToVersion.get(alias.replace(".", "-"))) } + api.dependencyConstraints.add(dependencyConstraint) + } + }) + + } + + private static String bomPropertyName(String alias, String version) { + version = version.replaceFirst(/^boms\./, '') + String baseName = toPropertyName(version) + if (baseName.endsWith(".version")) { + return baseName + } + if (alias.contains("bom")) { + return baseName + '.version' + } else { + return baseName + ".gdk.version" + } + } + + private static String toPropertyName(String alias) { + return alias.split("(?=[A-Z])") + .collect { it.toLowerCase(Locale.US) } + .join("-") + .replace('-', '.') + } + + private static Node childOf(Node node, String name) { + List children = (List) node.children() + return children.stream().findAll(n -> n instanceof Node).find(n -> nameOf(n as Node) == name) as Node + } + + private static String nameOf(Node n) { + def name = n.name() + if (name instanceof String) { + return (String) name + } + return ((QName) n.name()).localPart + } + + +} diff --git a/gdk/gdk-core/src/main/java/cloud/graal/gdk/GdkGeneratorContext.java b/gdk/gdk-core/src/main/java/cloud/graal/gdk/GdkGeneratorContext.java index cc79c4f..f0ea0cf 100644 --- a/gdk/gdk-core/src/main/java/cloud/graal/gdk/GdkGeneratorContext.java +++ b/gdk/gdk-core/src/main/java/cloud/graal/gdk/GdkGeneratorContext.java @@ -174,19 +174,12 @@ public GdkGeneratorContext(Project project, cloudFeatures = splitFeatures(features, featureContext, this); generateExampleCode = featureContext.getOptions().get(EXAMPLE_CODE, Boolean.class).orElse(true); - String key = featureContext.getOptions().getBuildTool().isGradle() ? "micronautVersion" : "micronaut.version"; clouds = new HashSet<>(cloudFeatures.keySet()); clouds.add(NONE); // for lib module buildProperties = new GdkBuildProperties(this, clouds); - buildProperties.put(key, GdkUtils.getMicronautVersion() + GdkUtils.BOM_VERSION_SUFFIX); - - if (!featureContext.getBuildTool().isGradle()) { - buildProperties.put("micronaut-maven-plugin.version", GdkDependencies.MICRONAUT_MAVEN_PLUGIN.getVersion()); - buildProperties.put("micronaut.test.resources.version", GdkDependencies.MICRONAUT_TEST_RESOURCES_CORE.getVersion()); - buildProperties.put("kotlin.version", GdkDependencies.KOTLIN_STDLIB.getVersion()); - buildProperties.put("micronaut.core.version", GdkDependencies.MICRONAUT_CORE.getVersion()); + if (featureContext.getOptions().getBuildTool().isGradle()) { + buildProperties.put("micronautVersion", GdkUtils.getMicronautVersion() + GdkUtils.BOM_VERSION_SUFFIX); } - INSTANCE.set(this); } diff --git a/gdk/gdk-core/src/main/java/cloud/graal/gdk/GdkUtils.java b/gdk/gdk-core/src/main/java/cloud/graal/gdk/GdkUtils.java index ea91c92..aec5ee7 100644 --- a/gdk/gdk-core/src/main/java/cloud/graal/gdk/GdkUtils.java +++ b/gdk/gdk-core/src/main/java/cloud/graal/gdk/GdkUtils.java @@ -96,7 +96,7 @@ public static String getVersion() { * @return the version of Micronaut Platform */ public static String getMicronautVersion() { - return GdkDependencies.MICRONAUT_PARENT.getVersion(); + return GdkDependencies.MICRONAUT_PARENT.getVersion().replaceAll("-oracle-\\d+", ""); } /** diff --git a/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/GdkBom.java b/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/GdkBom.java index 8470230..e0af766 100644 --- a/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/GdkBom.java +++ b/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/GdkBom.java @@ -55,9 +55,8 @@ public class GdkBom implements DefaultFeature, RequiresRepository { @Override public void apply(GeneratorContext generatorContext) { - generatorContext.addDependency(BOM); - if (generatorContext.getBuildTool().isGradle()) { + generatorContext.addDependency(BOM); generatorContext.addBuildPlugin(BOM_PLUGIN); } } diff --git a/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/GdkTestedFeatures.java b/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/GdkTestedFeatures.java index 9c20eec..db59200 100644 --- a/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/GdkTestedFeatures.java +++ b/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/GdkTestedFeatures.java @@ -46,6 +46,7 @@ public final class GdkTestedFeatures { "mysql", "flyway", "validation", + "oracle", // DATABASE OCI "oracle-cloud-atp", // EMAIL AWS diff --git a/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/service/database/AbstractDatabaseFeature.java b/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/service/database/AbstractDatabaseFeature.java index e88d3ac..b727082 100644 --- a/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/service/database/AbstractDatabaseFeature.java +++ b/gdk/gdk-core/src/main/java/cloud/graal/gdk/feature/service/database/AbstractDatabaseFeature.java @@ -51,6 +51,7 @@ import io.micronaut.starter.feature.database.DatabaseDriverFeature; import io.micronaut.starter.feature.database.H2; import io.micronaut.starter.feature.database.MySQL; +import io.micronaut.starter.feature.database.Oracle; import io.micronaut.starter.feature.database.jdbc.JdbcFeature; import io.micronaut.starter.feature.migration.Flyway; import io.micronaut.starter.feature.oraclecloud.OracleCloudAutonomousDatabase; @@ -149,9 +150,7 @@ public final void apply(GdkGeneratorContext generatorContext) { "flyway.datasources.default.enabled", true, "datasources.default.dialect", driverFeature.getDataDialect() )); - jdbcFeature.applyDefaultConfig(generatorContext, driverFeature, jdbcConfig); - if (driverFeature instanceof OracleCloudAutonomousDatabase) { generatorContext.getTestConfiguration().addNested(Map.of( "datasources.default.url", "jdbc:tc:oracle:thin:@/xe", @@ -163,6 +162,18 @@ public final void apply(GdkGeneratorContext generatorContext) { "flyway.datasources.default.baseline-version", "0", "flyway.datasources.default.baseline-on-migrate", "true")); generatorContext.addDependency(TESTCONTAINERS_ORACLE_XE); + } else if (driverFeature instanceof Oracle) { + generatorContext.getTestConfiguration().addNested(Map.of( + "datasources.default.url", "jdbc:tc:oracle:thin:@/xe", + "datasources.default.driverClassName", "org.testcontainers.jdbc.ContainerDatabaseDriver", + "datasources.default.username", "system", + "datasources.default.password", "oracle", + "datasources.default.connectionTimeout", "60000", + "flyway.datasources.default.locations", "classpath:db/migration", + "flyway.datasources.default.baseline-version", "0", + "flyway.datasources.default.baseline-on-migrate", "true", + "flyway.datasources.default.enabled", "true")); + generatorContext.addDependency(TESTCONTAINERS_ORACLE_XE); } else { generatorContext.getTestConfiguration().addNested(jdbcConfig); } diff --git a/gdk/gdk-core/src/main/java/cloud/graal/gdk/template/MavenPlatformPostProcessor.java b/gdk/gdk-core/src/main/java/cloud/graal/gdk/template/MavenPlatformPostProcessor.java index c11465d..ca3ff66 100644 --- a/gdk/gdk-core/src/main/java/cloud/graal/gdk/template/MavenPlatformPostProcessor.java +++ b/gdk/gdk-core/src/main/java/cloud/graal/gdk/template/MavenPlatformPostProcessor.java @@ -20,8 +20,6 @@ import java.util.regex.Pattern; -import static cloud.graal.gdk.GdkUtils.BOM_VERSION_SUFFIX; - /** * Fixes parent element in platform independent pom.xml and multi-module root pom.xml. */ @@ -34,12 +32,23 @@ public class MavenPlatformPostProcessor implements TemplatePostProcessor { @NonNull @Override public String process(@NonNull String pom) { + return fixParent(pom); + + } + + @NonNull + private String fixParent(@NonNull String pom) { int start = pom.indexOf(PARENT_START); int end = pom.indexOf(PARENT_END, start) + PARENT_END.length(); + String top = pom.substring(0, start); String bottom = pom.substring(end); String parent = pom.substring(start, end); - parent = VERSION_PATTERN.matcher(parent).replaceAll(String.format("%s", GdkUtils.getMicronautVersion() + BOM_VERSION_SUFFIX)); + + parent = parent.replace("io.micronaut.platform", "cloud.graal.gdk"); + parent = parent.replace("micronaut-parent", "gdk-parent"); + parent = VERSION_PATTERN.matcher(parent).replaceAll(String.format("%s", GdkUtils.getGdkBomVersion())); + return top + parent + bottom; } } diff --git a/gdk/gradle.properties b/gdk/gradle.properties index 53c65e8..8a7769a 100644 --- a/gdk/gradle.properties +++ b/gdk/gradle.properties @@ -1,3 +1,3 @@ org.gradle.parallel=true org.gradle.caching=true -version=4.6.0.1 +version=4.6.0.3 diff --git a/gdk/gradle/libs.versions.toml b/gdk/gradle/libs.versions.toml index 69c576b..a38613e 100644 --- a/gdk/gradle/libs.versions.toml +++ b/gdk/gradle/libs.versions.toml @@ -16,21 +16,21 @@ [versions] bouncycastle = '1.78.1' -docker = '3.3.6' -groovy = '4.0.21' # TODO keep in sync when changing Micronaut version +docker = '3.4.0' +groovy = '4.0.22' # TODO keep in sync when changing Micronaut version jansi = '2.4.1' -jline = '3.26.2' -logback = "1.5.6" -micronaut-plugins = '4.4.0' -micronaut-starter = '4.5.0' +jline = '3.26.3' +logback = '1.5.8' +micronaut-plugins = '4.4.2' +micronaut-starter = '4.6.1' reflections = '0.10.2' rocker = '1.4.0' shadow = '8.1.1' -slf4j = '2.0.13' +slf4j = '2.0.16' spotless = '6.25.0' test-logger = '4.0.0' -tomlj = "1.1.1" -micronaut-internal-build = "6.7.1" +tomlj = '1.1.1' +micronaut-internal-build = '7.2.1' [libraries] bouncycastle-bcpkix = { module = 'org.bouncycastle:bcpkix-jdk18on', version.ref = 'bouncycastle' } @@ -54,5 +54,5 @@ shadow = { module = 'com.github.johnrengelman:shadow', version.ref = 'shadow' } slf4j-nop = { module = 'org.slf4j:slf4j-nop', version.ref = 'slf4j' } spotless = { module = 'com.diffplug.spotless:spotless-plugin-gradle', version.ref = 'spotless' } test-logger = { module = 'com.adarshr:gradle-test-logger-plugin', version.ref = 'test-logger' } -tomlj = { module = "org.tomlj:tomlj", version.ref = "tomlj" } -micronaut-internal-build-bom = { module = "io.micronaut.build.internal.bom:io.micronaut.build.internal.bom.gradle.plugin", version.ref = "micronaut-internal-build" } +tomlj = { module = 'org.tomlj:tomlj', version.ref = 'tomlj' } +micronaut-internal-build-bom = { module = 'io.micronaut.build.internal.bom:io.micronaut.build.internal.bom.gradle.plugin', version.ref = 'micronaut-internal-build' } diff --git a/gdk/gradle/templates.versions.toml b/gdk/gradle/templates.versions.toml index 2fb99b1..238d482 100644 --- a/gdk/gradle/templates.versions.toml +++ b/gdk/gradle/templates.versions.toml @@ -43,7 +43,7 @@ micronaut-mongo = "5.4.0-oracle-00001" micronaut-object-storage = "2.6.0-oracle-00001" micronaut-openapi = "6.12.3-oracle-00001" micronaut-oraclecloud = "4.2.0-oracle-00001" -micronaut-platform = "4.6.0" +micronaut-platform = "4.6.0-oracle-00001" micronaut-picocli = "5.5.0-oracle-00001" micronaut-reactor = "3.5.0-oracle-00001" micronaut-security = "4.10.1-oracle-00001" @@ -56,6 +56,7 @@ micronaut-views = "5.5.0-oracle-00001" okhttp = "4.12.0" opentelemetry-semconv = "1.30.1-alpha" org-springframework-boot-spring-boot-starter-parent = "3.3.3" +protobuf = "3.25.5" spring-boot-gradle-plugin = "3.3.3" test-containers-oracle-xe = "1.20.1" @@ -66,6 +67,8 @@ com-google-api-gax = { module = 'com.google.api:gax', version.ref = 'gax'} com-google-api-gax-grpc = { module = 'com.google.api:gax-grpc', version.ref = 'gax-grpc'} com-google-cloud-google-cloud-logging-logback = { module = 'com.google.cloud:google-cloud-logging-logback', version.ref = 'google-cloud-logging'} com-google-guava-guava = { module = 'com.google.guava:guava', version.ref = 'guava'} +com-google-protobuf-protobuf-java = { module = 'com.google.protobuf:protobuf-java', version.ref = 'protobuf'} +com-google-protobuf-protobuf-java-util = { module = 'com.google.protobuf:protobuf-java-util', version.ref = 'protobuf'} com-squareup-okhttp3-logging-interceptor = { module = 'com.squareup.okhttp3:logging-interceptor', version.ref = 'okhttp'} com-squareup-okhttp3-okhttp = { module = 'com.squareup.okhttp3:okhttp', version.ref = 'okhttp'} io-micronaut-cache-micronaut-cache-core = { module = 'io.micronaut.cache:micronaut-cache-core', version.ref = 'micronaut-cache'}