5.2 The Command Line and Profiles - Reference Documentation
Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari
Version: 3.0.11
5.2 The Command Line and Profiles
When you create a Grails application with the create-app command by default the "web" profile is used:grails create-app myapp
grails create-app myapp --profile=web-plugin
USER_HOME/.grails/repository
directory.Understanding a Profile's Structure
A profile is a simple directory that contains aprofile.yml
file and directorys containing the "commands", "skeleton" and "templates" defined by the profile. Example:web * commands * create-controller.yml * run-app.groovy … * skeleton * grails-app * controllers … * build.gradle * templates * artifacts * Controller.groovy * profile.yml
profile.yml
file is defined as follows:description: Profile for Web applications extends: base
create-app
command runs it takes the skeleton of the parent profiles and copies the skeletons into a new project structure. Child profiles overwrite files from the parent profile so if the parent defines a build.gradle
then the child profile will override the parent.Defining Profile Commands
A profile can define new commands that apply only to that profile using YAML or Groovy scripts. Below is an example of the create-controller command defined in YAML:description: - Creates a controller - usage: 'create-controller [controller name]' - completer: org.grails.cli.interactive.completers.DomainClassCompleter - argument: "Controller Name" description: "The name of the controller" steps: - command: render template: templates/artifacts/Controller.groovy destination: grails-app/controllers/artifact.package.path
/artifact.name
Controller.groovy - command: render template: templates/testing/Controller.groovy destination: src/test/groovy/artifact.package.path
/artifact.name
ControllerSpec.groovy - command: mkdir location: grails-app/views/artifact.propertyName
render
- To render a template to a given destination (as seen in the previous example)mkdir
- To make a directory specified by thelocation
parameterexecute
- To execute a command specified by theclass
parameter. Must be a class that implements the Command interface.gradle
- To execute one or many Gradle tasks specified by thetasks
parameter.
description: Creates a WAR file for deployment to a container (like Tomcat)
minArguments: 0
usage: |
war
steps:
- command: gradle
tasks:
- war
description( "Creates a Grails script" ) { usage "grails create-script [SCRIPT NAME]" argument name:'Script Name', description:"The name of the script to create" flag name:'force', description:"Whether to overwrite existing files" }def scriptName = args[0] def model = model(scriptName) def overwrite = flag('force') ? true : falserender template: template('artifacts/Script.groovy'), destination: file("src/main/scripts/${model.lowerCaseName}.groovy"), model: model, overwrite: overwrite