This is an automated email from the ASF dual-hosted git repository.

jamesfredley pushed a commit to branch feat/gradle-managed-version-overrides
in repository https://gitbox.apache.org/repos/asf/grails-core.git


The following commit(s) were added to 
refs/heads/feat/gradle-managed-version-overrides by this push:
     new d67ef28405 Address review feedback: consolidate bom-property-overrides 
+ def style + drop duplicates workaround
d67ef28405 is described below

commit d67ef2840517dc5e2954bd98e6cf3d22cb4d16a6
Author: James Fredley <[email protected]>
AuthorDate: Thu May 21 17:14:23 2026 -0400

    Address review feedback: consolidate bom-property-overrides + def style + 
drop duplicates workaround
    
    Three review threads addressed:
    
    1. jdaugherty: "this should be under the Gradle package to match our other 
plugins"
       The standalone grails-gradle-bom-property-overrides module is merged into
       grails-gradle-plugins, joining the 11 other plugins registered there.
       The plugin id (org.apache.grails.gradle.bom-property-overrides), 
extension
       name (bomPropertyOverrides) and implementation class
       (org.grails.gradle.plugin.bom.BomPropertyOverridesPlugin) are unchanged,
       so end-user usage is identical.
    
       - Move 3 main sources + 3 test sources + 4 test resources into
         grails-gradle/plugins/
       - Drop the duplicate GradleSpecification.groovy in favour of the existing
         copy in 
grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/
       - Register bomPropertyOverrides as the 12th entry in the gradlePlugin{}
         block in plugins/build.gradle
       - Remove the now-self-referential implementation 
project(:grails-gradle-bom-property-overrides)
         dependency
       - Remove the include + projectDir mapping from 
grails-gradle/settings.gradle
       - Remove grails-gradle-bom-property-overrides from publishedProjects in
         grails-gradle/gradle/publish-root-config.gradle
       - Delete the now-empty grails-gradle/bom-property-overrides/ directory
       - Update class javadoc + doc reference to drop the "standalone" framing
         (the plugin is still BOM-agnostic and works for non-Grails projects;
         it just ships inside grails-gradle-plugins)
    
    2. matrei: "Use def for local variables where the type can be inferred...
       This applies generally to all added Groovy code"
       Refactored BomManagedVersions, BomPropertyOverridesPlugin,
       BomManagedVersionsSpec and BomPropertyOverridesPluginSpec to use def
       for inferrable local variables. Public API method signatures and
       field declarations retain explicit types (the public contract is
       unchanged). The unused org.w3c.dom.NodeList import that the def
       refactor exposed is dropped.
    
    3. jdaugherty: "What is causing the duplicate? We typically fix these so
       it's not needed"
       Confirmed by removing the tasks.withType(Copy) duplicatesStrategy =
       INCLUDE block from grails-gradle/plugins/build.gradle and running
       :grails-gradle-plugins:build with --rerun-tasks: all tasks pass green
       (compileGroovy, processResources, jar, sourcesJar, javadocJar,
       pluginUnderTestMetadata, test, codenarcMain, validatePlugins,
       cyclonedxDirectBom, check, build). The workaround was a copy-paste
       from older builds and is no longer needed; dropping it removes a
       stale escape hatch that could mask genuine duplicates in future.
    
    Verification:
      ./gradlew :grails-gradle-plugins:build
        -> BUILD SUCCESSFUL in 1m 13s
        -> 30 tests pass (including all 12 newly-relocated bom tests and the
           BomPlatformFunctionalSpec end-to-end test)
        -> codenarcMain clean (31 files scanned, 0 violations)
        -> validatePlugins clean
---
 .../gradleBuild/gradleDependencies.adoc            |   4 +-
 grails-gradle/bom-property-overrides/build.gradle  |  86 --------------
 .../gradle/plugin/bom/GradleSpecification.groovy   | 127 ---------------------
 grails-gradle/gradle/publish-root-config.gradle    |   1 -
 grails-gradle/plugins/build.gradle                 |  16 +--
 .../gradle/plugin/bom/BomManagedVersions.groovy    | 114 +++++++++---------
 .../bom/BomPropertyOverridesExtension.groovy       |   0
 .../plugin/bom/BomPropertyOverridesPlugin.groovy   |  32 +++---
 .../plugin/bom/BomManagedVersionsSpec.groovy       |  18 +--
 ...BomPropertyOverridesPluginFunctionalSpec.groovy |   4 +-
 .../bom/BomPropertyOverridesPluginSpec.groovy      |  31 +++--
 .../plugin/core/BomPlatformFunctionalSpec.groovy   |   6 +-
 .../src/test/resources/test-poms/test-bom.pom      |   0
 .../bom-property-overrides-basic/build.gradle      |   0
 .../bom-property-overrides-basic/gradle.properties |   0
 .../bom-property-overrides-basic/settings.gradle   |   0
 grails-gradle/settings.gradle                      |   3 -
 17 files changed, 113 insertions(+), 329 deletions(-)

diff --git 
a/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc 
b/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
index 0c8ca43555..c4052ea488 100644
--- a/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
+++ b/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
@@ -97,9 +97,9 @@ dependencies {
 }
 ----
 
-==== Using `bom-property-overrides` Standalone (Non-Grails Projects)
+==== Using `bom-property-overrides` Outside a Grails App
 
-The property-override mechanism is published as a standalone, BOM-agnostic 
Gradle plugin so it can be reused with any BOM that follows the Maven 
`<properties>` convention. Apply it directly when you want the same 
`gradle.properties` / `ext['…']` override workflow without applying any Grails 
plugin:
+The property-override mechanism is BOM-agnostic and can be applied to any 
project that consumes a BOM with `<properties>` references. Apply the plugin 
directly when you want the same `gradle.properties` / `ext['…']` override 
workflow without applying the full Grails web plugin:
 
 [source,groovy]
 ----
