blob: 896b693d1f45ee4aa7e3993dea44e24f98dccbd1 [file]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(["setDoNotTrack", true]);
_paq.push(["disableCookies"]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '79']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<title>5 The Command Line 3.0.0.RC2</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
<link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
<script type="text/javascript">
function addJsClass() {
var classes = document.body.className.split(" ");
classes.push("js");
document.body.className = classes.join(" ");
}
</script>
</head>
<body class="body" onload="addJsClass();">
<div id="navigation">
<ul>
<li>
<div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
<a href="../guide/index.html" class="button">Table of contents</a>
<div id="nav-summary-childs" style="display:none;">
<div class="toc-item" style="margin-left:0"><a href="../guide/introduction.html"><strong>1</strong><span>Introduction</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/upgrading.html"><strong>3</strong><span>Upgrading from Grails 2.x</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/conf.html"><strong>4</strong><span>Configuration</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/commandLine.html"><strong>5</strong><span>The Command Line</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/GORM.html"><strong>6</strong><span>Object Relational Mapping (GORM)</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/theWebLayer.html"><strong>7</strong><span>The Web Layer</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/traits.html"><strong>8</strong><span>Traits</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/webServices.html"><strong>9</strong><span>Web Services</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/async.html"><strong>10</strong><span>Asynchronous Programming</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/validation.html"><strong>11</strong><span>Validation</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/services.html"><strong>12</strong><span>The Service Layer</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/staticTypeCheckingAndCompilation.html"><strong>13</strong><span>Static Type Checking And Compilation</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/testing.html"><strong>14</strong><span>Testing</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/i18n.html"><strong>15</strong><span>Internationalization</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/security.html"><strong>16</strong><span>Security</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/plugins.html"><strong>17</strong><span>Plugins</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/spring.html"><strong>18</strong><span>Grails and Spring</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/hibernate.html"><strong>19</strong><span>Grails and Hibernate</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/scaffolding.html"><strong>20</strong><span>Scaffolding</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/deployment.html"><strong>21</strong><span>Deployment</span></a>
</div>
<div class="toc-item" style="margin-left:0"><a href="../guide/contributing.html"><strong>22</strong><span>Contributing to Grails</span></a>
</div>
</div>
</div>
</li>
<li class="separator selected">
<a id="ref-button" onclick="localToggle(); return false;" href="#">Quick Reference</a>
</li>
</ul>
</div>
<div id="header">
<div class="images clearfix">
<span id="logo"><a href="http://grails.org" target="_blank"><img alt="Grails Logo" title="The Grails Framework" src="../img/grails.png" border="0"/></a></span>
</div>
<p>See the light - agile, industrial strength, rapid web application development made easy</p>
</div>
<table id="colset" border="0" cellpadding="0" cellspacing="0">
<tr>
<td id="col1">
<div id="main" class="corner-all">
<div class="toc-item prev-left"><a href="../guide/conf.html">&lt;&lt; <strong>4</strong><span>Configuration</span></a></div>
<span id='toggle-col1' class="toggle">(<a href="#" onclick="localToggle(); return false;">Quick Reference</a>)</span>
<div class="toc-item next-right"><a href="../guide/GORM.html"><strong>6</strong><span>Object Relational Mapping (GORM)</span> >></a></div>
<div class="project">
<h1>5 The Command Line - Reference Documentation</h1>
<p><strong>Authors:</strong> Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari</p>
<p><strong>Version:</strong> 3.0.0.RC2</p>
</div>
<div id="table-of-content">
<h2>Table of Contents</h2>
<div class="toc-item" style="margin-left:0px"><a href="#interactiveMode"><strong>5.1</strong><span>Interactive Mode</span></a>
</div>
<div class="toc-item" style="margin-left:0px"><a href="#profiles"><strong>5.2</strong><span>The Command Line and Profiles</span></a>
</div>
<div class="toc-item" style="margin-left:0px"><a href="#creatingCustomScripts"><strong>5.3</strong><span>Creating Custom Scripts</span></a>
</div>
<div class="toc-item" style="margin-left:0px"><a href="#reusingGrailsScripts"><strong>5.4</strong><span>Re-using Grails scripts</span></a>
</div>
<div class="toc-item" style="margin-left:0px"><a href="#gradleBuild"><strong>5.5</strong><span>Building with Gradle</span></a>
</div>
<div class="toc-item" style="margin-left:10px"><a href="#gradleDependencies"><strong>5.5.1</strong><span>Defining Dependencies with Gradle</span></a>
</div>
<div class="toc-item" style="margin-left:10px"><a href="#gradleTasks"><strong>5.5.2</strong><span>Working with Gradle Tasks</span></a>
</div>
<div class="toc-item" style="margin-left:10px"><a href="#gradlePlugins"><strong>5.5.3</strong><span>Grails plugins for Gradle</span></a>
</div>
</div>
<a name="4. The Command Line"><!-- Legacy link --></a>
<h1 id="commandLine">5 The Command Line</h1>
Grails 3.0's command line system differs greatly from previous versions of Grails and features APIs for invoking Gradle for build related tasks, as well as performing code generation.<p class="paragraph"/>When you type:<p class="paragraph"/><div class="code"><pre>grails &#91;command name&#93;</pre></div><p class="paragraph"/>Grails searches the <a href="https://github.com/grails/grails-profile-repository" target="blank">profile repository</a> based on the profile of the current application. If the profile is for a web application then commmands a read from the web profile and the base profile which it inherits from.<p class="paragraph"/>Since command behavior is profile specific the web profile my provide different behavior for the <code>run-app</code> command then say a profile for running batch applications.<p class="paragraph"/>When you type the following command:<p class="paragraph"/><div class="code"><pre>grails run&#45;app</pre></div><p class="paragraph"/>It results in a search for the following files:
<ul class="star">
<li><code>PROJECT_HOME/scripts/RunApp.groovy</code></li>
<li><code>PROFILE_REPOSITORY_PATH/profiles/web/commands/run-app.groovy</code> (if the web profile is active)</li>
<li><code>PROFILE_REPOSITORY_PATH/profiles/web/commands/run-app.yml</code> (for YAML defined commands)</li>
</ul><p class="paragraph"/>To get a list of all commands and some help about the available commands type:<p class="paragraph"/><div class="code"><pre>grails help</pre></div><p class="paragraph"/>which outputs usage instructions and the list of commands Grails is aware of:<p class="paragraph"/><div class="code"><pre>grails &#91;environment&#93;&#42; &#91;target&#93; &#91;arguments&#93;&#42;'<p class="paragraph"/>| Examples:
$ grails dev run&#45;app
$ grails create&#45;app books<p class="paragraph"/>| Available Commands (type grails help 'command&#45;name' <span class="java&#45;keyword">for</span> more info):
| Command Name Command Description
&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;
clean Cleans a Grails application's compiled sources
compile Compiles a Grails application
...</pre></div><p class="paragraph"/><blockquote class="note">
Refer to the Command Line reference in the Quick Reference menu of the reference guide for more information about individual commands
</blockquote><p class="paragraph"/><h4>non-interactive mode</h4><p class="paragraph"/>When you run a script manually and it prompts you for information, you can answer the questions and continue running the script. But when you run a script as part of an automated process, for example a continuous integration build server, there's no way to "answer" the questions. So you can pass the <code>&#45;&#45;non-interactive</code> switch to the script command to tell Grails to accept the default answer for any questions, for example whether to install a missing plugin.<p class="paragraph"/>For example:<p class="paragraph"/><div class="code"><pre>grails war &#45;&#45;non&#45;interactive</pre></div>
<h2 id="interactiveMode">5.1 Interactive Mode</h2>
Interactive mode is the a feature of the Grails command line which keeps the JVM running and allows for quicker execution of commands. To activate interactive mode type 'grails' at the command line and then use TAB completion to get a list of commands:<p class="paragraph"/><img border="0" class="center" src="../img/interactive-output.png"></img><p class="paragraph"/>If you need to open a file whilst within interactive mode you can use the <code>open</code> command which will TAB complete file paths:<p class="paragraph"/><img border="0" class="center" src="../img/interactive-open-cmd.png"></img><p class="paragraph"/>Even better, the <code>open</code> command understands the logical aliases 'test-report' and 'dep-report', which will open the most recent test and dependency reports respectively. In other words, to open the test report in a browser simply execute <code>open test-report</code>. You can even open multiple files at once: <code>open test-report test/unit/MyTests.groovy</code> will open the HTML test report in your browser and the <code>MyTests.groovy</code> source file in your text editor.<p class="paragraph"/>TAB completion also works for class names after the <code>create-*</code> commands:<p class="paragraph"/><img border="0" class="center" src="../img/interactive-complete-class.png"></img><p class="paragraph"/>If you need to run an external process whilst interactive mode is running you can do so by starting the command with a !:<p class="paragraph"/><img border="0" class="center" src="../img/interactive-run-external.png"></img><p class="paragraph"/>Note that with &#33; (bang) commands, you get file path auto completion - ideal for external commands that operate on the file system such as 'ls', 'cat', 'git', etc.<p class="paragraph"/>To exit interactive mode enter the <code>exit</code> command. Note that if the Grails application has been run with <code>run-app</code> normally it will terminate when the interactive mode console exits because the JVM will be terminated. An exception to this would be if the application were running in forked mode which means the application is running in a different JVM. In that case the application will be left running after the interactive mode console terminates. If you want to exit interactive mode and stop an application that is running in forked mode, use the <code>quit</code> command. The <code>quit</code> command will stop the running application and then close interactive mode.
<h2 id="profiles">5.2 The Command Line and Profiles</h2>
When you create a Grails application with the <a href="../ref/Command Line/create-app.html" class="commandLine">create-app</a> command by default the "web" profile is used:<p class="paragraph"/><div class="code"><pre>grails create&#45;app myapp</pre></div><p class="paragraph"/>You can specify a different profile with the profile argument:<p class="paragraph"/><div class="code"><pre>grails create&#45;app myapp &#45;&#45;profile=web&#45;plugin</pre></div><p class="paragraph"/>Profiles encapsulate the project commands, templates and plugins that are designed to work for a given profile. They are stored in the <a href="https://github.com/grails/grails-profile-repository" target="blank">Grails Profile Repository</a> on Github.<p class="paragraph"/>This repository is checked out locally and stored in the <code>USER_HOME/.grails/repository</code> directory.<p class="paragraph"/><h4>Understanding a Profile's Structure</h4><p class="paragraph"/>A profile is a simple directory that contains a <code>profile.yml</code> file and directorys containing the "commands", "skeleton" and "templates" defined by the profile. Example:<p class="paragraph"/><div class="code"><pre>web
&#42; commands
&#42; create&#45;controller.yml
&#42; run&#45;app.groovy
&#8230;
&#42; skeleton
&#42; grails&#45;app
&#42; controllers
&#8230;
&#42; build.gradle
&#42; templates
&#42; artifacts
&#42; Controller.groovy
&#42; profile.yml</pre></div><p class="paragraph"/>The above example is a snippet of structure of the 'web' profile. The <code>profile.yml</code> file is defined as follows:<p class="paragraph"/><div class="code"><pre>description: Profile <span class="java&#45;keyword">for</span> Web applications
<span class="java&#45;keyword">extends</span>: base</pre></div><p class="paragraph"/>As you can see it contains the description of the profile and a definition of which profiles this profile extends, since one profile can extend from another.<p class="paragraph"/>When the <code>create-app</code> 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 <code>build.gradle</code> then the child profile will override the parent.<p class="paragraph"/><h4>Defining Profile Commands</h4><p class="paragraph"/>A profile can define new commands that apply only to that profile using YAML or Groovy scripts. Below is an example of the <a href="../ref/Command Line/create-controller.html" class="commandLine">create-controller</a> command defined in YAML:<p class="paragraph"/><div class="code"><pre>description:
&#45; Creates a controller
&#45; usage: 'create&#45;controller &#91;controller name&#93;'
&#45; completer: org.grails.cli.interactive.completers.DomainClassCompleter
&#45; argument: <span class="java&#45;quote">"Controller Name"</span>
description: <span class="java&#45;quote">"The name of the controller"</span>
steps:
&#45; command: render
template: templates/artifacts/Controller.groovy
destination: grails&#45;app/controllers/<code>artifact.<span class="java&#45;keyword">package</span>.path</code>/<code>artifact.name</code>Controller.groovy
&#45; command: render
template: templates/testing/Controller.groovy
destination: src/test/groovy/<code>artifact.<span class="java&#45;keyword">package</span>.path</code>/<code>artifact.name</code>ControllerSpec.groovy
&#45; command: mkdir
location: grails&#45;app/views/<code>artifact.propertyName</code></pre></div><p class="paragraph"/>Commands defined in YAML must define one or many steps. Each step is a command in itself. The available step types are:
<ul class="star">
<li><code>render</code> - To render a template to a given destination (as seen in the previous example)</li>
<li><code>mkdir</code> - To make a directory specified by the <code>location</code> parameter</li>
<li><code>execute</code> - To execute a command specified by the <code>class</code> parameter. Must be a class that implements the <a href="http://grails.org/doc/3.0.x/api/org/grails/cli/profile/Command.html" class="api">Command</a> interface.</li>
<li><code>gradle</code> - To execute one or many Gradle tasks specified by the <code>tasks</code> parameter.</li>
</ul><p class="paragraph"/>For example to invoke a Gradle task, you can define the following YAML:<p class="paragraph"/><div class="code"><pre>description: Creates a WAR file <span class="java&#45;keyword">for</span> deployment to a container (like Tomcat)
minArguments: 0
usage: |
war
steps:
&#45; command: gradle
tasks:
&#45; war</pre></div><p class="paragraph"/>If you need more flexiblity than what the declarative YAML approach provides you can create Groovy script commands. Each Command script is extends from the <a href="http://grails.org/doc/3.0.x/api/org/grails/cli/profile/commands/script/GroovyScriptCommmand.html" class="api">GroovyScriptCommmand</a> class and hence has all of the methods of that class available to it.<p class="paragraph"/>The following is an example of the <a href="../ref/Command Line/create-script.html" class="commandLine">create-script</a> command written in Groovy:<p class="paragraph"/><div class="code"><pre>description( <span class="java&#45;quote">"Creates a Grails script"</span> ) &#123;
usage <span class="java&#45;quote">"grails create&#45;script &#91;SCRIPT NAME&#93;"</span>
argument name:'Script Name', description:<span class="java&#45;quote">"The name of the script to create"</span>
flag name:'force', description:<span class="java&#45;quote">"Whether to overwrite existing files"</span>
&#125;<p class="paragraph"/>def scriptName = args&#91;0&#93;
def model = model(scriptName)
def overwrite = flag('force') ? <span class="java&#45;keyword">true</span> : <span class="java&#45;keyword">false</span><p class="paragraph"/>render template: template('artifacts/Script.groovy'),
destination: file(<span class="java&#45;quote">"src/main/scripts/$&#123;model.lowerCaseName&#125;.groovy"</span>),
model: model,
overwrite: overwrite</pre></div><p class="paragraph"/>For more information on creating Groovy commands see the following section on creating custom Grails scripts.<p class="paragraph"/>
<h2 id="creatingCustomScripts">5.3 Creating Custom Scripts</h2>
You can create your own Command scripts by running the <a href="../ref/Command Line/create-script.html" class="commandLine">create-script</a> command from the root of your project. For example the following command:<p class="paragraph"/><div class="code"><pre>grails create&#45;script hello&#45;world</pre></div><p class="paragraph"/><p class="paragraph"/>Will create a script called <code>src/main/scripts/hello-world.groovy</code>. Each Command script is extends from the <a href="http://grails.org/doc/3.0.x/api/org/grails/cli/profile/commands/script/GroovyScriptCommmand.html" class="api">GroovyScriptCommmand</a> class and hence has all of the methods of that class available to it.<p class="paragraph"/><blockquote class="note">
In general Grails scripts should be used for scripting the Gradle based build system and code generation. Scripts cannot load application classes and in fact should not since Gradle is required to construct the application classpath.
</blockquote><p class="paragraph"/>See below for an example script that prints 'Hello World':<p class="paragraph"/><div class="code"><pre>description <span class="java&#45;quote">"Example description"</span>, <span class="java&#45;quote">"grails hello&#45;world"</span><p class="paragraph"/>println <span class="java&#45;quote">"Hello World"</span></pre></div><p class="paragraph"/>The <code>description</code> method is used to define the output seen by <code>grails help</code> and to aid users of the script. The following is a more complete example of providing a description taken from the <code>generate-all</code> command:<p class="paragraph"/><div class="code"><pre>description( <span class="java&#45;quote">"Generates a controller that performs CRUD operations and the associated views"</span> ) &#123;
usage <span class="java&#45;quote">"grails generate&#45;all &#91;DOMAIN CLASS&#93;"</span>
flag name:'force', description:<span class="java&#45;quote">"Whether to overwrite existing files"</span>
argument name:'Domain <span class="java&#45;object">Class</span>', description:'The name of the domain class'
&#125;</pre></div><p class="paragraph"/>As you can see this description profiles usage instructions, a flag and an argument. This allows the command to be used as follows:<p class="paragraph"/><div class="code"><pre>grails generate&#45;all MyClass &#45;&#45;force</pre></div><p class="paragraph"/><p class="paragraph"/>
<a name="4.2 Re-using Grails scripts"><!-- Legacy link --></a>
<h2 id="reusingGrailsScripts">5.4 Re-using Grails scripts</h2>
Grails ships with a lot of command line functionality out of the box that you may find useful in your own scripts (See the command line reference in the reference guide for info on all the commands).<p class="paragraph"/>Any script you create an invoke another Grails script simply by invoking a method:<p class="paragraph"/><div class="code"><pre>testApp()</pre></div><p class="paragraph"/>The above will invoke the <code>test-app</code> command. You can also pass arguments using the method arguments:<p class="paragraph"/><div class="code"><pre>testApp('&#45;&#45;debug&#45;jvm')</pre></div><p class="paragraph"/><h4>Invoking Gradle </h4><p class="paragraph"/>Instead of invoking another Grails CLI command you can invoke Gradle directory using the <code>gradle</code> property.<p class="paragraph"/><div class="code"><pre>gradle.compileGroovy()</pre></div><p class="paragraph"/><h4>Invoking Ant</h4><p class="paragraph"/>You can also invoke Ant tasks from scripts which can help if you need to writing code generation and automation tasks:<p class="paragraph"/><div class="code"><pre>ant.mkdir(dir:<span class="java&#45;quote">"path"</span>)</pre></div><p class="paragraph"/><h4>Template Generation</h4><p class="paragraph"/>Plugins and applications that need to define template generation tasks can do so using scripts. A example of this is the Scaffolding plugin which defines the <code>generate-all</code> and <code>generate-controllers</code> commands.<p class="paragraph"/>Every Grails script implements the <a href="http://grails.org/doc/3.0.x/api/org/grails/cli/profile/commands/templates/TemplateRenderer.html" class="api">TemplateRenderer</a> interface which makes it trivial to render templates to the users project workspace.<p class="paragraph"/>The following is an example of the <a href="../ref/Command Line/create-script.html" class="commandLine">create-script</a> command written in Groovy:<p class="paragraph"/><div class="code"><pre>description( <span class="java&#45;quote">"Creates a Grails script"</span> ) &#123;
usage <span class="java&#45;quote">"grails create&#45;script &#91;SCRIPT NAME&#93;"</span>
argument name:'Script Name', description:<span class="java&#45;quote">"The name of the script to create"</span>
flag name:'force', description:<span class="java&#45;quote">"Whether to overwrite existing files"</span>
&#125;<p class="paragraph"/>def scriptName = args&#91;0&#93;
def model = model(scriptName)
def overwrite = flag('force') ? <span class="java&#45;keyword">true</span> : <span class="java&#45;keyword">false</span><p class="paragraph"/>render template: template('artifacts/Script.groovy'),
destination: file(<span class="java&#45;quote">"src/main/scripts/$&#123;model.lowerCaseName&#125;.groovy"</span>),
model: model,
overwrite: overwrite</pre></div>
<h2 id="gradleBuild">5.5 Building with Gradle</h2>
Grails 3.0 uses the <a href="http://gradle.org" target="blank">Gradle Build System</a> for build related tasks such as compilation, runnings tests and producing binary distrubutions of your project. It is recommended to use Gradle 2.2 or above with Grails 3.0.<p class="paragraph"/>The build is defined by the <code>build.gradle</code> file which specifies the version of your project, the dependencies of the project and the repositories where to find those dependencies (amongst other things).<p class="paragraph"/>When you invoke the <code>grails</code> command the version of Gradle that ships with Grails 3.0 (currently 2.3) is invoked by the <code>grails</code> process via the <a href="http://www.gradle.org/docs/current/userguide/embedding.html" target="blank">Gradle Tooling API</a>:<p class="paragraph"/><div class="code"><pre>&#35; Equivalent to 'gradle classes'
$ grails compile</pre></div><p class="paragraph"/>You can invoke Gradle directly using the <code>gradle</code> command and use your own local version of Gradle, however you will need Gradle 2.2 or above to work with Grails 3.0:<p class="paragraph"/><div class="code"><pre>$ gradle assemble</pre></div><p class="paragraph"/>
<h2 id="gradleDependencies">5.5.1 Defining Dependencies with Gradle</h2>
Dependencies for your project are defined in the <code>dependencies</code> block. In general you can follow the <a href="http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html" target="blank">Gradle documentation on dependency management</a> to understand how to configure additional dependencies.<p class="paragraph"/>The default dependencies for the "web" profile can be seen below:<p class="paragraph"/><div class="code"><pre>dependencies &#123;
compile 'org.springframework.boot:spring&#45;boot&#45;starter&#45;logging'
compile('org.springframework.boot:spring&#45;boot&#45;starter&#45;actuator')
compile 'org.springframework.boot:spring&#45;boot&#45;autoconfigure'
compile 'org.springframework.boot:spring&#45;boot&#45;starter&#45;tomcat'
compile 'org.grails:grails&#45;dependencies'
compile 'org.grails:grails&#45;web&#45;boot'<p class="paragraph"/> compile 'org.grails.plugins:hibernate'
compile 'org.grails.plugins:cache'
compile 'org.hibernate:hibernate&#45;ehcache'<p class="paragraph"/> runtime 'org.grails.plugins:asset&#45;pipeline'
runtime 'org.grails.plugins:scaffolding'<p class="paragraph"/> testCompile <span class="java&#45;quote">"org.grails:grails&#45;plugin&#45;testing'
testCompile "</span>org.grails.plugins:geb'<p class="paragraph"/> // Note: It is recommended to update to a more robust driver (Chrome, Firefox etc.)
testRuntime 'org.seleniumhq.selenium:selenium&#45;htmlunit&#45;driver:2.44.0'<p class="paragraph"/> console 'org.grails:grails&#45;console'
&#125;</pre></div><p class="paragraph"/>Note that version numbers are not present in the majority of the dependencies. This is thanks to the dependency management plugin which configures a Maven BOM that defines the default dependency versions for certain commonly used dependencies and plugins:<p class="paragraph"/><div class="code"><pre>dependencyManagement &#123;
imports &#123;
mavenBom 'org.grails:grails&#45;bom:' + grailsVersion
&#125;
applyMavenExclusions <span class="java&#45;keyword">false</span>
&#125;</pre></div>
<h2 id="gradleTasks">5.5.2 Working with Gradle Tasks</h2>
As mentioned previously the <code>grails</code> command uses an embedded version of Gradle and certain Grails commands that existed in previous versions of Grails map onto their Gradle equivalents. The following table shows which Grails command invoke which Gradle task:<p class="paragraph"/><table class="wiki-table" cellpadding="0" cellspacing="0" border="0"><tr><th><strong class="bold">Grails Command</strong></th><th><strong class="bold">Gradle Task</strong></th></tr><tr class="table-odd"><td>clean</td><td>clean</td></tr><tr class="table-even"><td>compile</td><td>classes</td></tr><tr class="table-odd"><td>package</td><td>assemble</td></tr><tr class="table-even"><td>run-app</td><td>run</td></tr><tr class="table-odd"><td>test-app</td><td>test</td></tr><tr class="table-even"><td>war</td><td>assemble</td></tr></table><p class="paragraph"/>You can invoke any of these Grails commands using their Gradle equivalents if you prefer:<p class="paragraph"/><div class="code"><pre>$ gradle test</pre></div><p class="paragraph"/>Note however that you will need to use a version of Gradle compatible with Grails 3.0 (Gradle 2.2 or above). If you wish to invoke a Gradle task using the version of Gradle used by Grails you can do so with the <code>grails</code> command:<p class="paragraph"/><div class="code"><pre>$ grails gradle compileGroovy</pre></div><p class="paragraph"/>However, it is recommended you do this via interactive mode, as it greatly speeds up execution and provides TAB completion for the available Gradle tasks:<p class="paragraph"/><div class="code"><pre>$ grails
| Enter a command name to run. Use TAB <span class="java&#45;keyword">for</span> completion:
grails&#62; gradle compileGroovy
...</pre></div><p class="paragraph"/>To find out what Gradle tasks are available without using interactive mode TAB completion you can use the Gradle <code>tasks</code> task:<p class="paragraph"/><div class="code"><pre>gradle tasks</pre></div><p class="paragraph"/><p class="paragraph"/>
<h2 id="gradlePlugins">5.5.3 Grails plugins for Gradle</h2>
When you create a new project with the <a href="../ref/Command Line/create-app.html" class="commandLine">create-app</a> command, a default <code>build.gradle</code> is created. The default <code>build.gradle</code> configures the build with a set of Gradle plugins that allow Gradle to build the Grails project:<p class="paragraph"/><div class="code"><pre>plugins &#123;
id <span class="java&#45;quote">"io.spring.dependency&#45;management"</span> version <span class="java&#45;quote">"0.3.1.RELEASE"</span>
&#125;<p class="paragraph"/>apply plugin: <span class="java&#45;quote">"spring&#45;boot"</span>
apply plugin: <span class="java&#45;quote">"war"</span>
apply plugin: <span class="java&#45;quote">"asset&#45;pipeline"</span>
apply plugin: <span class="java&#45;quote">"org.grails.grails&#45;web"</span>
apply plugin: <span class="java&#45;quote">"org.grails.grails&#45;gsp"</span>
apply plugin: <span class="java&#45;quote">"maven"</span></pre></div><p class="paragraph"/>The default plugins are as follows:
<ul class="star">
<li><code>dependency-management</code> - The <a href="https://plugins.gradle.org/plugin/io.spring.dependency-management" target="blank">dependency management</a> plugin allows Gradle to read Maven BOM files that define the default dependency versions used by Grails.</li>
<li><code>spring-boot</code> - The <a href="http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html" target="blank">Spring Boot</a> Gradle plugin enhances the default packaging tasks provided by Gradle to allow for the creation of runnable JAR/WAR files.</li>
<li><code>war</code> - The <a href="http://www.gradle.org/docs/current/userguide/war_plugin.html" target="blank">WAR plugin</a> changes the packaging so that Gradle creates as WAR file from you application. You can comment out this plugin if you wish to create only a runnable JAR file for standalone deployment.</li>
<li><code>asset-pipeline</code> - The <a href="https://github.com/bertramdev/asset-pipeline-core" target="blank">asset pipeline</a> plugin enables the compilation of static assets (JavaScript, CSS etc.)</li>
<li><code>maven</code> - The <a href="http://www.gradle.org/docs/current/userguide/maven_plugin.html" target="blank">maven plugin</a> allows installing your application into a local maven repository</li>
</ul><p class="paragraph"/>Many of these are built in plugins provided by Gradle or third party plugins. The Gradle plugins that Grails provides are as follows:
<ul class="star">
<li><code>org.grails.grails-core</code> - The primary Grails plugin for Gradle, included by all other plugins and designed to operate with all profiles.</li>
<li><code>org.grails.grails-plugin</code> - A plugin for Gradle for building Grails plugins.</li>
<li><code>org.grails.grails-web</code> - The Grails Web gradle plugin configures Gradle to understand the Grails conventions and directory structure.</li>
<li><code>org.grails.grails-gsp</code> - The Grails GSP plugin adds precompilation of GSP files for production deployments.</li>
<li><code>org.grails.grails-doc</code> - A plugin for Gradle for using Grails 2.0's documentation engine.</li>
</ul><p class="paragraph"/>
<div style="clear:both;margin-top:15px;"></div>
<div class="toc-item prev-left"><a href="../guide/conf.html">&lt;&lt; <strong>4</strong><span>Configuration</span></a></div>
<div class="toc-item next-right"><a href="../guide/GORM.html"><strong>6</strong><span>Object Relational Mapping (GORM)</span> >></a></div>
<div style="clear:both"></div>
</div>
</td>
<td id="col2">
<div class="local clearfix">
<div class="local-title">
<a href="../guide/index.html" target="mainFrame">Quick Reference</a>
<span class="toggle">(<a href="#" onclick="localToggle(); return false;">hide</a>)</span>
</div>
<div class="menu">
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Command Line</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Command%20Line/Usage.html">Usage</a></div>
<div class="menu-item"><a href="../ref/Command%20Line/alias.html">alias</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/bug-report.html">bug-report</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/clean.html">clean</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/compile.html">compile</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/console.html">console</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-app.html">create-app</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-command.html">create-command</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-controller.html">create-controller</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-domain-class.html">create-domain-class</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-functional-test.html">create-functional-test</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-integration-test.html">create-integration-test</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-interceptor.html">create-interceptor</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-plugin.html">create-plugin</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-script.html">create-script</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-service.html">create-service</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-tag-lib.html">create-tag-lib</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/create-unit-test.html">create-unit-test</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/dependency-report.html">dependency-report</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/doc.html">doc</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/generate-all.html">generate-all</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/generate-controller.html">generate-controller</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/generate-views.html">generate-views</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/help.html">help</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/list-plugins.html">list-plugins</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/package-plugin.html">package-plugin</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/package.html">package</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/plugin-info.html">plugin-info</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/run-app.html">run-app</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/schema-export.html">schema-export</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/shell.html">shell</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/stats.html">stats</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/test-app.html">test-app</a>
</div>
<div class="menu-item"><a href="../ref/Command%20Line/war.html">war</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Constraints</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Constraints/Usage.html">Usage</a></div>
<div class="menu-item"><a href="../ref/Constraints/attributes.html">attributes</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/bindable.html">bindable</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/blank.html">blank</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/creditCard.html">creditCard</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/email.html">email</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/inList.html">inList</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/matches.html">matches</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/max.html">max</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/maxSize.html">maxSize</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/min.html">min</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/minSize.html">minSize</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/notEqual.html">notEqual</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/nullable.html">nullable</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/range.html">range</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/scale.html">scale</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/size.html">size</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/unique.html">unique</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/url.html">url</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/validator.html">validator</a>
</div>
<div class="menu-item"><a href="../ref/Constraints/widget.html">widget</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Controllers</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Controllers/Usage.html">Usage</a></div>
<div class="menu-item"><a href="../ref/Controllers/actionName.html">actionName</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/afterInterceptor.html">afterInterceptor</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/allowedMethods.html">allowedMethods</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/beforeInterceptor.html">beforeInterceptor</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/bindData.html">bindData</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/chain.html">chain</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/controllerName.html">controllerName</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/defaultAction.html">defaultAction</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/errors.html">errors</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/flash.html">flash</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/forward.html">forward</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/grailsApplication.html">grailsApplication</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/hasErrors.html">hasErrors</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/namespace.html">namespace</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/params.html">params</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/redirect.html">redirect</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/render.html">render</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/request.html">request</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/respond.html">respond</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/response.html">response</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/responseFormats.html">responseFormats</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/scope.html">scope</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/servletContext.html">servletContext</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/session.html">session</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/withForm.html">withForm</a>
</div>
<div class="menu-item"><a href="../ref/Controllers/withFormat.html">withFormat</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Database Mapping</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Database%20Mapping/Usage.html">Usage</a></div>
<div class="menu-item"><a href="../ref/Database%20Mapping/autoImport.html">autoImport</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/autoTimestamp.html">autoTimestamp</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/batchSize.html">batchSize</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/cache.html">cache</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/cascade.html">cascade</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/column.html">column</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/comment.html">comment</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/discriminator.html">discriminator</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/dynamicInsert.html">dynamicInsert</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/dynamicUpdate.html">dynamicUpdate</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/fetch.html">fetch</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/id.html">id</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/ignoreNotFound.html">ignoreNotFound</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/indexColumn.html">indexColumn</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/insertable.html">insertable</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/joinTable.html">joinTable</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/lazy.html">lazy</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/order.html">order</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/sort.html">sort</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/table.html">table</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/type.html">type</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/updateable.html">updateable</a>
</div>
<div class="menu-item"><a href="../ref/Database%20Mapping/version.html">version</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Domain Classes</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Domain%20Classes/Usage.html">Usage</a></div>
<div class="menu-item"><a href="../ref/Domain%20Classes/addTo.html">addTo</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/attach.html">attach</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/belongsTo.html">belongsTo</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/clearErrors.html">clearErrors</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/constraints.html">constraints</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/count.html">count</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/countBy.html">countBy</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/createCriteria.html">createCriteria</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/delete.html">delete</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/discard.html">discard</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/embedded.html">embedded</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/errors.html">errors</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/executeQuery.html">executeQuery</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/executeUpdate.html">executeUpdate</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/exists.html">exists</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/fetchMode.html">fetchMode</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/find.html">find</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findAll.html">findAll</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findAllBy.html">findAllBy</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findAllWhere.html">findAllWhere</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findBy.html">findBy</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findOrCreateBy.html">findOrCreateBy</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findOrCreateWhere.html">findOrCreateWhere</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findOrSaveBy.html">findOrSaveBy</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findOrSaveWhere.html">findOrSaveWhere</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/findWhere.html">findWhere</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/first.html">first</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/get.html">get</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/getAll.html">getAll</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/getDirtyPropertyNames.html">getDirtyPropertyNames</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/getPersistentValue.html">getPersistentValue</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/hasErrors.html">hasErrors</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/hasMany.html">hasMany</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/hasOne.html">hasOne</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/ident.html">ident</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/instanceOf.html">instanceOf</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/isAttached.html">isAttached</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/isDirty.html">isDirty</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/last.html">last</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/list.html">list</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/listOrderBy.html">listOrderBy</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/load.html">load</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/lock.html">lock</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/mapWith.html">mapWith</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/mappedBy.html">mappedBy</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/mapping.html">mapping</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/merge.html">merge</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/namedQueries.html">namedQueries</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/properties.html">properties</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/read.html">read</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/refresh.html">refresh</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/removeFrom.html">removeFrom</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/save.html">save</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/transients.html">transients</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/validate.html">validate</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/where.html">where</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/whereAny.html">whereAny</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/withCriteria.html">withCriteria</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/withNewSession.html">withNewSession</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/withSession.html">withSession</a>
</div>
<div class="menu-item"><a href="../ref/Domain%20Classes/withTransaction.html">withTransaction</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Plug-ins</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Plug-ins/Usage.html">Usage</a></div>
<div class="menu-item"><a href="../ref/Plug-ins/URL%20mappings.html">URL mappings</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/codecs.html">codecs</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/controllers.html">controllers</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/core.html">core</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/dataSource.html">dataSource</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/domainClasses.html">domainClasses</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/hibernate.html">hibernate</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/i18n.html">i18n</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/logging.html">logging</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/scaffolding.html">scaffolding</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/services.html">services</a>
</div>
<div class="menu-item"><a href="../ref/Plug-ins/servlets.html">servlets</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Services</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Services/Usage.html">Usage</a></div>
<div class="menu-item"><a href="../ref/Services/scope.html">scope</a>
</div>
<div class="menu-item"><a href="../ref/Services/transactional.html">transactional</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Servlet API</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Servlet%20API/request.html">request</a>
</div>
<div class="menu-item"><a href="../ref/Servlet%20API/response.html">response</a>
</div>
<div class="menu-item"><a href="../ref/Servlet%20API/servletContext.html">servletContext</a>
</div>
<div class="menu-item"><a href="../ref/Servlet%20API/session.html">session</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Tag Libraries</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Tag%20Libraries/Usage.html">Usage</a></div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/actionName.html">actionName</a>
</div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/controllerName.html">controllerName</a>
</div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/flash.html">flash</a>
</div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/pageScope.html">pageScope</a>
</div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/params.html">params</a>
</div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/request.html">request</a>
</div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/response.html">response</a>
</div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/servletContext.html">servletContext</a>
</div>
<div class="menu-item"><a href="../ref/Tag%20Libraries/session.html">session</a>
</div>
</div>
</div>
<div class="menu-block"><h1 class="menu-title" onclick="toggleRef(this.parentNode.childNodes[1])">Tags</h1><div class="menu-sub">
<div class="menu-item"><a href="../ref/Tags/actionSubmit.html">actionSubmit</a>
</div>
<div class="menu-item"><a href="../ref/Tags/actionSubmitImage.html">actionSubmitImage</a>
</div>
<div class="menu-item"><a href="../ref/Tags/applyLayout.html">applyLayout</a>
</div>
<div class="menu-item"><a href="../ref/Tags/checkBox.html">checkBox</a>
</div>
<div class="menu-item"><a href="../ref/Tags/collect.html">collect</a>
</div>
<div class="menu-item"><a href="../ref/Tags/cookie.html">cookie</a>
</div>
<div class="menu-item"><a href="../ref/Tags/country.html">country</a>
</div>
<div class="menu-item"><a href="../ref/Tags/countrySelect.html">countrySelect</a>
</div>
<div class="menu-item"><a href="../ref/Tags/createLink.html">createLink</a>
</div>
<div class="menu-item"><a href="../ref/Tags/createLinkTo.html">createLinkTo</a>
</div>
<div class="menu-item"><a href="../ref/Tags/currencySelect.html">currencySelect</a>
</div>
<div class="menu-item"><a href="../ref/Tags/datePicker.html">datePicker</a>
</div>
<div class="menu-item"><a href="../ref/Tags/each.html">each</a>
</div>
<div class="menu-item"><a href="../ref/Tags/eachError.html">eachError</a>
</div>
<div class="menu-item"><a href="../ref/Tags/else.html">else</a>
</div>
<div class="menu-item"><a href="../ref/Tags/elseif.html">elseif</a>
</div>
<div class="menu-item"><a href="../ref/Tags/external.html">external</a>
</div>
<div class="menu-item"><a href="../ref/Tags/field.html">field</a>
</div>
<div class="menu-item"><a href="../ref/Tags/fieldValue.html">fieldValue</a>
</div>
<div class="menu-item"><a href="../ref/Tags/findAll.html">findAll</a>
</div>
<div class="menu-item"><a href="../ref/Tags/form.html">form</a>
</div>
<div class="menu-item"><a href="../ref/Tags/formatBoolean.html">formatBoolean</a>
</div>
<div class="menu-item"><a href="../ref/Tags/formatDate.html">formatDate</a>
</div>
<div class="menu-item"><a href="../ref/Tags/formatNumber.html">formatNumber</a>
</div>
<div class="menu-item"><a href="../ref/Tags/grep.html">grep</a>
</div>
<div class="menu-item"><a href="../ref/Tags/hasErrors.html">hasErrors</a>
</div>
<div class="menu-item"><a href="../ref/Tags/header.html">header</a>
</div>
<div class="menu-item"><a href="../ref/Tags/hiddenField.html">hiddenField</a>
</div>
<div class="menu-item"><a href="../ref/Tags/if.html">if</a>
</div>
<div class="menu-item"><a href="../ref/Tags/img.html">img</a>
</div>
<div class="menu-item"><a href="../ref/Tags/include.html">include</a>
</div>
<div class="menu-item"><a href="../ref/Tags/isAvailable.html">isAvailable</a>
</div>
<div class="menu-item"><a href="../ref/Tags/isNotAvailable.html">isNotAvailable</a>
</div>
<div class="menu-item"><a href="../ref/Tags/javascript.html">javascript</a>
</div>
<div class="menu-item"><a href="../ref/Tags/join.html">join</a>
</div>
<div class="menu-item"><a href="../ref/Tags/layoutBody.html">layoutBody</a>
</div>
<div class="menu-item"><a href="../ref/Tags/layoutHead.html">layoutHead</a>
</div>
<div class="menu-item"><a href="../ref/Tags/layoutTitle.html">layoutTitle</a>
</div>
<div class="menu-item"><a href="../ref/Tags/link.html">link</a>
</div>
<div class="menu-item"><a href="../ref/Tags/localeSelect.html">localeSelect</a>
</div>
<div class="menu-item"><a href="../ref/Tags/message.html">message</a>
</div>
<div class="menu-item"><a href="../ref/Tags/meta.html">meta</a>
</div>
<div class="menu-item"><a href="../ref/Tags/pageProperty.html">pageProperty</a>
</div>
<div class="menu-item"><a href="../ref/Tags/paginate.html">paginate</a>
</div>
<div class="menu-item"><a href="../ref/Tags/passwordField.html">passwordField</a>
</div>
<div class="menu-item"><a href="../ref/Tags/radio.html">radio</a>
</div>
<div class="menu-item"><a href="../ref/Tags/radioGroup.html">radioGroup</a>
</div>
<div class="menu-item"><a href="../ref/Tags/render.html">render</a>
</div>
<div class="menu-item"><a href="../ref/Tags/renderErrors.html">renderErrors</a>
</div>
<div class="menu-item"><a href="../ref/Tags/resource.html">resource</a>
</div>
<div class="menu-item"><a href="../ref/Tags/select.html">select</a>
</div>
<div class="menu-item"><a href="../ref/Tags/set.html">set</a>
</div>
<div class="menu-item"><a href="../ref/Tags/sortableColumn.html">sortableColumn</a>
</div>
<div class="menu-item"><a href="../ref/Tags/submitButton.html">submitButton</a>
</div>
<div class="menu-item"><a href="../ref/Tags/textArea.html">textArea</a>
</div>
<div class="menu-item"><a href="../ref/Tags/textField.html">textField</a>
</div>
<div class="menu-item"><a href="../ref/Tags/timeZoneSelect.html">timeZoneSelect</a>
</div>
<div class="menu-item"><a href="../ref/Tags/unless.html">unless</a>
</div>
<div class="menu-item"><a href="../ref/Tags/uploadForm.html">uploadForm</a>
</div>
<div class="menu-item"><a href="../ref/Tags/while.html">while</a>
</div>
</div>
</div>
</div>
</div>
</td>
</tr>
</table>
<div id="footer">
Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.
</div>
<script type="text/javascript" src="../js/docs.js"></script>
</body>
</html>