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

jamesfredley pushed a commit to branch use-webjar-locator-feature
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 7f7598f5ab8c58084c617495e6fb720c3ac5947e
Author: James Fredley <[email protected]>
AuthorDate: Wed Nov 19 17:15:25 2025 -0500

    Update asset pipeline and WebJars integration
    
    Added 'webjars-locator-core' as a dependency across multiple modules to 
improve WebJars asset resolution. Updated asset pipeline references in 
JavaScript and CSS files to use simplified paths (e.g., 
'webjars/dist/jquery.js', 'main.css'). Bumped asset-pipeline and Bootstrap 
versions in dependencies. These changes standardize asset inclusion and enhance 
compatibility with WebJars.
    
    Also add file extensions to all asset-pipeline require directives for 
clarity.
---
 dependencies.gradle                                               | 6 +++---
 grails-data-neo4j/examples/grails3-neo4j-hibernate/build.gradle   | 1 +
 .../grails-app/assets/javascripts/application.js                  | 2 +-
 .../grails-app/assets/stylesheets/application.css                 | 4 ++--
 grails-data-neo4j/examples/grails3-neo4j/build.gradle             | 1 +
 .../grails3-neo4j/grails-app/assets/javascripts/application.js    | 2 +-
 .../grails3-neo4j/grails-app/assets/stylesheets/application.css   | 4 ++--
 grails-dependencies/assets/build.gradle                           | 1 +
 .../src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc  | 1 +
 .../org/grails/forge/feature/assetPipeline/AssetPipeline.java     | 5 +++++
 .../src/main/resources/assets/javascripts/application.js          | 4 ++--
 .../src/main/resources/assets/stylesheets/application.css         | 6 +++---
 grails-profiles/web/profile.yml                                   | 2 ++
 .../web/skeleton/grails-app/assets/javascripts/application.js     | 4 ++--
 .../web/skeleton/grails-app/assets/stylesheets/application.css    | 6 +++---
 grails-test-examples/app1/build.gradle                            | 1 +
 .../app1/grails-app/assets/javascripts/application.js             | 2 +-
 .../app1/grails-app/assets/stylesheets/application.css            | 4 ++--
 grails-test-examples/app2/build.gradle                            | 1 +
 .../app2/grails-app/assets/javascripts/application.js             | 2 +-
 .../app2/grails-app/assets/stylesheets/application.css            | 4 ++--
 grails-test-examples/demo33/build.gradle                          | 1 +
 .../demo33/grails-app/assets/javascripts/application.js           | 4 ++--
 .../demo33/grails-app/assets/stylesheets/application.css          | 8 ++++----
 grails-test-examples/geb-gebconfig/build.gradle                   | 1 +
 .../geb-gebconfig/grails-app/assets/javascripts/application.js    | 4 ++--
 .../geb-gebconfig/grails-app/assets/stylesheets/application.css   | 8 ++++----
 grails-test-examples/geb/build.gradle                             | 1 +
 .../geb/grails-app/assets/javascripts/application.js              | 4 ++--
 .../geb/grails-app/assets/stylesheets/application.css             | 8 ++++----
 grails-test-examples/gsp-layout/build.gradle                      | 1 +
 .../gsp-layout/grails-app/assets/javascripts/application.js       | 4 ++--
 .../gsp-layout/grails-app/assets/stylesheets/application.css      | 8 ++++----
 grails-test-examples/gsp-sitemesh3/build.gradle                   | 1 +
 .../gsp-sitemesh3/grails-app/assets/javascripts/application.js    | 4 ++--
 .../gsp-sitemesh3/grails-app/assets/stylesheets/application.css   | 8 ++++----
 .../hibernate5/grails-database-per-tenant/build.gradle            | 1 +
 .../grails-app/assets/javascripts/application.js                  | 2 +-
 .../grails-app/assets/stylesheets/application.css                 | 4 ++--
 grails-test-examples/hibernate5/grails-hibernate/build.gradle     | 1 +
 .../grails-hibernate/grails-app/assets/javascripts/application.js | 2 +-
 .../grails-app/assets/stylesheets/application.css                 | 4 ++--
 .../hibernate5/grails-partitioned-multi-tenancy/build.gradle      | 1 +
 .../grails-app/assets/javascripts/application.js                  | 2 +-
 .../grails-app/assets/stylesheets/application.css                 | 4 ++--
 .../hibernate5/grails-schema-per-tenant/build.gradle              | 1 +
 .../grails-app/assets/javascripts/application.js                  | 2 +-
 .../grails-app/assets/stylesheets/application.css                 | 4 ++--
 grails-test-examples/hibernate5/issue450/build.gradle             | 1 +
 .../issue450/grails-app/assets/javascripts/application.js         | 4 ++--
 .../issue450/grails-app/assets/stylesheets/application.css        | 8 ++++----
 grails-test-examples/hyphenated/build.gradle                      | 1 +
 .../hyphenated/grails-app/assets/javascripts/application.js       | 2 +-
 .../hyphenated/grails-app/assets/stylesheets/application.css      | 4 ++--
 grails-test-examples/issue-11102/build.gradle                     | 1 +
 .../issue-11102/grails-app/assets/javascripts/application.js      | 4 ++--
 .../issue-11102/grails-app/assets/stylesheets/application.css     | 8 ++++----
 .../micronaut/grails-app/assets/javascripts/application.js        | 4 ++--
 .../micronaut/grails-app/assets/stylesheets/application.css       | 8 ++++----
 grails-test-examples/mongodb/base/build.gradle                    | 1 +
 .../mongodb/base/grails-app/assets/javascripts/application.js     | 2 +-
 .../mongodb/base/grails-app/assets/stylesheets/application.css    | 4 ++--
 grails-test-examples/mongodb/database-per-tenant/build.gradle     | 1 +
 .../grails-app/assets/javascripts/application.js                  | 2 +-
 .../grails-app/assets/stylesheets/application.css                 | 4 ++--
 grails-test-examples/mongodb/gson-templates/build.gradle          | 1 +
 .../gson-templates/grails-app/assets/javascripts/application.js   | 2 +-
 .../gson-templates/grails-app/assets/stylesheets/application.css  | 4 ++--
 grails-test-examples/mongodb/hibernate5/build.gradle              | 1 +
 .../hibernate5/grails-app/assets/javascripts/application.js       | 2 +-
 .../hibernate5/grails-app/assets/stylesheets/application.css      | 4 ++--
 grails-test-examples/namespaces/build.gradle                      | 1 +
 .../namespaces/grails-app/assets/javascripts/application.js       | 2 +-
 .../namespaces/grails-app/assets/stylesheets/application.css      | 4 ++--
 grails-test-examples/scaffolding/build.gradle                     | 1 +
 .../scaffolding/grails-app/assets/javascripts/application.js      | 4 ++--
 .../scaffolding/grails-app/assets/stylesheets/application.css     | 6 +++---
 grails-test-examples/views-functional-tests/build.gradle          | 1 +
 .../grails-app/assets/javascripts/application.js                  | 2 +-
 .../grails-app/assets/stylesheets/application.css                 | 4 ++--
 80 files changed, 143 insertions(+), 111 deletions(-)

