Hi Gianluca, We have discussed moving to a starter approach for this reason, but the original plan was to tackle that in Grails 8 instead of 7.
I was hoping we could take a more targeted approach in 7 given that we will likely only do 1 more RC. -James On Mon, Aug 11, 2025 at 8:40 AM Gianluca Sartori <g.sart...@gmail.com> wrote: > > I’ve always asked myself why Grails has so many dependencies that are > required by the framework and exposed to the end user. > > Not only i18n but also: > - grails-web-boot > - grails-url-mappings > - grails-services > - grails-interceptors > > I see them, from an architectural point of view, as core components. App > developers should not see them as decoupled, they should logically be > encapsulated by grails-core. > > Can we hide them somehow? In the end we need them for any Grails app. > > Or we do have use cases where a Grails app does not require them? > > Gianluca Sartori > -- > https://dueuno.com > > > On Sun, 10 Aug 2025 at 16:37, James Daugherty > <jdaughe...@jdresources.net.invalid> wrote: > > > Hi Everyone, > > > > While working on the Micronaut change, I discovered that i18n > > configuration is basically required for both the Domain & Controller > > projects, but loosely being enforced: > > > > 1. `grails-controllers` has a runtimeOnly dependency in its build.gradle > > on i18n > > 2. DomainClassGrailsPlugin from `grails-domain-class` has a dependsOn of > > i18n > > 3. ControllersGrailsPlugin from `grails-controllers` has a dependsOn of > > i18n > > > > The i18n project only has 2 purposes: 1. to define the location of the > > message properties 2. to support reloading them. Given that the > > grails-i18n project has limited scope & dependencies, I'd like to > > propose the following: > > > > 1. We make grails-i18n an API dependency of grails-domain-class. > > - By doing so grails-controllers & grails-domain-class both will > > always have the i18n plugin applied. > > 2. We consider the i18n plugin package private and change its group > > coordinate to `org.apache.grails.i18n`. This means we will no longer > > require end user apps to include it & it will be included via our > > other 'org.apache.grails' dependencies. > > > > I'm proposing this because both controllers & domains technically > > require i18n to be defined, but we're only having it defined as a side > > effect of users including it in their dependencies. Having end users > > define it is exposing an implementation detail of Grails, which goes > > against our goal of simplicity / convention over configuration. > > > > As to why this is so important: We have gradually moved towards using > > AutoConfiguration in Grails 7. Our end goal is to have all of the > > grails-core configuration defined via AutoConfiguration or > > Configuration classes. Scott has done a lot of the initial work, but > > there's more work that may have to be done to get scaffolding working > > with the micronaut loading approach. Having transitive dependencies > > like this prevents us from adding these dependencies as we move to > > AutoConfiguration. > > > > -James > >