diff --git a/grails-gradle/bom-property-overrides/build.gradle 
b/grails-gradle/bom-property-overrides/build.gradle
deleted file mode 100644
index 8dbf7640a9..0000000000
--- a/grails-gradle/bom-property-overrides/build.gradle
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.
- */
-
-plugins {
-    id 'groovy'
-    id 'java-gradle-plugin'
-    id 'org.apache.grails.buildsrc.properties'
-    id 'org.apache.grails.buildsrc.dependency-validator'
-    id 'org.apache.grails.buildsrc.compile'
-    id 'org.apache.grails.buildsrc.publish'
-    id 'org.apache.grails.buildsrc.sbom'
-    id 'org.apache.grails.gradle.grails-code-style'
-}
-
-version = projectVersion
-group = 'org.apache.grails'
-
-ext {
-    pomTitle = 'Grails BOM Property Overrides Gradle Plugin'
-    pomDescription = 'A standalone Gradle plugin that enables Maven-style 
property-based version overrides ' +
-            'for any Gradle platform() BOM. Reads the BOM POM <properties> 
block and lets consumers ' +
-            'override versions via gradle.properties or 
ext[\'property.name\']. ' +
-            'Reusable independently of Grails.'
-    pomMavenPublicationName = 'pluginMaven'
-}
-
-dependencies {
-    implementation platform(project(':grails-gradle-bom'))
-
-    // Compile against the Groovy version provided at runtime by the Gradle 
distribution
-    // running the build (the Gradle/Groovy compatibility matrix is documented 
at
-    // https://docs.gradle.org/current/userguide/compatibility.html#groovy). 
The `groovy`
-    // module is intentionally compileOnly: at runtime Gradle supplies its own 
copy and
-    // testCompileClasspath/testRuntimeClasspath excludes below prevent the 
Spock
-    // transitive copy from leaking onto the test classpath.
-    compileOnly 'org.apache.groovy:groovy'
-
-    // Testing - Gradle TestKit is auto-added by java-gradle-plugin
-    testImplementation('org.spockframework:spock-core') { transitive = false }
-    testImplementation 'org.apache.groovy:groovy-test-junit5'
-    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
-}
-
-configurations {
-    testCompileClasspath.exclude(group: 'org.apache.groovy', module: 'groovy')
-    testRuntimeClasspath.exclude(group: 'org.apache.groovy', module: 'groovy')
-}
-
-gradlePlugin {
-    plugins {
-        register('bomPropertyOverrides') {
-            displayName = 'Grails BOM Property Overrides Plugin'
-            description = 'Enables Maven-style property-based version 
overrides for any Gradle platform() BOM. ' +
-                    'Apply this plugin and override versions via 
gradle.properties or ext[\'property.name\']. ' +
-                    'Auto-detects declared platform() BOMs by default, or 
accepts an explicit list via the ' +
-                    'bomPropertyOverrides extension.'
-            id = 'org.apache.grails.gradle.bom-property-overrides'
-            implementationClass = 
'org.grails.gradle.plugin.bom.BomPropertyOverridesPlugin'
-        }
-    }
-}
-
-tasks.withType(Copy).configureEach {
-    duplicatesStrategy = DuplicatesStrategy.INCLUDE
-}
-
-apply {
-    from rootProject.layout.projectDirectory.file('gradle/docs-config.gradle')
-    from rootProject.layout.projectDirectory.file('gradle/test-config.gradle')
-}
diff --git 
a/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/GradleSpecification.groovy
 
b/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/GradleSpecification.groovy
deleted file mode 100644
index d1c283a29f..0000000000
--- 
a/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/GradleSpecification.groovy
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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 org.grails.gradle.plugin.bom
-
-import org.gradle.testkit.runner.BuildResult
-import org.gradle.testkit.runner.GradleRunner
-import org.gradle.testkit.runner.TaskOutcome
-import spock.lang.Specification
-
-import java.nio.file.FileVisitResult
-import java.nio.file.Files
-import java.nio.file.Path
-import java.nio.file.SimpleFileVisitor
-import java.nio.file.attribute.BasicFileAttributes
-
-/**
- * Base class for Gradle plugin functional tests using TestKit.
- *
- * <p>Handles temp directory management, GradleRunner setup, test
- * resource project copying, and common build assertions. Mirrors the
- * helper used by the {@code grails-gradle-plugins} module.</p>
- *
- * @since 8.0
- */
-abstract class GradleSpecification extends Specification {
-
-    private static Path basePath
-    private static GradleRunner gradleRunner
-
-    /** Project version injected by Gradle test config. */
-    protected static final String PROJECT_VERSION = 
System.getProperty('projectVersion')
-
-    void setupSpec() {
-        basePath = Files.createTempDirectory('bom-property-overrides-projects')
-        Path testKitDir = Files.createDirectories(basePath.resolve('.gradle'))
-        gradleRunner = GradleRunner.create()
-                .withPluginClasspath()
-                .withTestKitDir(testKitDir.toFile())
-    }
-
-    void cleanup() {
-        basePath?.toFile()?.listFiles()?.each {
-            if (it.name == '.gradle') {
-                return
-            }
-            it.deleteDir()
-        }
-    }
-
-    void cleanupSpec() {
-        basePath?.toFile()?.deleteDir()
-    }
-
-    /**
-     * Sets up a test project from resource files under
-     * {@code src/test/resources/test-projects/{projectName}}.
-     *
-     * <p>Files are copied to a temp directory. Any occurrence of
-     * {@code __PROJECT_VERSION__} in {@code .gradle} files is replaced
-     * with the actual project version.</p>
-     */
-    protected GradleRunner setupTestResourceProject(String projectName) {
-        Path destination = basePath.resolve(projectName)
-        Files.createDirectories(destination)
-
-        Path source = 
Path.of("src/test/resources/test-projects/${projectName}")
-        copyDirectory(source, destination)
-
-        gradleRunner.withProjectDir(destination.toFile())
-    }
-
-    /**
-     * Executes a Gradle task and returns the build result.
-     */
-    protected BuildResult executeTask(String taskName, List<String> otherArgs 
= []) {
-        List<String> args = [taskName, '--stacktrace']
-        args.addAll(otherArgs)
-        gradleRunner.withArguments(args).forwardOutput().build()
-    }
-
-    /**
-     * Asserts that the given task succeeded.
-     */
-    protected void assertTaskSuccess(String taskName, BuildResult result) {
-        def task = result.tasks.find { it.path.endsWith(":${taskName}") }
-        assert task != null : "Task '${taskName}' not found in build result"
-        assert task.outcome == TaskOutcome.SUCCESS : "Task '${taskName}' 
outcome was ${task.outcome}"
-    }
-
-    private void copyDirectory(Path source, Path destination) {
-        Files.walkFileTree(source, new SimpleFileVisitor<Path>() {
-            @Override
-            FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes 
attrs) {
-                
Files.createDirectories(destination.resolve(source.relativize(dir)))
-                FileVisitResult.CONTINUE
-            }
-
-            @Override
-            FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
-                Path target = destination.resolve(source.relativize(file))
-                if (file.toString().endsWith('.gradle') || 
file.toString().endsWith('.properties')) {
-                    String content = 
Files.readString(file).replace('__PROJECT_VERSION__', PROJECT_VERSION)
-                    Files.writeString(target, content)
-                } else {
-                    Files.copy(file, target)
-                }
-                FileVisitResult.CONTINUE
-            }
-        })
-    }
-}
diff --git a/grails-gradle/gradle/publish-root-config.gradle 
b/grails-gradle/gradle/publish-root-config.gradle
index 48a9f33566..4282dbfe20 100644
--- a/grails-gradle/gradle/publish-root-config.gradle
+++ b/grails-gradle/gradle/publish-root-config.gradle
@@ -25,7 +25,6 @@ group = 'this.will.be.overridden'
 
 def publishedProjects = [
         'grails-gradle-bom',
-        'grails-gradle-bom-property-overrides',
         'grails-gradle-common',
         'grails-gradle-model',
         'grails-gradle-plugins',
diff --git a/grails-gradle/plugins/build.gradle 
b/grails-gradle/plugins/build.gradle
index f657e8e865..654f00a53f 100644
--- a/grails-gradle/plugins/build.gradle
+++ b/grails-gradle/plugins/build.gradle
@@ -46,7 +46,6 @@ dependencies {
 
     implementation project(':grails-gradle-common')
     implementation project(':grails-gradle-tasks')
-    implementation project(':grails-gradle-bom-property-overrides')
 
     // spock is leaking from the grails-gradle-bom through grails-gradle-model
     implementation project(':grails-gradle-model'), {
@@ -136,12 +135,15 @@ gradlePlugin {
             id = 'org.apache.grails.gradle.grails-integration-test'
             implementationClass = 
'org.grails.gradle.plugin.core.IntegrationTestGradlePlugin'
         }
-    }
-}
-
-tasks.withType(Copy) {
-    configure {
-        duplicatesStrategy = DuplicatesStrategy.INCLUDE
+        bomPropertyOverrides {
+            displayName = 'Grails BOM Property Overrides Plugin'
+            description = 'Enables Maven-style property-based version 
overrides for any Gradle platform() BOM. ' +
+                    'Apply this plugin and override versions via 
gradle.properties or ext[\'property.name\']. ' +
+                    'Auto-detects declared platform() BOMs by default, or 
accepts an explicit list via the ' +
+                    'bomPropertyOverrides extension.'
+            id = 'org.apache.grails.gradle.bom-property-overrides'
+            implementationClass = 
'org.grails.gradle.plugin.bom.BomPropertyOverridesPlugin'
+        }
     }
 }
 
diff --git 
a/grails-gradle/bom-property-overrides/src/main/groovy/org/grails/gradle/plugin/bom/BomManagedVersions.groovy
 
b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/bom/BomManagedVersions.groovy
similarity index 75%
rename from 
grails-gradle/bom-property-overrides/src/main/groovy/org/grails/gradle/plugin/bom/BomManagedVersions.groovy
rename to 
grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/bom/BomManagedVersions.groovy
index 20e92b543e..32bed260aa 100644
--- 
a/grails-gradle/bom-property-overrides/src/main/groovy/org/grails/gradle/plugin/bom/BomManagedVersions.groovy
+++ 
b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/bom/BomManagedVersions.groovy
@@ -26,7 +26,6 @@ import org.gradle.api.logging.Logger
 import org.gradle.api.logging.Logging
 import org.w3c.dom.Document
 import org.w3c.dom.Element
-import org.w3c.dom.NodeList
 
 import javax.xml.parsers.DocumentBuilderFactory
 
@@ -47,9 +46,10 @@ import javax.xml.parsers.DocumentBuilderFactory
  * (see <a href="https://github.com/gradle/gradle/issues/9160";>Gradle 
#9160</a>).</p>
  *
  * <p>This is the underlying utility used by the
- * {@code org.apache.grails.gradle.bom-property-overrides} plugin. It is
- * BOM-agnostic and can be used directly with any BOM that follows the
- * Maven {@code <properties>} convention for managed versions.</p>
+ * {@code org.apache.grails.gradle.bom-property-overrides} plugin
+ * (registered in {@code grails-gradle-plugins}). It is BOM-agnostic and
+ * can be used directly with any BOM that follows the Maven
+ * {@code <properties>} convention for managed versions.</p>
  *
  * @since 8.0
  */
@@ -85,14 +85,14 @@ class BomManagedVersions {
      * @return a BomManagedVersions instance containing any version overrides 
to apply
      */
     static BomManagedVersions resolve(Project project, Collection<String> 
bomCoordinatesList) {
-        BomManagedVersions instance = new BomManagedVersions()
+        def instance = new BomManagedVersions()
 
-        Map<String, String> bomProperties = new LinkedHashMap<>()
-        Map<String, List<String>> propertyToArtifacts = new LinkedHashMap<>()
-        Set<String> processed = new HashSet<>()
+        def bomProperties = new LinkedHashMap<String, String>()
+        def propertyToArtifacts = new LinkedHashMap<String, List<String>>()
+        def processed = new HashSet<String>()
 
         for (String bomCoordinates : bomCoordinatesList) {
-            String[] parts = bomCoordinates?.split(':')
+            def parts = bomCoordinates?.split(':')
             if (parts == null || parts.length != 3) {
                 LOG.warn('Invalid BOM coordinates: {}', bomCoordinates)
                 continue
@@ -100,14 +100,14 @@ class BomManagedVersions {
             processBom(project, parts[0], parts[1], parts[2], bomProperties, 
propertyToArtifacts, processed)
         }
 
-        for (Map.Entry<String, List<String>> entry : 
propertyToArtifacts.entrySet()) {
-            String propertyName = entry.key
+        for (def entry : propertyToArtifacts.entrySet()) {
+            def propertyName = entry.key
             if (project.hasProperty(propertyName)) {
-                String overrideVersion = 
project.property(propertyName).toString()
-                String defaultVersion = bomProperties.get(propertyName)
+                def overrideVersion = project.property(propertyName).toString()
+                def defaultVersion = bomProperties.get(propertyName)
 
                 if (overrideVersion != defaultVersion) {
-                    for (String artifactKey : entry.value) {
+                    for (def artifactKey : entry.value) {
                         instance.versionOverrides.put(artifactKey, 
overrideVersion)
                     }
                     LOG.lifecycle(
@@ -135,10 +135,10 @@ class BomManagedVersions {
             return
         }
 
-        Map<String, String> overrides = this.versionOverrides
+        def overrides = this.versionOverrides
         configuration.resolutionStrategy.eachDependency { 
DependencyResolveDetails details ->
-            String key = 
"${details.requested.group}:${details.requested.name}" as String
-            String override = overrides.get(key)
+            def key = "${details.requested.group}:${details.requested.name}" 
as String
+            def override = overrides.get(key)
             if (override != null) {
                 details.useVersion(override)
                 details.because('BOM version override via project property')
@@ -171,38 +171,38 @@ class BomManagedVersions {
      * @param propertyToArtifacts output map to receive property name to 
artifact coordinate mappings
      */
     static void parseBomFile(File pomFile, Map<String, String> bomProperties, 
Map<String, List<String>> propertyToArtifacts) {
-        Document doc = parseXml(pomFile)
+        def doc = parseXml(pomFile)
         if (doc == null) {
             return
         }
         extractProperties(doc, bomProperties)
 
-        NodeList depMgmtNodes = 
doc.getElementsByTagName('dependencyManagement')
+        def depMgmtNodes = doc.getElementsByTagName('dependencyManagement')
         if (depMgmtNodes.length == 0) {
             return
         }
-        Element depMgmt = (Element) depMgmtNodes.item(0)
-        NodeList dependenciesNodes = 
depMgmt.getElementsByTagName('dependencies')
+        def depMgmt = (Element) depMgmtNodes.item(0)
+        def dependenciesNodes = depMgmt.getElementsByTagName('dependencies')
         if (dependenciesNodes.length == 0) {
             return
         }
-        Element dependenciesElement = (Element) dependenciesNodes.item(0)
-        NodeList depNodes = 
dependenciesElement.getElementsByTagName('dependency')
+        def dependenciesElement = (Element) dependenciesNodes.item(0)
+        def depNodes = dependenciesElement.getElementsByTagName('dependency')
 
         for (int i = 0; i < depNodes.length; i++) {
-            Element dep = (Element) depNodes.item(i)
-            String depGroupId = getChildText(dep, 'groupId')
-            String depArtifactId = getChildText(dep, 'artifactId')
-            String depVersion = getChildText(dep, 'version')
+            def dep = (Element) depNodes.item(i)
+            def depGroupId = getChildText(dep, 'groupId')
+            def depArtifactId = getChildText(dep, 'artifactId')
+            def depVersion = getChildText(dep, 'version')
 
             if (!depGroupId || !depArtifactId || !depVersion) {
                 continue
             }
 
             if (depVersion.contains('${')) {
-                String propertyName = extractPropertyName(depVersion)
+                def propertyName = extractPropertyName(depVersion)
                 if (propertyName) {
-                    String artifactKey = "${depGroupId}:${depArtifactId}" as 
String
+                    def artifactKey = "${depGroupId}:${depArtifactId}" as 
String
                     propertyToArtifacts.computeIfAbsent(propertyName) { new 
ArrayList<String>() }.add(artifactKey)
                 }
             }
@@ -215,17 +215,17 @@ class BomManagedVersions {
         Map<String, List<String>> propertyToArtifacts,
         Set<String> processed
     ) {
-        String bomKey = "${group}:${artifact}:${version}" as String
+        def bomKey = "${group}:${artifact}:${version}" as String
         if (!processed.add(bomKey)) {
             return
         }
 
-        File pomFile = resolvePomFile(project, group, artifact, version)
+        def pomFile = resolvePomFile(project, group, artifact, version)
         if (pomFile == null) {
             return
         }
 
-        Document doc = parseXml(pomFile)
+        def doc = parseXml(pomFile)
         if (doc == null) {
             return
         }
@@ -236,7 +236,7 @@ class BomManagedVersions {
 
     private static File resolvePomFile(Project project, String group, String 
artifact, String version) {
         try {
-            Configuration detached = 
project.configurations.detachedConfiguration(
+            def detached = project.configurations.detachedConfiguration(
                 
project.dependencies.create("${group}:${artifact}:${version}@pom" as String)
             )
             detached.transitive = false
@@ -250,7 +250,7 @@ class BomManagedVersions {
 
     private static Document parseXml(File pomFile) {
         try {
-            DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance()
+            def factory = DocumentBuilderFactory.newInstance()
             factory.setNamespaceAware(false)
             factory.setValidating(false)
             factory.setXIncludeAware(false)
@@ -266,18 +266,18 @@ class BomManagedVersions {
     }
 
     private static void extractProperties(Document doc, Map<String, String> 
bomProperties) {
-        NodeList propertiesNodes = doc.getElementsByTagName('properties')
+        def propertiesNodes = doc.getElementsByTagName('properties')
         if (propertiesNodes.length == 0) {
             return
         }
 
-        Element propertiesElement = (Element) propertiesNodes.item(0)
-        NodeList children = propertiesElement.childNodes
+        def propertiesElement = (Element) propertiesNodes.item(0)
+        def children = propertiesElement.childNodes
         for (int i = 0; i < children.length; i++) {
             if (children.item(i) instanceof Element) {
-                Element prop = (Element) children.item(i)
-                String name = prop.tagName
-                String value = prop.textContent?.trim()
+                def prop = (Element) children.item(i)
+                def name = prop.tagName
+                def value = prop.textContent?.trim()
                 if (name && value) {
                     bomProperties.put(name, value)
                 }
@@ -291,33 +291,33 @@ class BomManagedVersions {
         Map<String, List<String>> propertyToArtifacts,
         Set<String> processed
     ) {
-        NodeList depMgmtNodes = 
doc.getElementsByTagName('dependencyManagement')
+        def depMgmtNodes = doc.getElementsByTagName('dependencyManagement')
         if (depMgmtNodes.length == 0) {
             return
         }
 
-        Element depMgmt = (Element) depMgmtNodes.item(0)
-        NodeList dependenciesNodes = 
depMgmt.getElementsByTagName('dependencies')
+        def depMgmt = (Element) depMgmtNodes.item(0)
+        def dependenciesNodes = depMgmt.getElementsByTagName('dependencies')
         if (dependenciesNodes.length == 0) {
             return
         }
 
-        Element dependenciesElement = (Element) dependenciesNodes.item(0)
-        NodeList depNodes = 
dependenciesElement.getElementsByTagName('dependency')
+        def dependenciesElement = (Element) dependenciesNodes.item(0)
+        def depNodes = dependenciesElement.getElementsByTagName('dependency')
 
         for (int i = 0; i < depNodes.length; i++) {
-            Element dep = (Element) depNodes.item(i)
-            String depGroupId = getChildText(dep, 'groupId')
-            String depArtifactId = getChildText(dep, 'artifactId')
-            String depVersion = getChildText(dep, 'version')
-            String depScope = getChildText(dep, 'scope')
+            def dep = (Element) depNodes.item(i)
+            def depGroupId = getChildText(dep, 'groupId')
+            def depArtifactId = getChildText(dep, 'artifactId')
+            def depVersion = getChildText(dep, 'version')
+            def depScope = getChildText(dep, 'scope')
 
             if (!depGroupId || !depArtifactId) {
                 continue
             }
 
             if ('import' == depScope) {
-                String resolvedVersion = interpolateProperties(depVersion, 
bomProperties)
+                def resolvedVersion = interpolateProperties(depVersion, 
bomProperties)
                 if (resolvedVersion) {
                     processBom(project, depGroupId, depArtifactId, 
resolvedVersion,
                         bomProperties, propertyToArtifacts, processed)
@@ -326,9 +326,9 @@ class BomManagedVersions {
             }
 
             if (depVersion && depVersion.contains('${')) {
-                String propertyName = extractPropertyName(depVersion)
+                def propertyName = extractPropertyName(depVersion)
                 if (propertyName) {
-                    String artifactKey = "${depGroupId}:${depArtifactId}" as 
String
+                    def artifactKey = "${depGroupId}:${depArtifactId}" as 
String
                     propertyToArtifacts.computeIfAbsent(propertyName) { new 
ArrayList<String>() }.add(artifactKey)
                 }
             }
@@ -352,14 +352,14 @@ class BomManagedVersions {
             return value
         }
 
-        String result = value
+        def result = value
         int maxIterations = MAX_PROPERTY_INTERPOLATION_DEPTH
         while (result.contains('${') && maxIterations-- > 0) {
-            String propertyName = extractPropertyName(result)
+            def propertyName = extractPropertyName(result)
             if (propertyName == null) {
                 break
             }
-            String resolved = properties.get(propertyName)
+            def resolved = properties.get(propertyName)
             if (resolved == null) {
                 break
             }
@@ -369,7 +369,7 @@ class BomManagedVersions {
     }
 
     private static String getChildText(Element parent, String childTagName) {
-        NodeList children = parent.getElementsByTagName(childTagName)
+        def children = parent.getElementsByTagName(childTagName)
         if (children.length == 0) {
             return null
         }
diff --git 
a/grails-gradle/bom-property-overrides/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesExtension.groovy
 
b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesExtension.groovy
similarity index 100%
rename from 
grails-gradle/bom-property-overrides/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesExtension.groovy
rename to 
grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesExtension.groovy
diff --git 
a/grails-gradle/bom-property-overrides/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPlugin.groovy
 
b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPlugin.groovy
similarity index 83%
rename from 
grails-gradle/bom-property-overrides/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPlugin.groovy
rename to 
grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPlugin.groovy
index 02f9f1fe47..60d36cde08 100644
--- 
a/grails-gradle/bom-property-overrides/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPlugin.groovy
+++ 
b/grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPlugin.groovy
@@ -27,14 +27,14 @@ import org.gradle.api.artifacts.ModuleDependency
 import org.gradle.api.attributes.Category
 
 /**
- * Standalone Gradle plugin that enables Maven-style property-based version
- * overrides for {@code platform()} BOMs.
+ * Gradle plugin that enables Maven-style property-based version overrides
+ * for {@code platform()} BOMs.
  *
- * <p>This is the BOM-agnostic, generically reusable extraction of the
- * property-override mechanism that historically lived inside the Spring
- * Dependency Management plugin. Apply it to any project that consumes a
- * BOM published with version property references in its
- * {@code <dependencyManagement>} block:</p>
+ * <p>This is the BOM-agnostic replacement for the Spring Dependency
+ * Management plugin's property-override feature. The plugin is shipped as
+ * part of {@code grails-gradle-plugins} but can be applied to any project
+ * (Grails or otherwise) that consumes a BOM published with version
+ * property references in its {@code <dependencyManagement>} block:</p>
  *
  * <pre>
  * plugins {
@@ -86,7 +86,7 @@ class BomPropertyOverridesPlugin implements Plugin<Project> {
 
     @Override
     void apply(Project project) {
-        BomPropertyOverridesExtension extension = project.extensions.create(
+        def extension = project.extensions.create(
                 BomPropertyOverridesExtension.EXTENSION_NAME,
                 BomPropertyOverridesExtension,
                 project.objects
@@ -102,7 +102,7 @@ class BomPropertyOverridesPlugin implements Plugin<Project> 
{
      * to all project configurations. Visible for testing.
      */
     static void applyOverrides(Project project, BomPropertyOverridesExtension 
extension) {
-        Set<String> bomCoordinates = new LinkedHashSet<>()
+        def bomCoordinates = new LinkedHashSet<String>()
 
         if (extension.autoDetect.get()) {
             bomCoordinates.addAll(detectDeclaredBoms(project))
@@ -118,7 +118,7 @@ class BomPropertyOverridesPlugin implements Plugin<Project> 
{
             return
         }
 
-        BomManagedVersions managedVersions = 
BomManagedVersions.resolve(project, bomCoordinates)
+        def managedVersions = BomManagedVersions.resolve(project, 
bomCoordinates)
         if (!managedVersions.hasOverrides()) {
             return
         }
@@ -134,7 +134,7 @@ class BomPropertyOverridesPlugin implements Plugin<Project> 
{
      * Visible for testing.
      */
     static Set<String> detectDeclaredBoms(Project project) {
-        Set<String> coordinates = new LinkedHashSet<>()
+        def coordinates = new LinkedHashSet<String>()
 
         project.configurations.each { Configuration conf ->
             for (Dependency dep : conf.dependencies) {
@@ -144,9 +144,9 @@ class BomPropertyOverridesPlugin implements Plugin<Project> 
{
                 if (!isPlatformDependency((ModuleDependency) dep)) {
                     continue
                 }
-                String group = dep.group
-                String name = dep.name
-                String version = dep.version
+                def group = dep.group
+                def name = dep.name
+                def version = dep.version
                 if (group && name && version) {
                     coordinates.add("${group}:${name}:${version}" as String)
                 }
@@ -157,11 +157,11 @@ class BomPropertyOverridesPlugin implements 
Plugin<Project> {
     }
 
     private static boolean isPlatformDependency(ModuleDependency dep) {
-        Object categoryAttr = 
dep.attributes.getAttribute(Category.CATEGORY_ATTRIBUTE)
+        def categoryAttr = 
dep.attributes.getAttribute(Category.CATEGORY_ATTRIBUTE)
         if (categoryAttr == null) {
             return false
         }
-        String category = categoryAttr.toString()
+        def category = categoryAttr.toString()
         return category == Category.REGULAR_PLATFORM || category == 
Category.ENFORCED_PLATFORM
     }
 }
diff --git 
a/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomManagedVersionsSpec.groovy
 
b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomManagedVersionsSpec.groovy
similarity index 81%
rename from 
grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomManagedVersionsSpec.groovy
rename to 
grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomManagedVersionsSpec.groovy
index 9840c4b90d..86489139c0 100644
--- 
a/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomManagedVersionsSpec.groovy
+++ 
b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomManagedVersionsSpec.groovy
@@ -35,9 +35,9 @@ class BomManagedVersionsSpec extends Specification {
 
     def "parseBomFile extracts properties from BOM POM"() {
         given:
-        File pomFile = new 
File(getClass().getClassLoader().getResource('test-poms/test-bom.pom').toURI())
-        Map<String, String> bomProperties = [:]
-        Map<String, List<String>> propertyToArtifacts = [:]
+        def pomFile = new 
File(getClass().getClassLoader().getResource('test-poms/test-bom.pom').toURI())
+        def bomProperties = [:] as Map<String, String>
+        def propertyToArtifacts = [:] as Map<String, List<String>>
 
         when:
         BomManagedVersions.parseBomFile(pomFile, bomProperties, 
propertyToArtifacts)
@@ -50,9 +50,9 @@ class BomManagedVersionsSpec extends Specification {
 
     def "parseBomFile maps property references to artifact coordinates"() {
         given:
-        File pomFile = new 
File(getClass().getClassLoader().getResource('test-poms/test-bom.pom').toURI())
-        Map<String, String> bomProperties = [:]
-        Map<String, List<String>> propertyToArtifacts = [:]
+        def pomFile = new 
File(getClass().getClassLoader().getResource('test-poms/test-bom.pom').toURI())
+        def bomProperties = [:] as Map<String, String>
+        def propertyToArtifacts = [:] as Map<String, List<String>>
 
         when:
         BomManagedVersions.parseBomFile(pomFile, bomProperties, 
propertyToArtifacts)
@@ -73,9 +73,9 @@ class BomManagedVersionsSpec extends Specification {
 
     def "parseBomFile ignores dependencies with hardcoded versions"() {
         given:
-        File pomFile = new 
File(getClass().getClassLoader().getResource('test-poms/test-bom.pom').toURI())
-        Map<String, String> bomProperties = [:]
-        Map<String, List<String>> propertyToArtifacts = [:]
+        def pomFile = new 
File(getClass().getClassLoader().getResource('test-poms/test-bom.pom').toURI())
+        def bomProperties = [:] as Map<String, String>
+        def propertyToArtifacts = [:] as Map<String, List<String>>
 
         when:
         BomManagedVersions.parseBomFile(pomFile, bomProperties, 
propertyToArtifacts)
diff --git 
a/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginFunctionalSpec.groovy
 
b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginFunctionalSpec.groovy
similarity index 95%
rename from 
grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginFunctionalSpec.groovy
rename to 
grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginFunctionalSpec.groovy
index 7b9f1743ba..95a517b3a8 100644
--- 
a/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginFunctionalSpec.groovy
+++ 
b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginFunctionalSpec.groovy
@@ -18,8 +18,10 @@
  */
 package org.grails.gradle.plugin.bom
 
+import org.grails.gradle.plugin.core.GradleSpecification
+
 /**
- * End-to-end functional test for the standalone
+ * End-to-end functional test for the
  * {@code org.apache.grails.gradle.bom-property-overrides} plugin.
  *
  * <p>Uses Gradle TestKit to apply the plugin in isolation (without any
diff --git 
a/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginSpec.groovy
 
b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginSpec.groovy
similarity index 78%
rename from 
grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginSpec.groovy
rename to 
grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginSpec.groovy
index c97f164c09..2210a2e834 100644
--- 
a/grails-gradle/bom-property-overrides/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginSpec.groovy
+++ 
b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/bom/BomPropertyOverridesPluginSpec.groovy
@@ -37,14 +37,13 @@ class BomPropertyOverridesPluginSpec extends Specification {
 
     def "applying the plugin registers the bomPropertyOverrides extension"() {
         given:
-        Project project = ProjectBuilder.builder().build()
+        def project = ProjectBuilder.builder().build()
 
         when:
         project.plugins.apply(BomPropertyOverridesPlugin)
 
         then:
-        BomPropertyOverridesExtension extension =
-                project.extensions.findByType(BomPropertyOverridesExtension)
+        def extension = 
project.extensions.findByType(BomPropertyOverridesExtension)
         extension != null
         extension.autoDetect.get() == true
         extension.boms.get().isEmpty()
@@ -52,10 +51,9 @@ class BomPropertyOverridesPluginSpec extends Specification {
 
     def "extension bom() method registers explicit BOM coordinates"() {
         given:
-        Project project = ProjectBuilder.builder().build()
+        def project = ProjectBuilder.builder().build()
         project.plugins.apply(BomPropertyOverridesPlugin)
-        BomPropertyOverridesExtension extension =
-                project.extensions.getByType(BomPropertyOverridesExtension)
+        def extension = 
project.extensions.getByType(BomPropertyOverridesExtension)
 
         when:
         extension.bom('org.example:my-bom:1.0.0')
@@ -67,10 +65,9 @@ class BomPropertyOverridesPluginSpec extends Specification {
 
     def "extension boms() vararg method registers multiple BOMs"() {
         given:
-        Project project = ProjectBuilder.builder().build()
+        def project = ProjectBuilder.builder().build()
         project.plugins.apply(BomPropertyOverridesPlugin)
-        BomPropertyOverridesExtension extension =
-                project.extensions.getByType(BomPropertyOverridesExtension)
+        def extension = 
project.extensions.getByType(BomPropertyOverridesExtension)
 
         when:
         extension.boms('org.example:a:1.0.0', 'org.example:b:2.0.0', 
'org.example:c:3.0.0')
@@ -81,7 +78,7 @@ class BomPropertyOverridesPluginSpec extends Specification {
 
     def "detectDeclaredBoms finds regular platform() dependencies"() {
         given:
-        Project project = ProjectBuilder.builder().build()
+        def project = ProjectBuilder.builder().build()
         project.plugins.apply('java')
         project.dependencies.add(
                 'implementation',
@@ -89,7 +86,7 @@ class BomPropertyOverridesPluginSpec extends Specification {
         )
 
         when:
-        Set<String> coordinates = 
BomPropertyOverridesPlugin.detectDeclaredBoms(project)
+        def coordinates = 
BomPropertyOverridesPlugin.detectDeclaredBoms(project)
 
         then:
         'org.example:test-bom:1.0.0' in coordinates
@@ -97,7 +94,7 @@ class BomPropertyOverridesPluginSpec extends Specification {
 
     def "detectDeclaredBoms finds enforcedPlatform() dependencies"() {
         given:
-        Project project = ProjectBuilder.builder().build()
+        def project = ProjectBuilder.builder().build()
         project.plugins.apply('java')
         project.dependencies.add(
                 'implementation',
@@ -105,7 +102,7 @@ class BomPropertyOverridesPluginSpec extends Specification {
         )
 
         when:
-        Set<String> coordinates = 
BomPropertyOverridesPlugin.detectDeclaredBoms(project)
+        def coordinates = 
BomPropertyOverridesPlugin.detectDeclaredBoms(project)
 
         then:
         'org.example:enforced-bom:2.0.0' in coordinates
@@ -113,12 +110,12 @@ class BomPropertyOverridesPluginSpec extends 
Specification {
 
     def "detectDeclaredBoms ignores non-platform dependencies"() {
         given:
-        Project project = ProjectBuilder.builder().build()
+        def project = ProjectBuilder.builder().build()
         project.plugins.apply('java')
         project.dependencies.add('implementation', 
'org.example:regular-lib:1.0.0')
 
         when:
-        Set<String> coordinates = 
BomPropertyOverridesPlugin.detectDeclaredBoms(project)
+        def coordinates = 
BomPropertyOverridesPlugin.detectDeclaredBoms(project)
 
         then:
         coordinates.isEmpty()
@@ -126,7 +123,7 @@ class BomPropertyOverridesPluginSpec extends Specification {
 
     def "detectDeclaredBoms deduplicates the same BOM declared on multiple 
configurations"() {
         given:
-        Project project = ProjectBuilder.builder().build()
+        def project = ProjectBuilder.builder().build()
         project.plugins.apply('java')
         project.dependencies.add(
                 'implementation',
@@ -138,7 +135,7 @@ class BomPropertyOverridesPluginSpec extends Specification {
         )
 
         when:
-        Set<String> coordinates = 
BomPropertyOverridesPlugin.detectDeclaredBoms(project)
+        def coordinates = 
BomPropertyOverridesPlugin.detectDeclaredBoms(project)
 
         then:
         coordinates == ['org.example:shared-bom:1.0.0'] as Set
diff --git 
a/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/BomPlatformFunctionalSpec.groovy
 
b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/BomPlatformFunctionalSpec.groovy
index efd0b2ac69..521610c595 100644
--- 
a/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/BomPlatformFunctionalSpec.groovy
+++ 
b/grails-gradle/plugins/src/test/groovy/org/grails/gradle/plugin/core/BomPlatformFunctionalSpec.groovy
@@ -23,9 +23,9 @@ package org.grails.gradle.plugin.core
  *
  * <p>Uses Gradle TestKit to verify that the Grails Gradle plugin correctly
  * applies {@code grails-bom} as a Gradle {@code platform()} dependency,
- * applies the standalone
- * {@code org.apache.grails.gradle.bom-property-overrides} plugin, and no
- * longer depends on the Spring Dependency Management plugin.</p>
+ * applies the {@code org.apache.grails.gradle.bom-property-overrides}
+ * plugin, and no longer depends on the Spring Dependency Management
+ * plugin.</p>
  *
  * @since 8.0
  * @see GrailsGradlePlugin#applyGrailsBom
diff --git 
a/grails-gradle/bom-property-overrides/src/test/resources/test-poms/test-bom.pom
 b/grails-gradle/plugins/src/test/resources/test-poms/test-bom.pom
similarity index 100%
rename from 
grails-gradle/bom-property-overrides/src/test/resources/test-poms/test-bom.pom
rename to grails-gradle/plugins/src/test/resources/test-poms/test-bom.pom
diff --git 
a/grails-gradle/bom-property-overrides/src/test/resources/test-projects/bom-property-overrides-basic/build.gradle
 
b/grails-gradle/plugins/src/test/resources/test-projects/bom-property-overrides-basic/build.gradle
similarity index 100%
rename from 
grails-gradle/bom-property-overrides/src/test/resources/test-projects/bom-property-overrides-basic/build.gradle
rename to 
grails-gradle/plugins/src/test/resources/test-projects/bom-property-overrides-basic/build.gradle
diff --git 
a/grails-gradle/bom-property-overrides/src/test/resources/test-projects/bom-property-overrides-basic/gradle.properties
 
b/grails-gradle/plugins/src/test/resources/test-projects/bom-property-overrides-basic/gradle.properties
similarity index 100%
rename from 
grails-gradle/bom-property-overrides/src/test/resources/test-projects/bom-property-overrides-basic/gradle.properties
rename to 
grails-gradle/plugins/src/test/resources/test-projects/bom-property-overrides-basic/gradle.properties
diff --git 
a/grails-gradle/bom-property-overrides/src/test/resources/test-projects/bom-property-overrides-basic/settings.gradle
 
b/grails-gradle/plugins/src/test/resources/test-projects/bom-property-overrides-basic/settings.gradle
similarity index 100%
rename from 
grails-gradle/bom-property-overrides/src/test/resources/test-projects/bom-property-overrides-basic/settings.gradle
rename to 
grails-gradle/plugins/src/test/resources/test-projects/bom-property-overrides-basic/settings.gradle
diff --git a/grails-gradle/settings.gradle b/grails-gradle/settings.gradle
index fc1a9e16dd..406ae33b6b 100644
--- a/grails-gradle/settings.gradle
+++ b/grails-gradle/settings.gradle
@@ -78,6 +78,3 @@ project(':grails-gradle-model').projectDir = file('model')
 
 include 'grails-gradle-tasks'
 project(':grails-gradle-tasks').projectDir = file('tasks')
-
-include 'grails-gradle-bom-property-overrides'
-project(':grails-gradle-bom-property-overrides').projectDir = 
file('bom-property-overrides')

Reply via email to