diff --git a/dependencies.gradle b/dependencies.gradle
index 078b195421..031f2a59de 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -25,7 +25,7 @@ ext {
             'ant.version'                   : '1.10.15',
             'asciidoctor-gradle-jvm.version': '4.0.5',
             'asciidoctorj.version'          : '3.0.0',
-            'asset-pipeline-gradle.version' : '5.0.20',
+            'asset-pipeline-gradle.version' : '5.0.21-SNAPSHOT',
             'byte-buddy.version'            : '1.17.7',
             'commons-text.version'          : '1.13.1',
             'directory-watcher.version'     : '0.19.1',
@@ -68,9 +68,9 @@ ext {
     ]
 
     bomDependencyVersions = [
-            'asset-pipeline-bom.version'  : '5.0.20',
+            'asset-pipeline-bom.version'  : '5.0.21-SNAPSHOT',
             'bootstrap-icons.version'     : '1.13.1',
-            'bootstrap.version'           : '5.3.7',
+            'bootstrap.version'           : '5.3.8',
             'commons-codec.version'       : '1.18.0',
             'geb-spock.version'           : '8.0.1',
             'groovy.version'              : '4.0.29',
diff --git a/grails-data-neo4j/examples/grails3-neo4j-hibernate/build.gradle 
b/grails-data-neo4j/examples/grails3-neo4j-hibernate/build.gradle
index 03b536532b..ec2efb6440 100644
--- a/grails-data-neo4j/examples/grails3-neo4j-hibernate/build.gradle
+++ b/grails-data-neo4j/examples/grails3-neo4j-hibernate/build.gradle
@@ -33,6 +33,7 @@ dependencies {
     implementation 
"org.apache.grails:grails-data-hibernate5:$hibernateDatastoreVersion"
     implementation "org.hibernate:hibernate-ehcache:$hibernateEhcacheVersion"
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-data-neo4j/examples/grails3-neo4j-hibernate/grails-app/assets/javascripts/application.js
 
b/grails-data-neo4j/examples/grails3-neo4j-hibernate/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-data-neo4j/examples/grails3-neo4j-hibernate/grails-app/assets/javascripts/application.js
+++ 
b/grails-data-neo4j/examples/grails3-neo4j-hibernate/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-data-neo4j/examples/grails3-neo4j-hibernate/grails-app/assets/stylesheets/application.css
 
b/grails-data-neo4j/examples/grails3-neo4j-hibernate/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-data-neo4j/examples/grails3-neo4j-hibernate/grails-app/assets/stylesheets/application.css
+++ 
b/grails-data-neo4j/examples/grails3-neo4j-hibernate/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-data-neo4j/examples/grails3-neo4j/build.gradle 
b/grails-data-neo4j/examples/grails3-neo4j/build.gradle
index 5422177ef4..b98588e594 100644
--- a/grails-data-neo4j/examples/grails3-neo4j/build.gradle
+++ b/grails-data-neo4j/examples/grails3-neo4j/build.gradle
@@ -30,6 +30,7 @@ dependencies {
 
     implementation project(":grails-plugin")
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-data-neo4j/examples/grails3-neo4j/grails-app/assets/javascripts/application.js
 
b/grails-data-neo4j/examples/grails3-neo4j/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-data-neo4j/examples/grails3-neo4j/grails-app/assets/javascripts/application.js
+++ 
b/grails-data-neo4j/examples/grails3-neo4j/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-data-neo4j/examples/grails3-neo4j/grails-app/assets/stylesheets/application.css
 
b/grails-data-neo4j/examples/grails3-neo4j/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-data-neo4j/examples/grails3-neo4j/grails-app/assets/stylesheets/application.css
+++ 
b/grails-data-neo4j/examples/grails3-neo4j/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-dependencies/assets/build.gradle 
b/grails-dependencies/assets/build.gradle
index 49478435cf..4a752e7ead 100644
--- a/grails-dependencies/assets/build.gradle
+++ b/grails-dependencies/assets/build.gradle
@@ -36,6 +36,7 @@ def configurations = [
                 'org.webjars.npm:bootstrap',
                 'org.webjars.npm:bootstrap-icons',
                 'org.webjars.npm:jquery',
+                'org.webjars:webjars-locator-core',
         ]
 ]
 
diff --git 
a/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc 
b/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
index eb526f4ab2..2365bb16e0 100644
--- a/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
+++ b/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
@@ -28,6 +28,7 @@ dependencies {
     testAndDevelopmentOnly "org.webjars.npm:bootstrap"
     testAndDevelopmentOnly "org.webjars.npm:bootstrap-icons"
     testAndDevelopmentOnly "org.webjars.npm:jquery"
+    implementation 'org.webjars:webjars-locator-core'
     implementation platform("org.apache.grails:grails-bom:$grailsVersion")
     implementation "org.apache.grails:grails-core"
     implementation "org.apache.grails:grails-logging"
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/assetPipeline/AssetPipeline.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/assetPipeline/AssetPipeline.java
index f84e11bb74..ecf02f26b6 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/assetPipeline/AssetPipeline.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/assetPipeline/AssetPipeline.java
@@ -76,6 +76,11 @@ public class AssetPipeline implements DefaultFeature {
                 .artifactId("asset-pipeline-grails")
                 .runtimeOnly());
 
+        generatorContext.addDependency(Dependency.builder()
+                .groupId("org.webjars")
+                .artifactId("webjars-locator-core")
+                .implementation());
+
         generatorContext.addDependency(Dependency.builder()
                 .groupId("org.webjars.npm")
                 .artifactId("bootstrap")
diff --git 
a/grails-forge/grails-forge-core/src/main/resources/assets/javascripts/application.js
 
b/grails-forge/grails-forge-core/src/main/resources/assets/javascripts/application.js
index c290381f0f..fc70bb1576 100644
--- 
a/grails-forge/grails-forge-core/src/main/resources/assets/javascripts/application.js
+++ 
b/grails-forge/grails-forge-core/src/main/resources/assets/javascripts/application.js
@@ -5,8 +5,8 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
 
 if (typeof jQuery !== 'undefined') {
diff --git 
a/grails-forge/grails-forge-core/src/main/resources/assets/stylesheets/application.css
 
b/grails-forge/grails-forge-core/src/main/resources/assets/stylesheets/application.css
index ec609495b3..dfa5fa3e0e 100644
--- 
a/grails-forge/grails-forge-core/src/main/resources/assets/stylesheets/application.css
+++ 
b/grails-forge/grails-forge-core/src/main/resources/assets/stylesheets/application.css
@@ -7,8 +7,8 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require webjars/bootstrap-icons/1.13.1/font/bootstrap-icons
-*= require grails
+*= require webjars/dist/css/bootstrap.css
+*= require webjars/font/bootstrap-icons.css
+*= require grails.css
 *= require_self
 */
diff --git a/grails-profiles/web/profile.yml b/grails-profiles/web/profile.yml
index bc8d2f0d97..e1e7d59db2 100644
--- a/grails-profiles/web/profile.yml
+++ b/grails-profiles/web/profile.yml
@@ -51,6 +51,8 @@ dependencies:
       coords: "org.apache.grails:grails-scaffolding"
     - scope: testImplementation
       coords: "org.apache.grails:grails-testing-support-web"
+    - scope: implementation
+      coords: "org.webjars:webjars-locator-core"
     - scope: testAndDevelopmentOnly
       coords: "org.webjars.npm:bootstrap"
     - scope: testAndDevelopmentOnly
diff --git 
a/grails-profiles/web/skeleton/grails-app/assets/javascripts/application.js 
b/grails-profiles/web/skeleton/grails-app/assets/javascripts/application.js
index c290381f0f..fc70bb1576 100644
--- a/grails-profiles/web/skeleton/grails-app/assets/javascripts/application.js
+++ b/grails-profiles/web/skeleton/grails-app/assets/javascripts/application.js
@@ -5,8 +5,8 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
 
 if (typeof jQuery !== 'undefined') {
diff --git 
a/grails-profiles/web/skeleton/grails-app/assets/stylesheets/application.css 
b/grails-profiles/web/skeleton/grails-app/assets/stylesheets/application.css
index ec609495b3..dfa5fa3e0e 100644
--- a/grails-profiles/web/skeleton/grails-app/assets/stylesheets/application.css
+++ b/grails-profiles/web/skeleton/grails-app/assets/stylesheets/application.css
@@ -7,8 +7,8 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require webjars/bootstrap-icons/1.13.1/font/bootstrap-icons
-*= require grails
+*= require webjars/dist/css/bootstrap.css
+*= require webjars/font/bootstrap-icons.css
+*= require grails.css
 *= require_self
 */
diff --git a/grails-test-examples/app1/build.gradle 
b/grails-test-examples/app1/build.gradle
index 5bc62da0c7..7b1a11f56e 100644
--- a/grails-test-examples/app1/build.gradle
+++ b/grails-test-examples/app1/build.gradle
@@ -44,6 +44,7 @@ dependencies {
     implementation 'org.apache.grails:grails-cache'
     implementation 'org.apache.grails:grails-scaffolding'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/app1/grails-app/assets/javascripts/application.js 
b/grails-test-examples/app1/grails-app/assets/javascripts/application.js
index 76bec24bd1..3feffbdce3 100644
--- a/grails-test-examples/app1/grails-app/assets/javascripts/application.js
+++ b/grails-test-examples/app1/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better 
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/app1/grails-app/assets/stylesheets/application.css 
b/grails-test-examples/app1/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- a/grails-test-examples/app1/grails-app/assets/stylesheets/application.css
+++ b/grails-test-examples/app1/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/app2/build.gradle 
b/grails-test-examples/app2/build.gradle
index 7a5feb91bf..aaf880e2ca 100644
--- a/grails-test-examples/app2/build.gradle
+++ b/grails-test-examples/app2/build.gradle
@@ -44,6 +44,7 @@ dependencies {
     implementation 'org.apache.grails:grails-data-hibernate5'
     implementation 'org.apache.grails:grails-cache'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/app2/grails-app/assets/javascripts/application.js 
b/grails-test-examples/app2/grails-app/assets/javascripts/application.js
index 76bec24bd1..3feffbdce3 100644
--- a/grails-test-examples/app2/grails-app/assets/javascripts/application.js
+++ b/grails-test-examples/app2/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better 
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/app2/grails-app/assets/stylesheets/application.css 
b/grails-test-examples/app2/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- a/grails-test-examples/app2/grails-app/assets/stylesheets/application.css
+++ b/grails-test-examples/app2/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/demo33/build.gradle 
b/grails-test-examples/demo33/build.gradle
index 0d95401e40..eb62e4448d 100644
--- a/grails-test-examples/demo33/build.gradle
+++ b/grails-test-examples/demo33/build.gradle
@@ -49,6 +49,7 @@ dependencies {
     implementation 'org.apache.grails:grails-data-hibernate5'
     implementation 'org.apache.grails:grails-views-gson'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:bootstrap'
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
diff --git 
a/grails-test-examples/demo33/grails-app/assets/javascripts/application.js 
b/grails-test-examples/demo33/grails-app/assets/javascripts/application.js
index 2647afa0ae..b820b82537 100644
--- a/grails-test-examples/demo33/grails-app/assets/javascripts/application.js
+++ b/grails-test-examples/demo33/grails-app/assets/javascripts/application.js
@@ -24,8 +24,8 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/demo33/grails-app/assets/stylesheets/application.css 
b/grails-test-examples/demo33/grails-app/assets/stylesheets/application.css
index a68aa0b40a..7774374e08 100644
--- a/grails-test-examples/demo33/grails-app/assets/stylesheets/application.css
+++ b/grails-test-examples/demo33/grails-app/assets/stylesheets/application.css
@@ -26,9 +26,9 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require grails
-*= require main
-*= require mobile
+*= require webjars/dist/css/bootstrap.css
+*= require grails.css
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/geb-gebconfig/build.gradle 
b/grails-test-examples/geb-gebconfig/build.gradle
index be441fb3c6..1b643606ce 100644
--- a/grails-test-examples/geb-gebconfig/build.gradle
+++ b/grails-test-examples/geb-gebconfig/build.gradle
@@ -53,6 +53,7 @@ dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-tomcat'
     implementation 'org.springframework.boot:spring-boot-starter-validation'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:bootstrap'
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
diff --git 
a/grails-test-examples/geb-gebconfig/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/geb-gebconfig/grails-app/assets/javascripts/application.js
index acc80699ea..8e2737b7b8 100644
--- 
a/grails-test-examples/geb-gebconfig/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/geb-gebconfig/grails-app/assets/javascripts/application.js
@@ -24,6 +24,6 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
diff --git 
a/grails-test-examples/geb-gebconfig/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/geb-gebconfig/grails-app/assets/stylesheets/application.css
index a68aa0b40a..7774374e08 100644
--- 
a/grails-test-examples/geb-gebconfig/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/geb-gebconfig/grails-app/assets/stylesheets/application.css
@@ -26,9 +26,9 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require grails
-*= require main
-*= require mobile
+*= require webjars/dist/css/bootstrap.css
+*= require grails.css
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/geb/build.gradle 
b/grails-test-examples/geb/build.gradle
index 3f690769c8..e447d20d9a 100644
--- a/grails-test-examples/geb/build.gradle
+++ b/grails-test-examples/geb/build.gradle
@@ -53,6 +53,7 @@ dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-tomcat'
     implementation 'org.springframework.boot:spring-boot-starter-validation'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:bootstrap'
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
diff --git 
a/grails-test-examples/geb/grails-app/assets/javascripts/application.js 
b/grails-test-examples/geb/grails-app/assets/javascripts/application.js
index acc80699ea..8e2737b7b8 100644
--- a/grails-test-examples/geb/grails-app/assets/javascripts/application.js
+++ b/grails-test-examples/geb/grails-app/assets/javascripts/application.js
@@ -24,6 +24,6 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
diff --git 
a/grails-test-examples/geb/grails-app/assets/stylesheets/application.css 
b/grails-test-examples/geb/grails-app/assets/stylesheets/application.css
index a68aa0b40a..7774374e08 100644
--- a/grails-test-examples/geb/grails-app/assets/stylesheets/application.css
+++ b/grails-test-examples/geb/grails-app/assets/stylesheets/application.css
@@ -26,9 +26,9 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require grails
-*= require main
-*= require mobile
+*= require webjars/dist/css/bootstrap.css
+*= require grails.css
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/gsp-layout/build.gradle 
b/grails-test-examples/gsp-layout/build.gradle
index d7a20e94e8..77961faf3a 100644
--- a/grails-test-examples/gsp-layout/build.gradle
+++ b/grails-test-examples/gsp-layout/build.gradle
@@ -36,6 +36,7 @@ dependencies {
     implementation 'org.apache.grails:grails-controllers'
     implementation 'org.apache.grails:grails-rest-transforms'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:bootstrap'
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
diff --git 
a/grails-test-examples/gsp-layout/grails-app/assets/javascripts/application.js 
b/grails-test-examples/gsp-layout/grails-app/assets/javascripts/application.js
index acc80699ea..8e2737b7b8 100644
--- 
a/grails-test-examples/gsp-layout/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/gsp-layout/grails-app/assets/javascripts/application.js
@@ -24,6 +24,6 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
diff --git 
a/grails-test-examples/gsp-layout/grails-app/assets/stylesheets/application.css 
b/grails-test-examples/gsp-layout/grails-app/assets/stylesheets/application.css
index a68aa0b40a..7774374e08 100644
--- 
a/grails-test-examples/gsp-layout/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/gsp-layout/grails-app/assets/stylesheets/application.css
@@ -26,9 +26,9 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require grails
-*= require main
-*= require mobile
+*= require webjars/dist/css/bootstrap.css
+*= require grails.css
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/gsp-sitemesh3/build.gradle 
b/grails-test-examples/gsp-sitemesh3/build.gradle
index 73e0e7cef2..a5ec3ab6fd 100644
--- a/grails-test-examples/gsp-sitemesh3/build.gradle
+++ b/grails-test-examples/gsp-sitemesh3/build.gradle
@@ -37,6 +37,7 @@ dependencies {
     implementation 'org.apache.grails:grails-rest-transforms'
     implementation 'org.apache.grails:grails-sitemesh3'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:bootstrap'
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
diff --git 
a/grails-test-examples/gsp-sitemesh3/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/gsp-sitemesh3/grails-app/assets/javascripts/application.js
index acc80699ea..8e2737b7b8 100644
--- 
a/grails-test-examples/gsp-sitemesh3/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/gsp-sitemesh3/grails-app/assets/javascripts/application.js
@@ -24,6 +24,6 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
diff --git 
a/grails-test-examples/gsp-sitemesh3/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/gsp-sitemesh3/grails-app/assets/stylesheets/application.css
index a68aa0b40a..7774374e08 100644
--- 
a/grails-test-examples/gsp-sitemesh3/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/gsp-sitemesh3/grails-app/assets/stylesheets/application.css
@@ -26,9 +26,9 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require grails
-*= require main
-*= require mobile
+*= require webjars/dist/css/bootstrap.css
+*= require grails.css
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git 
a/grails-test-examples/hibernate5/grails-database-per-tenant/build.gradle 
b/grails-test-examples/hibernate5/grails-database-per-tenant/build.gradle
index b7d149a2b1..678b4ae112 100644
--- a/grails-test-examples/hibernate5/grails-database-per-tenant/build.gradle
+++ b/grails-test-examples/hibernate5/grails-database-per-tenant/build.gradle
@@ -40,6 +40,7 @@ dependencies {
         implementation 'org.apache.grails:grails-layout'
     }
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/hibernate5/grails-database-per-tenant/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/hibernate5/grails-database-per-tenant/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-test-examples/hibernate5/grails-database-per-tenant/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/hibernate5/grails-database-per-tenant/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/hibernate5/grails-database-per-tenant/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/hibernate5/grails-database-per-tenant/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/hibernate5/grails-database-per-tenant/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/hibernate5/grails-database-per-tenant/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/hibernate5/grails-hibernate/build.gradle 
b/grails-test-examples/hibernate5/grails-hibernate/build.gradle
index cb8ed23476..a4aa1c1c18 100644
--- a/grails-test-examples/hibernate5/grails-hibernate/build.gradle
+++ b/grails-test-examples/hibernate5/grails-hibernate/build.gradle
@@ -42,6 +42,7 @@ dependencies {
         implementation 'org.apache.grails:grails-layout'
     }
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/hibernate5/grails-hibernate/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/hibernate5/grails-hibernate/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-test-examples/hibernate5/grails-hibernate/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/hibernate5/grails-hibernate/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/hibernate5/grails-hibernate/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/hibernate5/grails-hibernate/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/hibernate5/grails-hibernate/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/hibernate5/grails-hibernate/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git 
a/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/build.gradle 
b/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/build.gradle
index 2d0f12d7a0..5b373119fd 100644
--- 
a/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/build.gradle
+++ 
b/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/build.gradle
@@ -40,6 +40,7 @@ dependencies {
         implementation 'org.apache.grails:grails-layout'
     }
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/hibernate5/grails-partitioned-multi-tenancy/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git 
a/grails-test-examples/hibernate5/grails-schema-per-tenant/build.gradle 
b/grails-test-examples/hibernate5/grails-schema-per-tenant/build.gradle
index cf033f116a..4d7c6867c2 100644
--- a/grails-test-examples/hibernate5/grails-schema-per-tenant/build.gradle
+++ b/grails-test-examples/hibernate5/grails-schema-per-tenant/build.gradle
@@ -40,6 +40,7 @@ dependencies {
         implementation 'org.apache.grails:grails-layout'
     }
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/hibernate5/grails-schema-per-tenant/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/hibernate5/grails-schema-per-tenant/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-test-examples/hibernate5/grails-schema-per-tenant/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/hibernate5/grails-schema-per-tenant/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/hibernate5/grails-schema-per-tenant/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/hibernate5/grails-schema-per-tenant/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/hibernate5/grails-schema-per-tenant/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/hibernate5/grails-schema-per-tenant/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/hibernate5/issue450/build.gradle 
b/grails-test-examples/hibernate5/issue450/build.gradle
index fe533af8fd..c772a7a70a 100644
--- a/grails-test-examples/hibernate5/issue450/build.gradle
+++ b/grails-test-examples/hibernate5/issue450/build.gradle
@@ -40,6 +40,7 @@ dependencies {
         implementation 'org.apache.grails:grails-layout'
     }
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:bootstrap'
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
diff --git 
a/grails-test-examples/hibernate5/issue450/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/hibernate5/issue450/grails-app/assets/javascripts/application.js
index acc80699ea..8e2737b7b8 100644
--- 
a/grails-test-examples/hibernate5/issue450/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/hibernate5/issue450/grails-app/assets/javascripts/application.js
@@ -24,6 +24,6 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
diff --git 
a/grails-test-examples/hibernate5/issue450/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/hibernate5/issue450/grails-app/assets/stylesheets/application.css
index a68aa0b40a..7774374e08 100644
--- 
a/grails-test-examples/hibernate5/issue450/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/hibernate5/issue450/grails-app/assets/stylesheets/application.css
@@ -26,9 +26,9 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require grails
-*= require main
-*= require mobile
+*= require webjars/dist/css/bootstrap.css
+*= require grails.css
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/hyphenated/build.gradle 
b/grails-test-examples/hyphenated/build.gradle
index da6155da42..62eb64f538 100644
--- a/grails-test-examples/hyphenated/build.gradle
+++ b/grails-test-examples/hyphenated/build.gradle
@@ -42,6 +42,7 @@ dependencies {
 
     implementation 'org.apache.grails:grails-data-hibernate5'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/hyphenated/grails-app/assets/javascripts/application.js 
b/grails-test-examples/hyphenated/grails-app/assets/javascripts/application.js
index 76bec24bd1..3feffbdce3 100644
--- 
a/grails-test-examples/hyphenated/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/hyphenated/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better 
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/hyphenated/grails-app/assets/stylesheets/application.css 
b/grails-test-examples/hyphenated/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/hyphenated/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/hyphenated/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/issue-11102/build.gradle 
b/grails-test-examples/issue-11102/build.gradle
index 58b5b23601..a254e194ee 100644
--- a/grails-test-examples/issue-11102/build.gradle
+++ b/grails-test-examples/issue-11102/build.gradle
@@ -55,6 +55,7 @@ dependencies {
     implementation 'org.apache.grails:grails-events'
     implementation 'org.apache.grails:grails-gsp'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:bootstrap'
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
diff --git 
a/grails-test-examples/issue-11102/grails-app/assets/javascripts/application.js 
b/grails-test-examples/issue-11102/grails-app/assets/javascripts/application.js
index 2647afa0ae..b820b82537 100644
--- 
a/grails-test-examples/issue-11102/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/issue-11102/grails-app/assets/javascripts/application.js
@@ -24,8 +24,8 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/issue-11102/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/issue-11102/grails-app/assets/stylesheets/application.css
index a68aa0b40a..7774374e08 100644
--- 
a/grails-test-examples/issue-11102/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/issue-11102/grails-app/assets/stylesheets/application.css
@@ -26,9 +26,9 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require grails
-*= require main
-*= require mobile
+*= require webjars/dist/css/bootstrap.css
+*= require grails.css
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git 
a/grails-test-examples/micronaut/grails-app/assets/javascripts/application.js 
b/grails-test-examples/micronaut/grails-app/assets/javascripts/application.js
index acc80699ea..8e2737b7b8 100644
--- 
a/grails-test-examples/micronaut/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/micronaut/grails-app/assets/javascripts/application.js
@@ -24,6 +24,6 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
diff --git 
a/grails-test-examples/micronaut/grails-app/assets/stylesheets/application.css 
b/grails-test-examples/micronaut/grails-app/assets/stylesheets/application.css
index a68aa0b40a..7774374e08 100644
--- 
a/grails-test-examples/micronaut/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/micronaut/grails-app/assets/stylesheets/application.css
@@ -26,9 +26,9 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require grails
-*= require main
-*= require mobile
+*= require webjars/dist/css/bootstrap.css
+*= require grails.css
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/mongodb/base/build.gradle 
b/grails-test-examples/mongodb/base/build.gradle
index d62ce74c20..60c7246d2e 100644
--- a/grails-test-examples/mongodb/base/build.gradle
+++ b/grails-test-examples/mongodb/base/build.gradle
@@ -40,6 +40,7 @@ dependencies {
     }
     implementation 'org.apache.grails:grails-gsp'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/mongodb/base/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/mongodb/base/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-test-examples/mongodb/base/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/mongodb/base/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/mongodb/base/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/mongodb/base/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/mongodb/base/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/mongodb/base/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/mongodb/database-per-tenant/build.gradle 
b/grails-test-examples/mongodb/database-per-tenant/build.gradle
index 33b04f897b..e84a0a75d4 100644
--- a/grails-test-examples/mongodb/database-per-tenant/build.gradle
+++ b/grails-test-examples/mongodb/database-per-tenant/build.gradle
@@ -40,6 +40,7 @@ dependencies {
         implementation 'org.apache.grails:grails-layout'
     }
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/mongodb/database-per-tenant/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/mongodb/database-per-tenant/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-test-examples/mongodb/database-per-tenant/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/mongodb/database-per-tenant/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/mongodb/database-per-tenant/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/mongodb/database-per-tenant/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/mongodb/database-per-tenant/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/mongodb/database-per-tenant/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/mongodb/gson-templates/build.gradle 
b/grails-test-examples/mongodb/gson-templates/build.gradle
index 4e9e1d36fd..35ea201452 100644
--- a/grails-test-examples/mongodb/gson-templates/build.gradle
+++ b/grails-test-examples/mongodb/gson-templates/build.gradle
@@ -43,6 +43,7 @@ dependencies {
     implementation 'org.apache.grails:grails-url-mappings'
     implementation 'org.apache.grails.data:grails-data-mongodb-core'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/mongodb/gson-templates/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/mongodb/gson-templates/grails-app/assets/javascripts/application.js
index e4bf87d000..943ee08506 100644
--- 
a/grails-test-examples/mongodb/gson-templates/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/mongodb/gson-templates/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better 
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/mongodb/gson-templates/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/mongodb/gson-templates/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/mongodb/gson-templates/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/mongodb/gson-templates/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/mongodb/hibernate5/build.gradle 
b/grails-test-examples/mongodb/hibernate5/build.gradle
index 9f47b34976..81bd0ef41b 100644
--- a/grails-test-examples/mongodb/hibernate5/build.gradle
+++ b/grails-test-examples/mongodb/hibernate5/build.gradle
@@ -41,6 +41,7 @@ dependencies {
     }
     implementation 'org.apache.grails:grails-data-hibernate5'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/mongodb/hibernate5/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/mongodb/hibernate5/grails-app/assets/javascripts/application.js
index 1bb26d08c9..d913ac214a 100644
--- 
a/grails-test-examples/mongodb/hibernate5/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/mongodb/hibernate5/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/mongodb/hibernate5/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/mongodb/hibernate5/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/mongodb/hibernate5/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/mongodb/hibernate5/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/namespaces/build.gradle 
b/grails-test-examples/namespaces/build.gradle
index 75c009c842..03556445f2 100644
--- a/grails-test-examples/namespaces/build.gradle
+++ b/grails-test-examples/namespaces/build.gradle
@@ -43,6 +43,7 @@ dependencies {
     implementation 'org.apache.grails:grails-data-hibernate5'
     implementation 'org.apache.grails:grails-cache'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/namespaces/grails-app/assets/javascripts/application.js 
b/grails-test-examples/namespaces/grails-app/assets/javascripts/application.js
index 76bec24bd1..3feffbdce3 100644
--- 
a/grails-test-examples/namespaces/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/namespaces/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better 
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/namespaces/grails-app/assets/stylesheets/application.css 
b/grails-test-examples/namespaces/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/namespaces/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/namespaces/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */
diff --git a/grails-test-examples/scaffolding/build.gradle 
b/grails-test-examples/scaffolding/build.gradle
index a45c4960b1..6b5119a181 100644
--- a/grails-test-examples/scaffolding/build.gradle
+++ b/grails-test-examples/scaffolding/build.gradle
@@ -49,6 +49,7 @@ dependencies {
     implementation "org.apache.grails:grails-scaffolding"
     implementation "org.apache.grails:grails-data-hibernate5"
     implementation "org.apache.grails:grails-gsp"
+    implementation 'org.webjars:webjars-locator-core'
     integrationTestImplementation testFixtures("org.apache.grails:grails-geb")
     profile "org.apache.grails.profiles:web"
     runtimeOnly "org.fusesource.jansi:jansi"
diff --git 
a/grails-test-examples/scaffolding/grails-app/assets/javascripts/application.js 
b/grails-test-examples/scaffolding/grails-app/assets/javascripts/application.js
index e59983fa3d..8d1a6b5ece 100644
--- 
a/grails-test-examples/scaffolding/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/scaffolding/grails-app/assets/javascripts/application.js
@@ -24,8 +24,8 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
-//= require webjars/bootstrap/5.3.7/dist/js/bootstrap.bundle
+//= require webjars/dist/jquery.js
+//= require webjars/dist/js/bootstrap.bundle.js
 //= require_self
 
 if (typeof jQuery !== 'undefined') {
diff --git 
a/grails-test-examples/scaffolding/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/scaffolding/grails-app/assets/stylesheets/application.css
index c8b5f23f44..f4e389e920 100644
--- 
a/grails-test-examples/scaffolding/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/scaffolding/grails-app/assets/stylesheets/application.css
@@ -26,8 +26,8 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require webjars/bootstrap/5.3.7/dist/css/bootstrap
-*= require webjars/bootstrap-icons/1.13.1/font/bootstrap-icons
-*= require grails
+*= require webjars/dist/css/bootstrap.css
+*= require webjars/font/bootstrap-icons.css
+*= require grails.css
 *= require_self
 */
diff --git a/grails-test-examples/views-functional-tests/build.gradle 
b/grails-test-examples/views-functional-tests/build.gradle
index 5416996a71..c010aebdc8 100644
--- a/grails-test-examples/views-functional-tests/build.gradle
+++ b/grails-test-examples/views-functional-tests/build.gradle
@@ -59,6 +59,7 @@ dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-logging'
     implementation 'org.springframework.boot:spring-boot-starter-tomcat'
 
+    implementation 'org.webjars:webjars-locator-core'
     testAndDevelopmentOnly platform(project(':grails-bom'))
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
diff --git 
a/grails-test-examples/views-functional-tests/grails-app/assets/javascripts/application.js
 
b/grails-test-examples/views-functional-tests/grails-app/assets/javascripts/application.js
index e4bf87d000..943ee08506 100644
--- 
a/grails-test-examples/views-functional-tests/grails-app/assets/javascripts/application.js
+++ 
b/grails-test-examples/views-functional-tests/grails-app/assets/javascripts/application.js
@@ -24,7 +24,7 @@
 // You're free to add application-wide JavaScript to this file, but it's 
generally better 
 // to create separate JavaScript files as needed.
 //
-//= require webjars/jquery/3.7.1/dist/jquery.js
+//= require webjars/dist/jquery.js
 //= require_tree .
 //= require_self
 
diff --git 
a/grails-test-examples/views-functional-tests/grails-app/assets/stylesheets/application.css
 
b/grails-test-examples/views-functional-tests/grails-app/assets/stylesheets/application.css
index a35383c962..e31f58ca5c 100644
--- 
a/grails-test-examples/views-functional-tests/grails-app/assets/stylesheets/application.css
+++ 
b/grails-test-examples/views-functional-tests/grails-app/assets/stylesheets/application.css
@@ -26,7 +26,7 @@
 * You're free to add application-wide styles to this file and they'll appear 
at the top of the
 * compiled file, but it's generally better to create a new file per style 
scope.
 *
-*= require main
-*= require mobile
+*= require main.css
+*= require mobile.css
 *= require_self
 */

Reply via email to