Haha, I had actually written about the possibility to invoke the Forge rest-api 
in my previous message, but deleted it as I think you can only use the versions 
currently deployed in one of the 5 "channels": latest, snapshot, next, prev and 
prev-snapshot.

Using a separate repository for assembling the final Grails distribution could 
be a good way to decouple the separation of concerns regarding the distribution 
build process making it easier to handle. Good idea!

On 2025/03/03 11:40:46 Michael Yan wrote:
> Create a new repository: grails-distribution, writing a Gradle task or
> shell script to merge the two (grails-core-7.0.x.zip and
> grails-forge-7.0.x.zip) into a one distribution: grails-7.0.x.zip.
> So grails-core and grails-forge can be built separately, in the
> grails-distribution repo we can also create a new Grails Command eg,
> ForgeCommand.groovy to implement the subcommand `forge`.
> 
> That's what I think is the easy way to go, but I think the second option is
> the right direction.
> Creating a Command in grails-core repo named ForgeCommand.groovy to
> implement the subcommand `forge`, but just call the REST API of the backend
> grails-forge, this will not have direct build dependencies on each other.
> The downside is that it requires a network request just like profiles, but
> that's not a problem because downloading dependencies also requires a
> network.
> The advantage is that there are no direct dependencies on each other, and
> the Forge can be developed and bugs fixed quickly.  That's how Spring
> Initializr has been implemented since the beginning.
> 
> 
> Mattias Reichel <mat...@apache.org> 于2025年3月3日周一 17:40写道:
> 
> > Thanks for your input, Michael - this is great info!
> >
> > Larger changes like these should absolutely be considered in the long term.
> >
> > For now, we have been discussing this merge as a first step for Grails
> > 7.0, allowing projects to be created using both the Shell CLI (for backward
> > compatibility with profiles) and the Forge CLI (for its improved
> > architecture, better feature composition, and compatibility with
> > https://start.grails.org). After project creation, the Shell CLI seems
> > preferable for project-specific tasks due to its user-friendliness.
> >
> > The key question is: how do we best package and distribute a single Grails
> > distribution that enables users to seamlessly invoke both CLIs?
> >
> > Since grails-core and grails-forge reside in separate repositories, they
> > cannot be built and packaged together. Given that grails-core must be built
> > first, the grails-forge CI will need to handle packaging and releasing to
> > SDKMAN. That likely means the proxy/delegate/wrapper command (or script)
> > should also be maintained in grails-forge.
> >
> > Currently, Grails distributions are also published on the GitHub release
> > page in grails-core. Since the distribution won’t be complete without the
> > Forge addition, grails-forge CI could also update the grails-core release
> > page with the final packaged distribution.
> >
> > Just sharing my thoughts to keep the discussion going - open to
> > suggestions on how we can make this work smoothly!
> >
> > On 2025/03/01 00:34:46 Michael Yan wrote:
> > > If you want to merge the two, I suggest that you refer to the gradle
> > > subcommand in the Grails Shell (implemented by GradleCommand.groovy),
> > > you can wrap the Java API of Grails Forge to implement a subcommand
> > forge,
> > > or like spring.groovy script command in the base profile.
> > >
> > > so there are two ways to create a project in Grails Shell:
> > >
> > > grails create-app com.mycompany.blog
> > > grails forge create-app com.mycompany.blog
> > > grails spring init -- // to create spring boot projects
> > >
> > > Michael Yan <rainbo...@gmail.com> 于2025年3月1日周六 08:11写道:
> > >
> > > > I still recommend using only the Grails Shell, and Grails Forge using
> > > > Micronaut and Picocli, although it supports packaging native images,
> > but
> > > > also loses the dynamic nature of Groovy and does not support the
> > ability to
> > > > extend the CLI by the user.
> > > > If we had to provide something like Spring Initializr or Micronaut
> > Launch,
> > > > I would prefer to build it with Spring Boot or Grails, which can take
> > > > advantage of Spring Initializr's existing technologies including
> > front-end
> > > > and back-end APIs, as well as reuse code from the Grails Shell.
> > > >
> > > > James Fredley <jamesfred...@apache.org> 于2025年3月1日周六 03:31写道:
> > > >
> > > >> I look at forge the same way.  The blacksmith forged a sword in his
> > > >> forge.
> > > >>
> > > >> grails-forge CLI supports the following 16 commands, only.  All but
> > > >> "grails create-functional-test" overlap with grails-shell CLI.
> > > >>
> > > >> create project commands:
> > > >> grails create-app
> > > >> grails create-plugin
> > > >> grails create-restapi
> > > >> grails create-web-plugin
> > > >> grails create-webapp
> > > >>
> > > >> create files:
> > > >> grails create-command
> > > >> grails create-controller
> > > >> grails create-domain-class
> > > >> grails create-functional-test
> > > >> grails create-integration-test
> > > >> grails create-interceptor
> > > >> grails create-scaffold-controller
> > > >> grails create-script
> > > >> grails create-service
> > > >> grails create-taglib
> > > >> grails create-unit-test
> > > >>
> > > >> I like making the commands distinct, for clarity.
> > > >>
> > > >> In interactive mode, both CLIs support auto-completion, with
> > grails-forge
> > > >> CLI autocompletion being more intelligent, but limited by only
> > supporting
> > > >> 16 commands.
> > > >>
> > > >> Both CLIs support features (required & optional)
> > > >>
> > > >> With this proposal, 16 commands with "create-*" are changed to
> > "forge-*"
> > > >> plus "grails forge" would be mapped from the wrapper to run
> > grails-forge
> > > >> CLI.  Any others would run grails-shell CLI.
> > > >>
> > > >> This is close enough to having two commands "grails" and
> > "grailsforge",
> > > >> while combining into what appears to be one command, that I am
> > onboard.
> > > >>
> > > >> The hard part will be the plumbing to make this all work.
> > grails-wrapper
> > > >> does this for grails-shell CLI currently, by downloading a fat jar to
> > > >> ".grails/wrapper", but we will need to determine if the grails-forge
> > CLI
> > > >> side is still graalvm native binaries vs standard java.
> > > >>
> > > >> +1
> > > >>
> > > >> On 2025/02/28 13:40:54 Mattias Reichel wrote:
> > > >> > As many of you know, the old "Grails Shell CLI" (the grails
> > executable
> > > >> > distributed with SDKMAN up to Grails 5, also runnable via
> > ./grailsw) has
> > > >> > been restored in Grails 7. Meanwhile, the "Grails Forge CLI"
> > (introduced
> > > >> > and distributed via SDKMAN for Grails 6, and powering
> > start.grails.org)
> > > >> > remains the current grails CLI in Grails 7.0.0-M1.
> > > >> >
> > > >> > Discussions are ongoing about how best to merge these tools to
> > combine
> > > >> > their strengths. In the last Weekly Meeting (2024-02-27), we
> > considered
> > > >> > generating a single "wrapper" executable that delegates to the
> > > >> appropriate
> > > >> > CLI based on the provided arguments.
> > > >> >
> > > >> > After the meeting, one thought struck me: "forge" is both a noun
> > and a
> > > >> > verb. We could leverage this to differentiate between the two CLIs
> > in a
> > > >> > natural way:
> > > >> >
> > > >> >    - grails vs. grails forge for interactive mode
> > > >> >    - grails create-app myApp vs. grails forge-app myApp
> > > >> >    - grails create-plugin myPlugin vs. grails forge-plugin myPlugin
> > > >> >    - grails create-controller myController vs. grails
> > forge-controller
> > > >> >    myController
> > > >> >    ...and so on.
> > > >> >
> > > >> > Since "forging" is pretty much all that the "Grails Forge CLI" does,
> > > >> this
> > > >> > could make the distinction intuitive for users.
> > > >> >
> > > >> > Of course, there may be caveats that I have not thought of, but I
> > > >> wanted to
> > > >> > put this idea out there for brainstorming. Thoughts?
> > > >> >
> > > >>
> > > >
> > >
> >
> 

Reply via email to