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

borinquenkid pushed a commit to branch deps/adopt-jline-jansi
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 6fe5410440f1d7bef23dcebd6d209fada92b024b
Author: Walter Duque de Estrada <[email protected]>
AuthorDate: Sat Aug 1 22:14:04 2026 -0500

    Migrate from unmaintained fusesource Jansi to the maintained org.jline fork
    
    org.fusesource.jansi is unmaintained and flagged by CVE-2026-8484 with no
    fixed release. The JLine project maintains the fork and publishes it as
    org.jline:jansi (repackaged under org.jline.jansi), which Groovy 5 already
    uses for groovysh.
    
    - Manage org.jline:jansi:3.30.9 in dependencies.gradle and bump
      jline.version to 3.30.9 to match Groovy 5.0.7's transitives
    - Rename org.fusesource.jansi imports to org.jline.jansi in GrailsConsole,
      AnsiConsoleUrlMappingsRenderer, forge InteractiveShell, and their specs;
      CreateAppCommandSpec now uses the Ansi.DISABLE constant
    - Switch the coordinate in all build files, the base profile, the forge
      Scaffolding feature, and the user guide so generated apps get the fork
    - Align jansiVersion in grails-forge (2.4.2) and grails-data-neo4j (2.4.1)
    - Update the SBOM license mapping to org.jline:[email protected] and note the
      remaining ossIndexAudit exemption now only covers fusesource jansi
      pulled transitively by previously published Grails 6/7 artifacts
    
    Co-Authored-By: Claude Fable 5 <[email protected]>
---
 .../org/apache/grails/buildsrc/SbomPlugin.groovy   | 22 +++++++++++-----------
 .../grails/buildsrc/VulnerabilityScanPlugin.groovy |  7 ++++---
 dependencies.gradle                                |  8 +++++---
 gradle/docs-dependencies.gradle                    |  2 +-
 grails-bootstrap/build.gradle                      |  4 ++--
 .../groovy/grails/build/logging/GrailsConsole.java | 16 ++++++++--------
 .../grails/build/logging/GrailsConsoleSpec.groovy  |  2 +-
 grails-console/build.gradle                        |  2 +-
 grails-controllers/build.gradle                    |  2 +-
 grails-data-hibernate5/docs/build.gradle           |  2 +-
 grails-data-hibernate7/docs/build.gradle           |  2 +-
 grails-data-mongodb/docs/build.gradle              |  2 +-
 grails-data-neo4j/docs/build.gradle                |  2 +-
 grails-data-neo4j/gradle.properties                |  2 +-
 .../gradleBuild/gradleDependencies.adoc            |  2 +-
 grails-forge/gradle.properties                     |  2 +-
 grails-forge/grails-forge-cli/build.gradle         |  2 +-
 .../org/grails/forge/cli/InteractiveShell.java     |  2 +-
 .../org/grails/forge/feature/view/Scaffolding.java |  2 +-
 .../forge/feature/view/ScaffoldingSpec.groovy      |  2 +-
 grails-gradle/gradle/docs-config.gradle            |  2 +-
 grails-gradle/model/build.gradle                   |  2 +-
 grails-profiles/base/profile.yml                   |  2 +-
 grails-scaffolding/build.gradle                    |  4 ++--
 grails-shell-cli/build.gradle                      |  2 +-
 .../profile/commands/CreateAppCommandSpec.groovy   |  3 ++-
 grails-spring-security/oauth2/plugin/build.gradle  |  4 ++--
 grails-spring-security/plugin/build.gradle         |  4 ++--
 grails-test-core/build.gradle                      |  2 +-
 .../async-events-pubsub-demo/build.gradle          |  2 +-
 grails-test-examples/cache/build.gradle            |  2 +-
 .../external-configuration/build.gradle            |  2 +-
 grails-test-examples/geb-context-path/build.gradle |  2 +-
 grails-test-examples/geb-gebconfig/build.gradle    |  2 +-
 grails-test-examples/geb/build.gradle              |  2 +-
 grails-test-examples/gsp-layout/build.gradle       |  2 +-
 grails-test-examples/gsp-sitemesh3/build.gradle    |  2 +-
 .../async-events-pubsub-demo/build.gradle          |  2 +-
 grails-test-examples/jetty/build.gradle            |  2 +-
 grails-test-examples/mail/build.gradle             |  2 +-
 grails-test-examples/mongodb/base/build.gradle     |  2 +-
 .../mongodb/database-per-tenant/build.gradle       |  2 +-
 .../mongodb/hibernate5/build.gradle                |  2 +-
 grails-test-examples/redis/build.gradle            |  2 +-
 grails-test-examples/scaffolding/build.gradle      |  2 +-
 .../acl/functional-test-app/build.gradle           |  2 +-
 .../spring-security/cas/test1/build.gradle         |  2 +-
 .../build.gradle                                   |  2 +-
 .../ldap/functional-test-app/build.gradle          |  2 +-
 .../ldap/retrieve-db-roles/build.gradle            |  2 +-
 .../ldap/retrieve-group-roles/build.gradle         |  2 +-
 .../spring-security/ui/extended/build.gradle       |  2 +-
 .../spring-security/ui/simple/build.gradle         |  2 +-
 grails-test-examples/undertow/build.gradle         |  2 +-
 grails-web-url-mappings/build.gradle               |  4 ++--
 .../AnsiConsoleUrlMappingsRenderer.groovy          | 14 +++++++-------
 56 files changed, 92 insertions(+), 88 deletions(-)

diff --git 
a/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/SbomPlugin.groovy
 
