Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ import org.gradle.api.plugins.JavaPlatformPlugin
*/
class PropertyNameCalculator {

static final String GRAILS_VERSION_PROPERTY = 'grails.version'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would you ever override different versions of grails projects? Why not just change the version of the bom you're using instead?

Copy link
Contributor Author

@codeconsole codeconsole Nov 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jdaugherty Compare the before (M3) and after BOMs.

I am saying overriding is better than using a grails property for everyone because if you did that you would get version conflicts from transitive dependencies.

I am recommending using

<grails.version>7.1.0-SNAPSHOT</grails.version>

instead of

    <grails.async.version>7.1.0-SNAPSHOT</grails.async.version>
    <grails.async.core.version>7.1.0-SNAPSHOT</grails.async.core.version>
    <grails.async.gpars.version>7.1.0-SNAPSHOT</grails.async.gpars.version>
    <grails.async.rxjava.version>7.1.0-SNAPSHOT</grails.async.rxjava.version>
    <grails.async.rxjava2.version>7.1.0-SNAPSHOT</grails.async.rxjava2.version>
    <grails.async.rxjava3.version>7.1.0-SNAPSHOT</grails.async.rxjava3.version>
    <grails.bootstrap.version>7.1.0-SNAPSHOT</grails.bootstrap.version>
    <grails.cache.version>7.1.0-SNAPSHOT</grails.cache.version>
    <grails.codecs.version>7.1.0-SNAPSHOT</grails.codecs.version>
    <grails.codecs.core.version>7.1.0-SNAPSHOT</grails.codecs.core.version>
    <grails.common.version>7.1.0-SNAPSHOT</grails.common.version>
    <grails.console.version>7.1.0-SNAPSHOT</grails.console.version>
    <grails.controllers.version>7.1.0-SNAPSHOT</grails.controllers.version>
    <grails.converters.version>7.1.0-SNAPSHOT</grails.converters.version>
    <grails.core.version>7.1.0-SNAPSHOT</grails.core.version>
    <grails.data.hibernate5.version>7.1.0-SNAPSHOT</grails.data.hibernate5.version>
    <grails.data.hibernate5.core.version>7.1.0-SNAPSHOT</grails.data.hibernate5.core.version>
    <grails.data.hibernate5.dbmigration.version>7.1.0-SNAPSHOT</grails.data.hibernate5.dbmigration.version>
    <grails.data.hibernate5.spring.boot.version>7.1.0-SNAPSHOT</grails.data.hibernate5.spring.boot.version>
    <grails.data.mongodb.version>7.1.0-SNAPSHOT</grails.data.mongodb.version>
    <grails.data.mongodb.bson.version>7.1.0-SNAPSHOT</grails.data.mongodb.bson.version>
    <grails.data.mongodb.core.version>7.1.0-SNAPSHOT</grails.data.mongodb.core.version>
    <grails.data.mongodb.ext.version>7.1.0-SNAPSHOT</grails.data.mongodb.ext.version>
    <grails.data.mongodb.gson.templates.version>7.1.0-SNAPSHOT</grails.data.mongodb.gson.templates.version>
    <grails.data.mongodb.spring.boot.version>7.1.0-SNAPSHOT</grails.data.mongodb.spring.boot.version>
    <grails.data.simple.version>7.1.0-SNAPSHOT</grails.data.simple.version>
    <grails.databinding.version>7.1.0-SNAPSHOT</grails.databinding.version>
    <grails.databinding.core.version>7.1.0-SNAPSHOT</grails.databinding.core.version>
    <grails.datamapping.async.version>7.1.0-SNAPSHOT</grails.datamapping.async.version>
    <grails.datamapping.core.version>7.1.0-SNAPSHOT</grails.datamapping.core.version>
    <grails.datamapping.core.test.version>7.1.0-SNAPSHOT</grails.datamapping.core.test.version>
    <grails.datamapping.support.version>7.1.0-SNAPSHOT</grails.datamapping.support.version>
    <grails.datamapping.tck.version>7.1.0-SNAPSHOT</grails.datamapping.tck.version>
    <grails.datamapping.validation.version>7.1.0-SNAPSHOT</grails.datamapping.validation.version>
    <grails.datasource.version>7.1.0-SNAPSHOT</grails.datasource.version>
    <grails.datastore.async.version>7.1.0-SNAPSHOT</grails.datastore.async.version>
    <grails.datastore.core.version>7.1.0-SNAPSHOT</grails.datastore.core.version>
    <grails.datastore.web.version>7.1.0-SNAPSHOT</grails.datastore.web.version>
    <grails.dependencies.assets.version>7.1.0-SNAPSHOT</grails.dependencies.assets.version>
    <grails.dependencies.starter.web.version>7.1.0-SNAPSHOT</grails.dependencies.starter.web.version>
    <grails.dependencies.test.version>7.1.0-SNAPSHOT</grails.dependencies.test.version>
    <grails.domain.class.version>7.1.0-SNAPSHOT</grails.domain.class.version>
    <grails.encoder.version>7.1.0-SNAPSHOT</grails.encoder.version>
    <grails.events.version>7.1.0-SNAPSHOT</grails.events.version>
    <grails.events.compat.version>7.1.0-SNAPSHOT</grails.events.compat.version>
    <grails.events.core.version>7.1.0-SNAPSHOT</grails.events.core.version>
    <grails.events.gpars.version>7.1.0-SNAPSHOT</grails.events.gpars.version>
    <grails.events.rxjava.version>7.1.0-SNAPSHOT</grails.events.rxjava.version>
    <grails.events.rxjava2.version>7.1.0-SNAPSHOT</grails.events.rxjava2.version>
    <grails.events.rxjava3.version>7.1.0-SNAPSHOT</grails.events.rxjava3.version>
    <grails.events.spring.version>7.1.0-SNAPSHOT</grails.events.spring.version>
    <grails.events.transforms.version>7.1.0-SNAPSHOT</grails.events.transforms.version>
    <grails.fields.version>7.1.0-SNAPSHOT</grails.fields.version>
    <grails.geb.version>7.1.0-SNAPSHOT</grails.geb.version>
    <grails.gsp.version>7.1.0-SNAPSHOT</grails.gsp.version>
    <grails.gsp.core.version>7.1.0-SNAPSHOT</grails.gsp.core.version>
    <grails.gsp.spring.boot.version>7.1.0-SNAPSHOT</grails.gsp.spring.boot.version>
    <grails.i18n.version>7.1.0-SNAPSHOT</grails.i18n.version>
    <grails.interceptors.version>7.1.0-SNAPSHOT</grails.interceptors.version>
    <grails.layout.version>7.1.0-SNAPSHOT</grails.layout.version>
    <grails.logging.version>7.1.0-SNAPSHOT</grails.logging.version>
    <grails.micronaut.version>7.1.0-SNAPSHOT</grails.micronaut.version>
    <grails.mimetypes.version>7.1.0-SNAPSHOT</grails.mimetypes.version>
    <base.version>7.1.0-SNAPSHOT</base.version>
    <plugin.version>7.1.0-SNAPSHOT</plugin.version>
    <profile.version>7.1.0-SNAPSHOT</profile.version>
    <rest.api.version>7.1.0-SNAPSHOT</rest.api.version>
    <rest.api.plugin.version>7.1.0-SNAPSHOT</rest.api.plugin.version>
    <web.version>7.1.0-SNAPSHOT</web.version>
    <web.plugin.version>7.1.0-SNAPSHOT</web.plugin.version>
    <grails.rest.transforms.version>7.1.0-SNAPSHOT</grails.rest.transforms.version>
    <grails.scaffolding.version>7.1.0-SNAPSHOT</grails.scaffolding.version>
    <grails.services.version>7.1.0-SNAPSHOT</grails.services.version>
    <grails.shell.cli.version>7.1.0-SNAPSHOT</grails.shell.cli.version>
    <grails.sitemesh3.version>7.1.0-SNAPSHOT</grails.sitemesh3.version>
    <grails.spring.version>7.1.0-SNAPSHOT</grails.spring.version>
    <grails.taglib.version>7.1.0-SNAPSHOT</grails.taglib.version>
    <grails.test.core.version>7.1.0-SNAPSHOT</grails.test.core.version>
    <grails.testing.support.core.version>7.1.0-SNAPSHOT</grails.testing.support.core.version>
    <grails.testing.support.datamapping.version>7.1.0-SNAPSHOT</grails.testing.support.datamapping.version>
    <grails.testing.support.mongodb.version>7.1.0-SNAPSHOT</grails.testing.support.mongodb.version>
    <grails.testing.support.views.gson.version>7.1.0-SNAPSHOT</grails.testing.support.views.gson.version>
    <grails.testing.support.web.version>7.1.0-SNAPSHOT</grails.testing.support.web.version>
    <grails.url.mappings.version>7.1.0-SNAPSHOT</grails.url.mappings.version>
    <grails.validation.version>7.1.0-SNAPSHOT</grails.validation.version>
    <grails.views.core.version>7.1.0-SNAPSHOT</grails.views.core.version>
    <grails.views.gson.version>7.1.0-SNAPSHOT</grails.views.gson.version>
    <grails.views.markup.version>7.1.0-SNAPSHOT</grails.views.markup.version>
    <grails.web.boot.version>7.1.0-SNAPSHOT</grails.web.boot.version>
    <grails.web.common.version>7.1.0-SNAPSHOT</grails.web.common.version>
    <grails.web.core.version>7.1.0-SNAPSHOT</grails.web.core.version>
    <grails.web.databinding.version>7.1.0-SNAPSHOT</grails.web.databinding.version>
    <grails.web.gsp.version>7.1.0-SNAPSHOT</grails.web.gsp.version>
    <grails.web.gsp.taglib.version>7.1.0-SNAPSHOT</grails.web.gsp.taglib.version>
    <grails.web.jsp.version>7.1.0-SNAPSHOT</grails.web.jsp.version>
    <grails.web.mvc.version>7.1.0-SNAPSHOT</grails.web.mvc.version>
    <grails.web.taglib.version>7.1.0-SNAPSHOT</grails.web.taglib.version>
    <grails.web.url.mappings.version>7.1.0-SNAPSHOT</grails.web.url.mappings.version>
    <grails.gradle.plugins.version>7.1.0-SNAPSHOT</grails.gradle.plugins.version>
    <grails.gradle.model.version>7.1.0-SNAPSHOT</grails.gradle.model.version>
    <grails.gradle.common.version>7.1.0-SNAPSHOT</grails.gradle.common.version>
    <grails.gradle.tasks.version>7.1.0-SNAPSHOT</grails.gradle.tasks.version>
...


final Map<String, String> keysToPlatformCoordinates = [:]
final Map<String, ExtractedDependencyConstraint> platformDefinitions = [:]

Expand All @@ -41,22 +43,21 @@ class PropertyNameCalculator {
this.versions.putAll(definitionVersions)
}

void addProjects(Collection<Project> projects) {
void addProjects(Collection<Project> projects, String grailsVersion) {
versions.put(GRAILS_VERSION_PROPERTY, grailsVersion)

for (Project project : projects) {
if (project.plugins.hasPlugin(JavaPlatformPlugin) || !project.extensions.findByName('grailsPublish')) {
continue
}

String artifactId = (project.findProperty('pomArtifactId') ?: project.name)
String baseVersionName = artifactId.replaceAll('-', '.')
String versionName = "${baseVersionName}.version" as String
String coordinates = "${project.group}:${artifactId}:${project.version}" as String
ExtractedDependencyConstraint constraint = new ExtractedDependencyConstraint(coordinates as String)
constraint.versionPropertyReference = "\${${versionName}}" as String
constraint.versionPropertyReference = "\${${GRAILS_VERSION_PROPERTY}}" as String

definitions.put(coordinates, constraint)
keysToCoordinates.put(coordinates, baseVersionName)
versions.put(versionName, project.version as String)
keysToCoordinates.put(coordinates, 'grails')
}
}

Expand Down
16 changes: 8 additions & 8 deletions grails-bom/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ ext {
def deps = depMgmt?.dependencies?.getAt(0)
if (deps) {
Map<String, String> pomProperties = [:]
PropertyNameCalculator propertyNameCalculator = new PropertyNameCalculator(combinedPlatforms, combinedDependencies, combinedVersions)
propertyNameCalculator.addProjects(rootProject.subprojects, projectVersion)

deps.dependency.each { dep ->
String groupId = dep.groupId.text().trim()
String artifactId = dep.artifactId.text().trim()
Expand All @@ -171,8 +174,6 @@ ext {
}

if (inlineVersion) {
PropertyNameCalculator propertyNameCalculator = new PropertyNameCalculator(combinedPlatforms, combinedDependencies, combinedVersions)
propertyNameCalculator.addProjects(rootProject.subprojects)
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
Expand All @@ -183,18 +184,17 @@ ext {
pomProperties.put(extractedConstraint.versionPropertyName, inlineVersion)
}

if (gradle.includedBuilds*.any { it.name == artifactId && groupId.startsWith('org.apache.grails') }) {
String baseVersionName = artifactId.replaceAll('-', '.')
String versionName = "${baseVersionName}.version" as String
dep.version[0].value = "\${${versionName}}" as String
pomProperties.put(versionName, inlineVersion)
// For included builds (grails-gradle), also use grails.version
if (gradle.includedBuilds.any { it.name == artifactId && groupId.startsWith('org.apache.grails') }) {
dep.version[0].value = "\${${PropertyNameCalculator.GRAILS_VERSION_PROPERTY}}" as String
pomProperties.put(PropertyNameCalculator.GRAILS_VERSION_PROPERTY, inlineVersion)
}
} else if (!inlineVersion) {
throw new GradleException("Dependency $groupId:$artifactId does not have a version.")
}
}

for (Map.Entry<String, String> property : pomProperties.entrySet()) {
for (Map.Entry<String, String> property : pomProperties.sort().entrySet()) {
propertiesNode.appendNode(property.key, property.value)
}
}
Expand Down
Loading