This is an automated email from the ASF dual-hosted git repository. jdaugherty pushed a commit to branch grails-geb in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 99fd77beae471b7f8e3aeb224d2789868a5c1fe9 Author: James Daugherty <[email protected]> AuthorDate: Sun Apr 20 11:34:16 2025 -0400 Update pom property reference extract --- grails-bom/build.gradle | 13 +++++----- .../tasks/bom/ExtractDependenciesTask.groovy | 8 +++--- .../tasks/bom/ExtractedDependencyConstraint.groovy | 29 ++++++++++++++++++---- .../gradle/tasks/bom/PropertyNameCalculator.groovy | 4 +-- 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/grails-bom/build.gradle b/grails-bom/build.gradle index 9f3523d25a..b53f9cf02e 100644 --- a/grails-bom/build.gradle +++ b/grails-bom/build.gradle @@ -1,4 +1,5 @@ import org.apache.grails.gradle.tasks.bom.ExtractDependenciesTask +import org.apache.grails.gradle.tasks.bom.ExtractedDependencyConstraint import org.apache.grails.gradle.tasks.bom.PropertyNameCalculator // Copyright 2024 the original author or authors. @@ -119,14 +120,14 @@ ext { PropertyNameCalculator propertyNameCalculator = new PropertyNameCalculator(combinedPlatforms, combinedDependencies, combinedVersions) if (inlineVersion) { - String propertyName = propertyNameCalculator.calculate(groupId, artifactId, inlineVersion, isBom) - if (propertyName) { - // Replace the version in the pom with a property reference - String propertyReference = "\${${propertyName}}" - dep.version[0].value = propertyReference + ExtractedDependencyConstraint extractedConstraint = propertyNameCalculator.calculate(groupId, artifactId, inlineVersion, isBom) + if (extractedConstraint?.versionPropertyReference) { + // use the property reference instead of the hard coded version so that it can be + // overriden by the spring boot dependency management plugin + dep.version[0].value = extractedConstraint.versionPropertyReference // Add an entry in the <properties> node with the actual version number - pomProperties.put(propertyName, inlineVersion) + pomProperties.put(extractedConstraint.versionPropertyName, inlineVersion) } } else if (!inlineVersion) { throw new GradleException("Dependency $groupId:$artifactId does not have a version.") diff --git a/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy b/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy index a44d9c2614..5f552a630c 100644 --- a/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy +++ b/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractDependenciesTask.groovy @@ -15,6 +15,8 @@ import org.gradle.api.provider.Property import org.gradle.api.tasks.* import io.spring.gradle.dependencymanagement.org.apache.maven.model.io.xpp3.MavenXpp3Reader +import java.util.regex.Pattern + /** * Grails Bom files define their dependencies in a series of maps, this task takes those maps and generates an * asciidoc file containing all of the resolve dependencies and their versions in the bom. @@ -90,7 +92,7 @@ abstract class ExtractDependenciesTask extends DefaultTask { List lines = [] constraints.values().sort { ExtractedDependencyConstraint a, ExtractedDependencyConstraint b -> a.groupId <=> b.groupId ?: a.artifactId <=> b.artifactId }.withIndex().each { int position = it.v2 + 1 - lines << "| ${position} | ${it.v1.groupId} | ${it.v1.artifactId} | ${it.v1.version} | ${it.v1.versionProperty ?: ''} | ${it.v1.source} " + lines << "| ${position} | ${it.v1.groupId} | ${it.v1.artifactId} | ${it.v1.version} | ${it.v1.versionPropertyReference ?: ''} | ${it.v1.source} " } lines } @@ -209,7 +211,7 @@ abstract class ExtractDependenciesTask extends DefaultTask { String propertyName = depItem.version.contains('$') ? depItem.version : null ExtractedDependencyConstraint constraint = new ExtractedDependencyConstraint( groupId: resolvedCoordinates.groupId, artifactId: resolvedCoordinates.artifactId, - version: resolvedVersion, versionProperty: propertyName, source: bomCoordinates.artifactId + version: resolvedVersion, versionPropertyReference: propertyName, source: bomCoordinates.artifactId ) if (depItem.scope == 'import') { constraints.put(resolvedCoordinates, constraint) @@ -238,7 +240,7 @@ abstract class ExtractDependenciesTask extends DefaultTask { } private String resolveMavenProperty(String errorDescription, String dynamicVersion, Map properties, int maxIterations = 10) { - def dynamicPattern = ~/\$\{([^}]+)\}/ + Pattern dynamicPattern = ~/\$\{([^}]+)\}/ String expandedVersion = dynamicVersion int iterations = 0 diff --git a/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractedDependencyConstraint.groovy b/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractedDependencyConstraint.groovy index 672a211974..995ce74d9f 100644 --- a/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractedDependencyConstraint.groovy +++ b/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/ExtractedDependencyConstraint.groovy @@ -4,11 +4,14 @@ import groovy.transform.CompileStatic import groovy.transform.MapConstructor import groovy.transform.ToString +import java.util.regex.Matcher +import java.util.regex.Pattern + @CompileStatic -@MapConstructor(includes = ['groupId', 'artifactId', 'version', 'versionProperty', 'source'], includeSuperProperties = true) -@ToString(includes = ['groupId', 'artifactId', 'version', 'versionProperty', 'source'], includeSuperProperties = true) +@MapConstructor(includes = ['groupId', 'artifactId', 'version', 'versionPropertyReference', 'source'], includeSuperProperties = true) +@ToString(includes = ['groupId', 'artifactId', 'version', 'versionPropertyReference', 'source'], includeSuperProperties = true) class ExtractedDependencyConstraint extends CoordinateVersionHolder { - String versionProperty + String versionPropertyReference String source ExtractedDependencyConstraint(String coordinates) { @@ -19,7 +22,23 @@ class ExtractedDependencyConstraint extends CoordinateVersionHolder { } } - String getVersionProperty() { - versionProperty == '${project.version}' ? '' : versionProperty + String getVersionPropertyReference() { + versionPropertyReference == '${project.version}' ? '' : versionPropertyReference + } + + String getVersionPropertyName() { + String property = getVersionPropertyReference() + if(!property) { + return null + } + + Pattern dynamicPattern = ~/\$\{([^}]+)\}/ + + Matcher matcher = property =~ dynamicPattern + if(!matcher.find()) { + throw new IllegalStateException("Invalid Verison Property: ${property}") + } + + matcher.group(1) } } \ No newline at end of file diff --git a/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/PropertyNameCalculator.groovy b/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/PropertyNameCalculator.groovy index 56808ff902..e8df012bde 100644 --- a/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/PropertyNameCalculator.groovy +++ b/grails-gradle/docs-core/src/main/groovy/org/apache/grails/gradle/tasks/bom/PropertyNameCalculator.groovy @@ -41,13 +41,13 @@ class PropertyNameCalculator { return null } - if(found.versionProperty) { + if(found.versionPropertyReference) { return found } String propertyName = determinePossibleKey(found, coordinateMapping) if (propertyName) { - found.versionProperty = propertyName ? "\${${propertyName}}" : '' as String + found.versionPropertyReference = propertyName ? "\${${propertyName}}" : '' as String return found }