b/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/SbomPlugin.groovy
index 531425fe7d..285b727b22 100644
--- 
a/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/SbomPlugin.groovy
+++ 
b/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/SbomPlugin.groovy
@@ -107,17 +107,17 @@ class SbomPlugin implements Plugin<Project> {
             'pkg:maven/jline/[email protected]?type=jar'                           
: 'BSD-2-Clause', // maps incorrectly because of 
https://github.com/CycloneDX/cyclonedx-core-java/issues/205
             'pkg:maven/opensymphony/[email protected]?type=jar'                  
: 'OpenSymphony', // custom license approved by legal LEGAL-707
             'pkg:maven/org.antlr/[email protected]?type=jar'               
: 'BSD-3-Clause', // maps incorrectly because of 
https://github.com/CycloneDX/cyclonedx-core-java/issues/205
-            'pkg:maven/org.jline/[email protected]?type=jar'                       
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'                       
: 'BSD-3-Clause', // direct dependency declared at jline.version in 
dependencies.gradle
-            'pkg:maven/org.jline/[email protected]?type=jar'              
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'               
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'                
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'                
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'                 
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'              
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'        
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'          
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
-            'pkg:maven/org.jline/[email protected]?type=jar'          
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh; main org.jline:jline pinned at 3.30.6 directly
+            'pkg:maven/org.jline/[email protected]?type=jar'                       
: 'BSD-3-Clause', // direct dependency declared at jansi.version in 
dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'                       
: 'BSD-3-Clause', // direct dependency declared at jline.version in 
dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'              
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'               
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'                
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'                
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'                 
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'              
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'        
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'          
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
+            'pkg:maven/org.jline/[email protected]?type=jar'          
: 'BSD-3-Clause', // jline group resolved at 3.30.9 transitively via 
groovy-groovysh, matching jline.version in dependencies.gradle
             'pkg:maven/org.jruby/[email protected]?type=jar'                        
: 'BSD-3-Clause', // 
https://web.archive.org/web/20240822213507/http://www.jcraft.com/jzlib/LICENSE.txt
 shows it's a 3 clause
             
'pkg:maven/org.liquibase.ext/[email protected]?type=jar': 
'Apache-2.0', // maps incorrectly because of 
https://github.com/liquibase/liquibase/issues/2445 & the base pom does not 
define a license
             'pkg:maven/org.json/json@20251224?type=jar'                       
: 'Public-Domain', // required due to jedis, 
https://issues.apache.org/jira/browse/LEGAL-666 approves this usage
diff --git 
a/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/VulnerabilityScanPlugin.groovy
 
b/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/VulnerabilityScanPlugin.groovy
index 4c748622de..835469afab 100644
--- 
a/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/VulnerabilityScanPlugin.groovy
+++ 
b/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/VulnerabilityScanPlugin.groovy
@@ -68,9 +68,10 @@ class VulnerabilityScanPlugin implements Plugin<Project> {
             // Remove if H2 ever ships a patched release that OSS Index no 
longer flags.
             'com.h2database:h2:2.4.240',
             // CVE-2026-8484: org.fusesource.jansi is unmaintained; all 
versions through 2.4.3 are flagged and no
-            // fixed release exists upstream. Grails still uses the fusesource 
coordinate for ANSI console output
-            // (package org.fusesource.jansi). Remove once consumers migrate 
off fusesource jansi or a patched
-            // release ships.
+            // fixed release exists upstream. Grails itself migrated to the 
maintained org.jline:jansi fork, but
+            // previously published Grails 6/7 artifacts (e.g. 
grails-shell-cli) still pull the fusesource
+            // coordinate transitively on some scanned classpaths. Remove once 
no resolved classpath contains
+            // org.fusesource.jansi.
             'org.fusesource.jansi:jansi:1.18',
             // CVE-2026-14683/14684/14685/14686: pulled transitively via 
micrometer/actuator (LatencyUtils).
             // The fix is HdrHistogram 2.2.3, which is not yet published to 
Maven Central (2.2.2 is the latest
diff --git a/dependencies.gradle b/dependencies.gradle
index 79ebd4f1f8..10eb48b971 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -31,9 +31,11 @@ ext {
             'gradle-groovy.version'         : '4.0.32',
             'gradle-spock.version'          : '2.4-groovy-4.0',
             'grails-publish-plugin.version' : '1.0.0-M2',
-            'jansi.version'                 : '2.4.2',
+            // Security: the org.jline fork replaces unmaintained 
org.fusesource.jansi (CVE-2026-8484).
+            // Versioned with JLine releases - keep in lockstep with 
jline.version below.
+            'jansi.version'                 : '3.30.9',
             'javaparser-core.version'       : '3.28.2',
-            'jline.version'                 : '3.30.6',
+            'jline.version'                 : '3.30.9',
             'jna.version'                   : '5.19.1',
             'jquery.version'                : '4.0.0',
             'maven-model.version'           : '3.9.16',
@@ -58,7 +60,7 @@ ext {
             'commons-text'            : 
"org.apache.commons:commons-text:${gradleBomDependencyVersions['commons-text.version']}",
             'directory-watcher'       : 
"io.methvin:directory-watcher:${gradleBomDependencyVersions['directory-watcher.version']}",
             'grails-publish-plugin'   : 
"org.apache.grails.gradle:grails-publish:${gradleBomDependencyVersions['grails-publish-plugin.version']}",
-            'jansi'                   : 
"org.fusesource.jansi:jansi:${gradleBomDependencyVersions['jansi.version']}",
+            'jansi'                   : 
"org.jline:jansi:${gradleBomDependencyVersions['jansi.version']}",
             'javaparser-core'         : 
"com.github.javaparser:javaparser-core:${gradleBomDependencyVersions['javaparser-core.version']}",
             'jline'                   : 
"org.jline:jline:${gradleBomDependencyVersions['jline.version']}",
             'jna'                     : 
"net.java.dev.jna:jna:${gradleBomDependencyVersions['jna.version']}",
diff --git a/gradle/docs-dependencies.gradle b/gradle/docs-dependencies.gradle
index bb4b9b1835..2466b799d5 100644
--- a/gradle/docs-dependencies.gradle
+++ b/gradle/docs-dependencies.gradle
@@ -20,7 +20,7 @@ apply plugin: 'org.apache.grails.buildsrc.groovydoc'
 
 dependencies {
     add('documentation', platform(project(':grails-bom')))
-    add('documentation', 'org.fusesource.jansi:jansi')
+    add('documentation', 'org.jline:jansi')
     add('documentation', 'com.github.javaparser:javaparser-core')
     add('documentation', 'org.apache.groovy:groovy')
     add('documentation', 'org.apache.groovy:groovy-groovydoc')
diff --git a/grails-bootstrap/build.gradle b/grails-bootstrap/build.gradle
index e4f69b8145..b54c7d3237 100644
--- a/grails-bootstrap/build.gradle
+++ b/grails-bootstrap/build.gradle
@@ -52,7 +52,7 @@ dependencies {
     compileOnly 'org.apache.groovy:groovy-ant'
 
     compileOnly 'io.methvin:directory-watcher'
-    compileOnly 'org.fusesource.jansi:jansi'
+    compileOnly 'org.jline:jansi'
     compileOnly 'org.jline:jline'
     compileOnly 'net.java.dev.jna:jna'
 
@@ -60,7 +60,7 @@ dependencies {
 
     testImplementation 'org.apache.groovy:groovy-xml'
     testImplementation 'org.apache.groovy:groovy-templates'
-    testImplementation 'org.fusesource.jansi:jansi'
+    testImplementation 'org.jline:jansi'
     testImplementation 'org.jline:jline'
 
     testImplementation 'org.apache.groovy:groovy-test-junit5'
diff --git 
a/grails-bootstrap/src/main/groovy/grails/build/logging/GrailsConsole.java 
b/grails-bootstrap/src/main/groovy/grails/build/logging/GrailsConsole.java
index 2641e487ff..90b74389be 100644
--- a/grails-bootstrap/src/main/groovy/grails/build/logging/GrailsConsole.java
+++ b/grails-bootstrap/src/main/groovy/grails/build/logging/GrailsConsole.java
@@ -32,9 +32,9 @@ import org.codehaus.groovy.runtime.StackTraceUtils;
 import org.codehaus.groovy.runtime.typehandling.NumberMath;
 
 import org.apache.tools.ant.BuildException;
-import org.fusesource.jansi.Ansi;
-import org.fusesource.jansi.Ansi.Color;
-import org.fusesource.jansi.AnsiConsole;
+import org.jline.jansi.Ansi;
+import org.jline.jansi.Ansi.Color;
+import org.jline.jansi.AnsiConsole;
 import org.jline.reader.Completer;
 import org.jline.reader.History;
 import org.jline.reader.LineReader;
@@ -49,11 +49,11 @@ import grails.util.Environment;
 import org.grails.build.logging.GrailsConsoleErrorPrintStream;
 import org.grails.build.logging.GrailsConsolePrintStream;
 
-import static org.fusesource.jansi.Ansi.Color.DEFAULT;
-import static org.fusesource.jansi.Ansi.Color.RED;
-import static org.fusesource.jansi.Ansi.Color.YELLOW;
-import static org.fusesource.jansi.Ansi.Erase.FORWARD;
-import static org.fusesource.jansi.Ansi.ansi;
+import static org.jline.jansi.Ansi.Color.DEFAULT;
+import static org.jline.jansi.Ansi.Color.RED;
+import static org.jline.jansi.Ansi.Color.YELLOW;
+import static org.jline.jansi.Ansi.Erase.FORWARD;
+import static org.jline.jansi.Ansi.ansi;
 
 /**
  * Utility class for delivering console output in a nicely formatted way.
diff --git 
a/grails-bootstrap/src/test/groovy/grails/build/logging/GrailsConsoleSpec.groovy
 
b/grails-bootstrap/src/test/groovy/grails/build/logging/GrailsConsoleSpec.groovy
index 4f99dd9650..a896e452aa 100644
--- 
a/grails-bootstrap/src/test/groovy/grails/build/logging/GrailsConsoleSpec.groovy
+++ 
b/grails-bootstrap/src/test/groovy/grails/build/logging/GrailsConsoleSpec.groovy
@@ -18,11 +18,11 @@
  */
 package grails.build.logging
 
+import org.jline.jansi.Ansi
 import org.jline.reader.LineReader
 import org.jline.reader.LineReaderBuilder
 import org.jline.terminal.Terminal
 import org.jline.terminal.TerminalBuilder
-import org.fusesource.jansi.Ansi
 import spock.lang.IgnoreIf
 import spock.lang.Issue
 import spock.lang.Specification
diff --git a/grails-console/build.gradle b/grails-console/build.gradle
index 3d57a651e9..42f419b85a 100644
--- a/grails-console/build.gradle
+++ b/grails-console/build.gradle
@@ -53,7 +53,7 @@ dependencies {
     api 'org.apache.groovy:groovy-console'
     api 'org.apache.groovy:groovy-swing'
     api 'org.apache.groovy:groovy-groovysh'
-    implementation 'org.fusesource.jansi:jansi'
+    implementation 'org.jline:jansi'
     implementation 'org.jline:jline'
     implementation 'net.java.dev.jna:jna'
 
diff --git a/grails-controllers/build.gradle b/grails-controllers/build.gradle
index 8c34aedd2a..408de31f7e 100644
--- a/grails-controllers/build.gradle
+++ b/grails-controllers/build.gradle
@@ -55,7 +55,7 @@ dependencies {
     runtimeOnly project(':grails-i18n')
 
     testRuntimeOnly 'org.jline:jline'
-    testRuntimeOnly 'org.fusesource.jansi:jansi'
+    testRuntimeOnly 'org.jline:jansi'
 
     compileOnly 'jakarta.servlet:jakarta.servlet-api'
     compileOnly 'org.springframework:spring-test'
diff --git a/grails-data-hibernate5/docs/build.gradle 
b/grails-data-hibernate5/docs/build.gradle
index db14debb59..5198e45656 100644
--- a/grails-data-hibernate5/docs/build.gradle
+++ b/grails-data-hibernate5/docs/build.gradle
@@ -42,7 +42,7 @@ dependencies {
     documentation 'org.apache.groovy:groovy-ant'
     documentation 'org.apache.groovy:groovy-groovydoc'
     documentation 'org.apache.groovy:groovy-templates'
-    documentation 'org.fusesource.jansi:jansi'
+    documentation 'org.jline:jansi'
     documentation project(':grails-bootstrap')
     documentation project(':grails-core')
     documentation project(':grails-spring')
diff --git a/grails-data-hibernate7/docs/build.gradle 
b/grails-data-hibernate7/docs/build.gradle
index 21f7b24cac..f972347fdf 100644
--- a/grails-data-hibernate7/docs/build.gradle
+++ b/grails-data-hibernate7/docs/build.gradle
@@ -43,7 +43,7 @@ dependencies {
     documentation 'org.apache.groovy:groovy-ant'
     documentation 'org.apache.groovy:groovy-groovydoc'
     documentation 'org.apache.groovy:groovy-templates'
-    documentation 'org.fusesource.jansi:jansi'
+    documentation 'org.jline:jansi'
     documentation project(':grails-bootstrap')
     documentation project(':grails-core')
     documentation project(':grails-spring')
diff --git a/grails-data-mongodb/docs/build.gradle 
b/grails-data-mongodb/docs/build.gradle
index 3795057c80..aef152a6c9 100644
--- a/grails-data-mongodb/docs/build.gradle
+++ b/grails-data-mongodb/docs/build.gradle
@@ -50,7 +50,7 @@ tasks.register('resolveMongodbVersion').configure { Task 
docTask ->
 
 dependencies {
     documentation platform(project(':grails-bom'))
-    documentation 'org.fusesource.jansi:jansi'
+    documentation 'org.jline:jansi'
     documentation 'org.apache.groovy:groovy'
     documentation 'org.apache.groovy:groovy-ant'
     documentation 'org.apache.groovy:groovy-groovydoc'
diff --git a/grails-data-neo4j/docs/build.gradle 
b/grails-data-neo4j/docs/build.gradle
index 2cec032f48..a661260999 100644
--- a/grails-data-neo4j/docs/build.gradle
+++ b/grails-data-neo4j/docs/build.gradle
@@ -49,7 +49,7 @@ configurations {
 }
 
 dependencies {
-    documentation "org.fusesource.jansi:jansi:$jansiVersion"
+    documentation "org.jline:jansi:$jansiVersion"
     documentation "org.apache.groovy:groovy"
     documentation "org.apache.groovy:groovy-templates"
     documentation "org.apache.groovy:groovy-dateutil"
diff --git a/grails-data-neo4j/gradle.properties 
b/grails-data-neo4j/gradle.properties
index 06643c57f4..26f5627c29 100644
--- a/grails-data-neo4j/gradle.properties
+++ b/grails-data-neo4j/gradle.properties
@@ -25,7 +25,7 @@ h2Version=1.4.200
 hibernateDatastoreVersion=8.0.2
 hibernateEhcacheVersion=5.5.7.Final
 hibernateValidatorVersion=6.2.5.Final
-jansiVersion=2.4.1
+jansiVersion=3.30.9
 javaParserCoreVersion=3.25.8
 javassistVersion=3.30.2-GA
 jettyVersion=9.4.29.v20200521
diff --git 
a/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc 
b/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
index d80c80fae4..aa002974e6 100644
--- a/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
+++ b/grails-doc/src/en/guide/commandLine/gradleBuild/gradleDependencies.adoc
@@ -49,7 +49,7 @@ dependencies {
     runtimeOnly "cloud.wondrify:asset-pipeline-grails"
     runtimeOnly "com.h2database:h2"
     runtimeOnly "com.zaxxer:HikariCP"
-    runtimeOnly "org.fusesource.jansi:jansi"
+    runtimeOnly "org.jline:jansi"
     integrationTestImplementation testFixtures("org.apache.grails:grails-geb")
     testImplementation "org.apache.grails:grails-testing-support-datamapping"
     testImplementation "org.apache.grails:grails-testing-support-web"
diff --git a/grails-forge/gradle.properties b/grails-forge/gradle.properties
index b82968e526..c6d3d426c5 100644
--- a/grails-forge/gradle.properties
+++ b/grails-forge/gradle.properties
@@ -34,7 +34,7 @@ gradleSdkvendorPluginVersion=3.0.0
 groovyVersion=4.0.32
 jacksonDatabindVersion=2.18.3
 # match the jansi version in grails-bom
-jansiVersion=2.4.2
+jansiVersion=3.30.9
 javaDiffUtils=4.15
 jgitVersion=6.10.0.202406032230-r
 micronautApplicationPluginVersion=4.6.2
diff --git a/grails-forge/grails-forge-cli/build.gradle 
b/grails-forge/grails-forge-cli/build.gradle
index 4f9f4bdab2..a42f6cae2b 100644
--- a/grails-forge/grails-forge-cli/build.gradle
+++ b/grails-forge/grails-forge-cli/build.gradle
@@ -90,7 +90,7 @@ dependencies {
     implementation "info.picocli:picocli:$picocliVersion"
     implementation "info.picocli:picocli-shell-jline3:$picocliVersion"
     implementation 'jakarta.inject:jakarta.inject-api'
-    implementation "org.fusesource.jansi:jansi:$jansiVersion"
+    implementation "org.jline:jansi:$jansiVersion"
     implementation "org.slf4j:slf4j-nop"
     implementation "org.yaml:snakeyaml"
 
diff --git 
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/InteractiveShell.java
 
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/InteractiveShell.java
index 618b1cecd8..a69d250059 100644
--- 
a/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/InteractiveShell.java
+++ 
b/grails-forge/grails-forge-cli/src/main/java/org/grails/forge/cli/InteractiveShell.java
@@ -18,7 +18,7 @@
  */
 package org.grails.forge.cli;
 
-import org.fusesource.jansi.AnsiConsole;
+import org.jline.jansi.AnsiConsole;
 import org.jline.reader.EndOfFileException;
 import org.jline.reader.LineReader;
 import org.jline.reader.LineReaderBuilder;
diff --git 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/Scaffolding.java
 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/Scaffolding.java
index e0ea7078a5..1f7e59ffae 100644
--- 
a/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/Scaffolding.java
+++ 
b/grails-forge/grails-forge-core/src/main/java/org/grails/forge/feature/view/Scaffolding.java
@@ -81,7 +81,7 @@ public class Scaffolding implements DefaultFeature {
     @Override
     public void apply(GeneratorContext generatorContext) {
         generatorContext.addDependency(Dependency.builder()
-                .groupId("org.fusesource.jansi")
+                .groupId("org.jline")
                 .artifactId("jansi")
                 .runtimeOnly());
 
diff --git 
a/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/view/ScaffoldingSpec.groovy
 
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/view/ScaffoldingSpec.groovy
index 3160999f0c..da455f634a 100644
--- 
a/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/view/ScaffoldingSpec.groovy
+++ 
b/grails-forge/grails-forge-core/src/test/groovy/org/grails/forge/feature/view/ScaffoldingSpec.groovy
@@ -42,7 +42,7 @@ class ScaffoldingSpec extends ApplicationContextSpec 
implements CommandOutputFix
 
         then:
         template.contains('implementation 
"org.apache.grails:grails-scaffolding"')
-        template.contains('runtimeOnly "org.fusesource.jansi:jansi"')
+        template.contains('runtimeOnly "org.jline:jansi"')
     }
 
 }
diff --git a/grails-gradle/gradle/docs-config.gradle 
b/grails-gradle/gradle/docs-config.gradle
index 0069bb65d8..b86b70514c 100644
--- a/grails-gradle/gradle/docs-config.gradle
+++ b/grails-gradle/gradle/docs-config.gradle
@@ -21,7 +21,7 @@ apply plugin: 'org.apache.grails.buildsrc.groovydoc'
 
 dependencies {
     add('documentation', platform(project(':grails-gradle-bom')))
-    add('documentation', 'org.fusesource.jansi:jansi')
+    add('documentation', 'org.jline:jansi')
     add('documentation', 'com.github.javaparser:javaparser-core')
     // Use Gradle's embedded Groovy (gradle-groovy.version), not the project's 
main Groovy version.
     add('documentation', 
"org.apache.groovy:groovy:${gradleBomDependencyVersions['gradle-groovy.version']}")
diff --git a/grails-gradle/model/build.gradle b/grails-gradle/model/build.gradle
index c6bd8cfeea..24363ef49d 100644
--- a/grails-gradle/model/build.gradle
+++ b/grails-gradle/model/build.gradle
@@ -61,7 +61,7 @@ dependencies {
     }
 
     compileOnly 'org.jline:jline' // for profile compilation
-    compileOnly 'org.fusesource.jansi:jansi'
+    compileOnly 'org.jline:jansi'
 
     api 'org.yaml:snakeyaml'
 
diff --git a/grails-profiles/base/profile.yml b/grails-profiles/base/profile.yml
index 7dce3d7dc4..8a5eb085a7 100644
--- a/grails-profiles/base/profile.yml
+++ b/grails-profiles/base/profile.yml
@@ -50,6 +50,6 @@ dependencies:
     - scope: testImplementation
       coords: "org.apache.grails:grails-testing-support-datamapping"
     - scope: runtimeOnly
-      coords: "org.fusesource.jansi:jansi"
+      coords: "org.jline:jansi"
     - scope: testImplementation
       coords: "org.spockframework:spock-core"
diff --git a/grails-scaffolding/build.gradle b/grails-scaffolding/build.gradle
index 89c7e47fa1..df3a044c27 100644
--- a/grails-scaffolding/build.gradle
+++ b/grails-scaffolding/build.gradle
@@ -60,14 +60,14 @@ dependencies {
     }
     // GrailsConsole (used by the scaffolding commands) needs jline at compile 
time
     cliImplementation 'org.jline:jline'
-    cliImplementation 'org.fusesource.jansi:jansi'
+    cliImplementation 'org.jline:jansi'
     api project(':grails-fields')
     api project(':grails-rest-transforms')
 
     implementation project(':grails-gsp')
 
     compileOnly 'org.jline:jline'
-    compileOnly 'org.fusesource.jansi:jansi'
+    compileOnly 'org.jline:jansi'
 
     testImplementation 'org.spockframework:spock-core'
     testImplementation project(':grails-layout')
diff --git a/grails-shell-cli/build.gradle b/grails-shell-cli/build.gradle
index 9b45417a15..6b8255f5a3 100644
--- a/grails-shell-cli/build.gradle
+++ b/grails-shell-cli/build.gradle
@@ -56,7 +56,7 @@ dependencies {
     api project(':grails-bootstrap')
     api 'org.apache.grails.gradle:grails-gradle-model'
     api 'org.apache.ant:ant'
-    api 'org.fusesource.jansi:jansi'
+    api 'org.jline:jansi'
     api 'org.jline:jline'
     api("org.gradle:gradle-tooling-api:$gradleToolingApiVersion") {
         exclude group: 'org.slf4j', module: 'slf4j-api'
diff --git 
a/grails-shell-cli/src/test/groovy/org/grails/cli/profile/commands/CreateAppCommandSpec.groovy
 
b/grails-shell-cli/src/test/groovy/org/grails/cli/profile/commands/CreateAppCommandSpec.groovy
index 63f7ace820..7dfaee7d7a 100644
--- 
a/grails-shell-cli/src/test/groovy/org/grails/cli/profile/commands/CreateAppCommandSpec.groovy
+++ 
b/grails-shell-cli/src/test/groovy/org/grails/cli/profile/commands/CreateAppCommandSpec.groovy
@@ -21,6 +21,7 @@ package org.grails.cli.profile.commands
 import grails.build.logging.GrailsConsole
 import org.grails.cli.profile.Feature
 import org.grails.cli.profile.Profile
+import org.jline.jansi.Ansi
 import org.spockframework.util.StringMessagePrintStream
 import spock.lang.Shared
 import spock.lang.Specification
@@ -38,7 +39,7 @@ class CreateAppCommandSpec extends Specification {
     PrintStream originalOut
 
     void setup() {
-        System.setProperty("org.fusesource.jansi.Ansi.disable", "true")
+        System.setProperty(Ansi.DISABLE, "true")
         originalOut = GrailsConsole.instance.out
         sps = new StringPrintStream()
         GrailsConsole.instance.out = sps
diff --git a/grails-spring-security/oauth2/plugin/build.gradle 
b/grails-spring-security/oauth2/plugin/build.gradle
index 96851866ff..54e61c07f3 100644
--- a/grails-spring-security/oauth2/plugin/build.gradle
+++ b/grails-spring-security/oauth2/plugin/build.gradle
@@ -56,7 +56,7 @@ dependencies {
        }
        // GrailsConsole (used by init-o-auth2) needs jline at compile time
        cliImplementation 'org.jline:jline'
-       cliImplementation 'org.fusesource.jansi:jansi'
+       cliImplementation 'org.jline:jansi'
 
        api project(':grails-spring-security'), {
                // api: GrailsUserDetailsService, SpringSecurityService
@@ -86,7 +86,7 @@ dependencies {
        implementation 'org.jline:jline', {
                // comp: ConsoleReader
        }
-       compileOnly 'org.fusesource.jansi:jansi' // required for Groovy static 
type checking of groovysh (Ansi) references
+       compileOnly 'org.jline:jansi' // required for Groovy static type 
checking of groovysh (Ansi) references
        implementation project(':grails-datamapping-core'), {
                // impl: @Transactional(runtime)
        }
diff --git a/grails-spring-security/plugin/build.gradle 
b/grails-spring-security/plugin/build.gradle
index 14453792e6..f1c4de2830 100644
--- a/grails-spring-security/plugin/build.gradle
+++ b/grails-spring-security/plugin/build.gradle
@@ -57,7 +57,7 @@ dependencies {
        }
        // GrailsConsole (used by the s2-* commands) needs jline at compile time
        cliImplementation 'org.jline:jline'
-       cliImplementation 'org.fusesource.jansi:jansi'
+       cliImplementation 'org.jline:jansi'
 
        api project(':grails-spring-security-compat')
        api project(':grails-async') // AsyncGrailsWebRequest is used in public 
API
@@ -91,7 +91,7 @@ dependencies {
 
        compileOnly 'jakarta.servlet:jakarta.servlet-api' // Provided
        compileOnly 'org.jline:jline' // for shell commands
-       compileOnly 'org.fusesource.jansi:jansi' // required for Groovy static 
type checking of groovysh (Ansi) references
+       compileOnly 'org.jline:jansi' // required for Groovy static type 
checking of groovysh (Ansi) references
        compileOnly project(':grails-core') // Provided as this is a Grails 
Plugin
        compileOnly 'org.apache.groovy:groovy' // Compile-time annotations
        compileOnly 'org.slf4j:slf4j-nop' // Prevents warnings about missing 
slf4j implementation during compilation
diff --git a/grails-test-core/build.gradle b/grails-test-core/build.gradle
index dd9cda9c1e..77bc12fae4 100644
--- a/grails-test-core/build.gradle
+++ b/grails-test-core/build.gradle
@@ -55,7 +55,7 @@ dependencies {
 
     // command line requirements
     api  'org.jline:jline'
-    api 'org.fusesource.jansi:jansi'
+    api 'org.jline:jansi'
 
     // Ant
     api 'org.apache.ant:ant'
diff --git a/grails-test-examples/async-events-pubsub-demo/build.gradle 
b/grails-test-examples/async-events-pubsub-demo/build.gradle
index 71a43208e8..ad28689df6 100644
--- a/grails-test-examples/async-events-pubsub-demo/build.gradle
+++ b/grails-test-examples/async-events-pubsub-demo/build.gradle
@@ -63,7 +63,7 @@ dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-tomcat'
 
     runtimeOnly 'com.h2database:h2'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'com.zaxxer:HikariCP'
 
     testImplementation 'org.apache.grails:grails-testing-support-web'
diff --git a/grails-test-examples/cache/build.gradle 
b/grails-test-examples/cache/build.gradle
index 2d9b22ff2b..19fd6fdddd 100644
--- a/grails-test-examples/cache/build.gradle
+++ b/grails-test-examples/cache/build.gradle
@@ -60,7 +60,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'org.apache.tomcat:tomcat-jdbc'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
 
     testImplementation 'org.apache.grails:grails-testing-support-datamapping'
     testImplementation 'org.apache.grails:grails-testing-support-web'
diff --git a/grails-test-examples/external-configuration/build.gradle 
b/grails-test-examples/external-configuration/build.gradle
index 5cec149d12..c2cbc5e719 100644
--- a/grails-test-examples/external-configuration/build.gradle
+++ b/grails-test-examples/external-configuration/build.gradle
@@ -55,7 +55,7 @@ dependencies {
 
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'org.apache.tomcat:tomcat-jdbc'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
 
     testImplementation 'org.apache.grails:grails-testing-support-datamapping'
     testImplementation 'org.apache.grails:grails-testing-support-web'
diff --git a/grails-test-examples/geb-context-path/build.gradle 
b/grails-test-examples/geb-context-path/build.gradle
index 00ae5e70a8..88e659bc65 100644
--- a/grails-test-examples/geb-context-path/build.gradle
+++ b/grails-test-examples/geb-context-path/build.gradle
@@ -62,7 +62,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'org.apache.tomcat:tomcat-jdbc'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
 
     testImplementation 'org.apache.grails:grails-testing-support-datamapping'
     testImplementation 'org.apache.grails:grails-testing-support-web'
diff --git a/grails-test-examples/geb-gebconfig/build.gradle 
b/grails-test-examples/geb-gebconfig/build.gradle
index 0f8d0b7505..3f7f484e34 100644
--- a/grails-test-examples/geb-gebconfig/build.gradle
+++ b/grails-test-examples/geb-gebconfig/build.gradle
@@ -65,7 +65,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'org.apache.tomcat:tomcat-jdbc'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
 
     testImplementation 'org.apache.grails:grails-testing-support-datamapping'
     testImplementation 'org.apache.grails:grails-testing-support-web'
diff --git a/grails-test-examples/geb/build.gradle 
b/grails-test-examples/geb/build.gradle
index f957537f01..443aa29317 100644
--- a/grails-test-examples/geb/build.gradle
+++ b/grails-test-examples/geb/build.gradle
@@ -64,7 +64,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'org.apache.tomcat:tomcat-jdbc'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
 
     testImplementation 'org.apache.grails:grails-testing-support-datamapping'
     testImplementation 'org.apache.grails:grails-testing-support-web'
diff --git a/grails-test-examples/gsp-layout/build.gradle 
b/grails-test-examples/gsp-layout/build.gradle
index 60b1e65dfd..2139c0760f 100644
--- a/grails-test-examples/gsp-layout/build.gradle
+++ b/grails-test-examples/gsp-layout/build.gradle
@@ -50,7 +50,7 @@ dependencies {
     runtimeOnly 'org.apache.grails:grails-gsp'
     implementation 'org.apache.grails:grails-layout'
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-logging'
diff --git a/grails-test-examples/gsp-sitemesh3/build.gradle 
b/grails-test-examples/gsp-sitemesh3/build.gradle
index 00aac73447..f9f222bec7 100644
--- a/grails-test-examples/gsp-sitemesh3/build.gradle
+++ b/grails-test-examples/gsp-sitemesh3/build.gradle
@@ -51,7 +51,7 @@ dependencies {
 
     runtimeOnly 'org.apache.grails:grails-gsp'
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-logging'
diff --git 
a/grails-test-examples/hibernate7/async-events-pubsub-demo/build.gradle 
b/grails-test-examples/hibernate7/async-events-pubsub-demo/build.gradle
index 5159dbcf8f..458b048aec 100644
--- a/grails-test-examples/hibernate7/async-events-pubsub-demo/build.gradle
+++ b/grails-test-examples/hibernate7/async-events-pubsub-demo/build.gradle
@@ -62,7 +62,7 @@ dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-tomcat'
 
     runtimeOnly 'com.h2database:h2'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'com.zaxxer:HikariCP'
 
     testImplementation 'org.apache.grails:grails-testing-support-web'
diff --git a/grails-test-examples/jetty/build.gradle 
b/grails-test-examples/jetty/build.gradle
index dd36e268aa..713a91fcd9 100644
--- a/grails-test-examples/jetty/build.gradle
+++ b/grails-test-examples/jetty/build.gradle
@@ -56,7 +56,7 @@ dependencies {
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
 
     integrationTestImplementation testFixtures('org.apache.grails:grails-geb')
 }
diff --git a/grails-test-examples/mail/build.gradle 
b/grails-test-examples/mail/build.gradle
index 5f2fe17042..a146286ad9 100644
--- a/grails-test-examples/mail/build.gradle
+++ b/grails-test-examples/mail/build.gradle
@@ -46,7 +46,7 @@ dependencies {
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-services'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
diff --git a/grails-test-examples/mongodb/base/build.gradle 
b/grails-test-examples/mongodb/base/build.gradle
index 94b98935f5..ba803e644f 100644
--- a/grails-test-examples/mongodb/base/build.gradle
+++ b/grails-test-examples/mongodb/base/build.gradle
@@ -48,7 +48,7 @@ dependencies {
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.apache.grails:grails-scaffolding'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
diff --git a/grails-test-examples/mongodb/database-per-tenant/build.gradle 
b/grails-test-examples/mongodb/database-per-tenant/build.gradle
index 6c3ceeda58..a2e23afabf 100644
--- a/grails-test-examples/mongodb/database-per-tenant/build.gradle
+++ b/grails-test-examples/mongodb/database-per-tenant/build.gradle
@@ -48,7 +48,7 @@ dependencies {
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-logging'
diff --git a/grails-test-examples/mongodb/hibernate5/build.gradle 
b/grails-test-examples/mongodb/hibernate5/build.gradle
index d3b91b69f4..8d0ae39c77 100644
--- a/grails-test-examples/mongodb/hibernate5/build.gradle
+++ b/grails-test-examples/mongodb/hibernate5/build.gradle
@@ -51,7 +51,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'com.zaxxer:HikariCP'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-scaffolding'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.hibernate:hibernate-ehcache', {
diff --git a/grails-test-examples/redis/build.gradle 
b/grails-test-examples/redis/build.gradle
index e656b71871..4dd103336a 100644
--- a/grails-test-examples/redis/build.gradle
+++ b/grails-test-examples/redis/build.gradle
@@ -49,7 +49,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'org.apache.tomcat:tomcat-jdbc'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
     runtimeOnly 'org.springframework.boot:spring-boot-starter'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-logging'
diff --git a/grails-test-examples/scaffolding/build.gradle 
b/grails-test-examples/scaffolding/build.gradle
index a89ba4b6ac..52463a928f 100644
--- a/grails-test-examples/scaffolding/build.gradle
+++ b/grails-test-examples/scaffolding/build.gradle
@@ -57,7 +57,7 @@ dependencies {
     implementation "org.apache.grails:grails-gsp"
     integrationTestImplementation testFixtures("org.apache.grails:grails-geb")
     profile "org.apache.grails.profiles:web"
-    runtimeOnly "org.fusesource.jansi:jansi"
+    runtimeOnly "org.jline:jansi"
     runtimeOnly "com.h2database:h2"
     runtimeOnly "com.zaxxer:HikariCP"
     runtimeOnly "cloud.wondrify:asset-pipeline-grails"
diff --git 
a/grails-test-examples/spring-security/acl/functional-test-app/build.gradle 
b/grails-test-examples/spring-security/acl/functional-test-app/build.gradle
index df891180ac..c6ab01a8f9 100644
--- a/grails-test-examples/spring-security/acl/functional-test-app/build.gradle
+++ b/grails-test-examples/spring-security/acl/functional-test-app/build.gradle
@@ -39,7 +39,7 @@ dependencies {
 
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'com.zaxxer:HikariCP'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-databinding'
     runtimeOnly 'org.apache.grails:grails-services'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
diff --git a/grails-test-examples/spring-security/cas/test1/build.gradle 
b/grails-test-examples/spring-security/cas/test1/build.gradle
index 7269dc728c..08dcbd6715 100644
--- a/grails-test-examples/spring-security/cas/test1/build.gradle
+++ b/grails-test-examples/spring-security/cas/test1/build.gradle
@@ -47,7 +47,7 @@ dependencies {
     runtimeOnly 'org.apache.grails:grails-databinding'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.apache.grails:grails-data-hibernate5'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-logging'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat'
diff --git 
a/grails-test-examples/spring-security/ldap/custom-user-details-context-mapper/build.gradle
 
b/grails-test-examples/spring-security/ldap/custom-user-details-context-mapper/build.gradle
index 2faa88f11d..f8620e545b 100644
--- 
a/grails-test-examples/spring-security/ldap/custom-user-details-context-mapper/build.gradle
+++ 
b/grails-test-examples/spring-security/ldap/custom-user-details-context-mapper/build.gradle
@@ -47,7 +47,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'com.zaxxer:HikariCP'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-databinding'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.apache.grails:grails-data-hibernate5'
diff --git 
a/grails-test-examples/spring-security/ldap/functional-test-app/build.gradle 
b/grails-test-examples/spring-security/ldap/functional-test-app/build.gradle
index cd84de6070..cff74e2142 100644
--- a/grails-test-examples/spring-security/ldap/functional-test-app/build.gradle
+++ b/grails-test-examples/spring-security/ldap/functional-test-app/build.gradle
@@ -46,7 +46,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'com.zaxxer:HikariCP'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-databinding'
     runtimeOnly 'org.apache.grails:grails-services'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
diff --git 
a/grails-test-examples/spring-security/ldap/retrieve-db-roles/build.gradle 
b/grails-test-examples/spring-security/ldap/retrieve-db-roles/build.gradle
index 9021327e0c..c9ce53bc9e 100644
--- a/grails-test-examples/spring-security/ldap/retrieve-db-roles/build.gradle
+++ b/grails-test-examples/spring-security/ldap/retrieve-db-roles/build.gradle
@@ -47,7 +47,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'com.zaxxer:HikariCP'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-databinding'
     runtimeOnly 'org.apache.grails:grails-services'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
diff --git 
a/grails-test-examples/spring-security/ldap/retrieve-group-roles/build.gradle 
b/grails-test-examples/spring-security/ldap/retrieve-group-roles/build.gradle
index de683ed0e1..0ed607c4e4 100644
--- 
a/grails-test-examples/spring-security/ldap/retrieve-group-roles/build.gradle
+++ 
b/grails-test-examples/spring-security/ldap/retrieve-group-roles/build.gradle
@@ -47,7 +47,7 @@ dependencies {
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
     runtimeOnly 'com.h2database:h2'
     runtimeOnly 'com.zaxxer:HikariCP'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.apache.grails:grails-databinding'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
     runtimeOnly 'org.apache.grails:grails-services'
diff --git a/grails-test-examples/spring-security/ui/extended/build.gradle 
b/grails-test-examples/spring-security/ui/extended/build.gradle
index 23de3fbf75..2698abebef 100644
--- a/grails-test-examples/spring-security/ui/extended/build.gradle
+++ b/grails-test-examples/spring-security/ui/extended/build.gradle
@@ -49,7 +49,7 @@ dependencies {
     runtimeOnly 'com.zaxxer:HikariCP'
     runtimeOnly 'org.apache.grails:grails-services'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-logging'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat'
diff --git a/grails-test-examples/spring-security/ui/simple/build.gradle 
b/grails-test-examples/spring-security/ui/simple/build.gradle
index 6b1bf070ff..f6b1d69cd8 100644
--- a/grails-test-examples/spring-security/ui/simple/build.gradle
+++ b/grails-test-examples/spring-security/ui/simple/build.gradle
@@ -49,7 +49,7 @@ dependencies {
     runtimeOnly 'com.zaxxer:HikariCP'
     runtimeOnly 'org.apache.grails:grails-services'
     runtimeOnly 'org.apache.grails:grails-url-mappings'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
     runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-logging'
     runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat'
diff --git a/grails-test-examples/undertow/build.gradle 
b/grails-test-examples/undertow/build.gradle
index 5e3ef303ec..de66441b96 100644
--- a/grails-test-examples/undertow/build.gradle
+++ b/grails-test-examples/undertow/build.gradle
@@ -56,7 +56,7 @@ dependencies {
     testAndDevelopmentOnly 'org.webjars.npm:jquery'
 
     runtimeOnly 'cloud.wondrify:asset-pipeline-grails'
-    runtimeOnly 'org.fusesource.jansi:jansi'
+    runtimeOnly 'org.jline:jansi'
 
     integrationTestImplementation testFixtures('org.apache.grails:grails-geb')
 }
diff --git a/grails-web-url-mappings/build.gradle 
b/grails-web-url-mappings/build.gradle
index 9e9e27762a..cb447a430a 100644
--- a/grails-web-url-mappings/build.gradle
+++ b/grails-web-url-mappings/build.gradle
@@ -66,8 +66,8 @@ dependencies {
     api 'org.apache.groovy:groovy'
     api project(':grails-datamapping-validation')
 
-    compileOnly 'org.fusesource.jansi:jansi'
-    testRuntimeOnly 'org.fusesource.jansi:jansi'
+    compileOnly 'org.jline:jansi'
+    testRuntimeOnly 'org.jline:jansi'
     compileOnly 'org.jline:jline'
 
     implementation 'com.github.ben-manes.caffeine:caffeine'
diff --git 
a/grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/reporting/AnsiConsoleUrlMappingsRenderer.groovy
 
b/grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/reporting/AnsiConsoleUrlMappingsRenderer.groovy
index 78a8f2f6c8..3afed025bf 100644
--- 
a/grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/reporting/AnsiConsoleUrlMappingsRenderer.groovy
+++ 
b/grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/reporting/AnsiConsoleUrlMappingsRenderer.groovy
@@ -20,7 +20,7 @@ package org.grails.web.mapping.reporting
 
 import groovy.transform.CompileStatic
 
-import org.fusesource.jansi.Ansi
+import org.jline.jansi.Ansi
 
 import grails.build.logging.GrailsConsole
 import grails.gorm.validation.ConstrainedProperty
@@ -29,12 +29,12 @@ import grails.web.mapping.reporting.UrlMappingsRenderer
 import org.grails.web.mapping.ResponseCodeMappingData
 import org.grails.web.mapping.ResponseCodeUrlMapping
 
-import static org.fusesource.jansi.Ansi.Color.CYAN
-import static org.fusesource.jansi.Ansi.Color.DEFAULT
-import static org.fusesource.jansi.Ansi.Color.GREEN
-import static org.fusesource.jansi.Ansi.Color.RED
-import static org.fusesource.jansi.Ansi.Color.YELLOW
-import static org.fusesource.jansi.Ansi.ansi
+import static org.jline.jansi.Ansi.Color.CYAN
+import static org.jline.jansi.Ansi.Color.DEFAULT
+import static org.jline.jansi.Ansi.Color.GREEN
+import static org.jline.jansi.Ansi.Color.RED
+import static org.jline.jansi.Ansi.Color.YELLOW
+import static org.jline.jansi.Ansi.ansi
 
 /**
  * Renders URL mappings to the console

Reply via email to