You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by as...@apache.org on 2026/09/25 18:43:02 UTC
(grails-website) branch asf-site-production updated: Deploying to documentation branch - 18:42:46
This is an automated email from the ASF dual-hosted git repository.
asf-ci-deploy pushed a commit to branch asf-site-production
in repository https://gitbox.apache.org/repos/asf/grails-website.git
The following commit(s) were added to refs/heads/asf-site-production by this push:
new 16a4411c787 Deploying to documentation branch - 18:42:46
16a4411c787 is described below
commit 16a4411c787b5083168fc47dbde0e46a1fbfda00
Author: jdaugherty <jd...@users.noreply.github.com>
AuthorDate: Fri Sep 25 18:42:50 2026 +0000
Deploying to documentation branch - 18:42:46
---
docs/snapshot/api/allclasses-frame.html | 7 +-
.../scaffolding/ScaffoldingViewResolver.html | 110 ++-
docs/snapshot/api/grails/util/BuildSettings.html | 55 +-
docs/snapshot/api/index-all.html | 159 +++-
.../grails/scaffolding/ScaffoldedPages.html} | 174 ++--
.../ScaffoldedPagesGenerator.Failure.html} | 200 +++--
.../ScaffoldedPagesGenerator.Page.html} | 161 ++--
.../ScaffoldedPagesGenerator.Result.html} | 144 ++--
.../scaffolding/ScaffoldedPagesGenerator.html} | 176 ++--
.../scaffolding/aot/ScaffoldingRuntimeHints.html | 7 +-
.../grails/scaffolding/aot/package-summary.html | 3 +-
.../apache/grails/scaffolding/package-frame.html | 58 ++
.../grails/scaffolding}/package-summary.html | 84 +-
.../scaffolding/GenerateScaffoldedViewsTask.html | 269 ++++--
.../gradle/plugin/scaffolding/package-summary.html | 3 +-
.../views/gsp/GroovyPageForkCompileTask.html | 45 +-
...agePlugin.ScaffoldedControllers.Parameters.html | 259 ------
.../gradle/plugin/views/gsp/GroovyPagePlugin.html | 58 +-
.../gradle/plugin/views/gsp/package-frame.html | 10 +-
.../gradle/plugin/views/gsp/package-summary.html | 34 -
.../grails/gsp/compiler/GroovyPageCompiler.html | 58 +-
.../grails/gsp/io/DefaultGroovyPageLocator.html | 50 +-
.../CachingGrailsConventionGroovyPageLocator.html | 2 +-
.../gsp/io/GrailsConventionGroovyPageLocator.html | 2 +-
.../grails/web/pages/GroovyPageForkedCompiler.html | 16 +-
.../web/servlet/view/GroovyPageViewResolver.html | 33 +-
docs/snapshot/api/overview-frame.html | 3 +
docs/snapshot/api/overview-summary.html | 906 +++++++++++----------
docs/snapshot/api/package-list | 1 +
.../developer-manual/gettingStarted.html | 2 +-
.../grails-data/developer-manual/introduction.html | 2 +-
.../grails-data/developer-manual/stepByStep.html | 2 +-
.../grails-data/developer-manual/testing.html | 2 +-
.../developer-manual/understandingApi.html | 2 +-
.../understandingApi/datastoreBasics.html | 2 +-
.../understandingApi/gormApis.html | 2 +-
.../understandingApi/gormEnhancer.html | 2 +-
.../understandingApi/implementingCrud.html | 2 +-
.../understandingApi/implementingQueries.html | 2 +-
.../understandingApi/secondaryIndexes.html | 2 +-
.../hibernate5/manual/databaseMigration/index.html | 7 +-
.../grails-data/hibernate5/manual/index.html | 55 +-
.../hibernate5/manual/persistenceBasics.html | 6 +-
.../manual/persistenceBasics/cascades.html | 34 +-
.../manual/programmaticTransactions.html | 10 +-
.../grails-data/hibernate5/manual/querying.html | 10 +-
.../grails-data/whats-new-manual/index.html | 2 +-
docs/snapshot/guide/scaffolding.html | 13 +-
docs/snapshot/guide/single.html | 83 +-
docs/snapshot/guide/testing.html | 30 +
docs/snapshot/guide/upgrading.html | 40 +
51 files changed, 1912 insertions(+), 1487 deletions(-)
diff --git a/docs/snapshot/api/allclasses-frame.html b/docs/snapshot/api/allclasses-frame.html
index 38a99be83fd..e2dad2a59f8 100644
--- a/docs/snapshot/api/allclasses-frame.html
+++ b/docs/snapshot/api/allclasses-frame.html
@@ -1763,8 +1763,6 @@
<li><a href="org/grails/gsp/GroovyPageMetaInfo.html" title="class in org.grails.gsp" target="classFrame">GroovyPageMetaInfo</a></li>
<li><a href="org/grails/gsp/compiler/GroovyPageParser.html" title="class in org.grails.gsp.compiler" target="classFrame">GroovyPageParser</a></li>
<li><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html" title="class in org.grails.gradle.plugin.views.gsp" target="classFrame">GroovyPagePlugin</a></li>
-<li><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html" title="class in org.grails.gradle.plugin.views.gsp.GroovyPagePlugin" target="classFrame">GroovyPagePlugin.ScaffoldedControllers</a></li>
-<li><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html" title="interface in org.grails.gradle.plugin.views.gsp.GroovyPagePlugin.ScaffoldedControllers" target="classFrame"><I>GroovyPagePlugin.ScaffoldedControllers.Parameters</I></a></li>
<li><a href="org/grails/gsp/GroovyPageResourceLoader.html" title="class in org.grails.gsp" target="classFrame">GroovyPageResourceLoader</a></li>
<li><a href="org/grails/gsp/io/GroovyPageResourceScriptSource.html" title="class in org.grails.gsp.io" target="classFrame">GroovyPageResourceScriptSource</a></li>
<li><a href="org/grails/gsp/io/GroovyPageScriptSource.html" title="interface in org.grails.gsp.io" target="classFrame"><I>GroovyPageScriptSource</I></a></li>
@@ -3107,6 +3105,11 @@
<li><a href="org/grails/datastore/mapping/engine/event/SaveOrUpdateEvent.html" title="class in org.grails.datastore.mapping.engine.event" target="classFrame">SaveOrUpdateEvent</a></li>
<li><a href="grails/plugin/scaffolding/annotation/Scaffold.html" title="annotation type in grails.plugin.scaffolding.annotation" target="classFrame">Scaffold</a></li>
<li><a href="grails/plugin/scaffolding/ScaffoldService.html" title="interface in grails.plugin.scaffolding" target="classFrame"><I>ScaffoldService</I></a></li>
+<li><a href="org/apache/grails/scaffolding/ScaffoldedPages.html" title="class in org.apache.grails.scaffolding" target="classFrame">ScaffoldedPages</a></li>
+<li><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html" title="class in org.apache.grails.scaffolding" target="classFrame">ScaffoldedPagesGenerator</a></li>
+<li><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html" title="class in org.apache.grails.scaffolding.ScaffoldedPagesGenerator" target="classFrame">ScaffoldedPagesGenerator.Failure</a></li>
+<li><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html" title="class in org.apache.grails.scaffolding.ScaffoldedPagesGenerator" target="classFrame">ScaffoldedPagesGenerator.Page</a></li>
+<li><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html" title="class in org.apache.grails.scaffolding.ScaffoldedPagesGenerator" target="classFrame">ScaffoldedPagesGenerator.Result</a></li>
<li><a href="org/grails/scaffolding/ScaffoldingBeanConfiguration.html" title="class in org.grails.scaffolding" target="classFrame">ScaffoldingBeanConfiguration</a></li>
<li><a href="org/grails/compiler/scaffolding/ScaffoldingControllerInjector.html" title="class in org.grails.compiler.scaffolding" target="classFrame">ScaffoldingControllerInjector</a></li>
<li><a href="grails/plugin/scaffolding/ScaffoldingGrailsPlugin.html" title="class in grails.plugin.scaffolding" target="classFrame">ScaffoldingGrailsPlugin</a></li>
diff --git a/docs/snapshot/api/grails/plugin/scaffolding/ScaffoldingViewResolver.html b/docs/snapshot/api/grails/plugin/scaffolding/ScaffoldingViewResolver.html
index 57d98554965..827743c700f 100644
--- a/docs/snapshot/api/grails/plugin/scaffolding/ScaffoldingViewResolver.html
+++ b/docs/snapshot/api/grails/plugin/scaffolding/ScaffoldingViewResolver.html
@@ -158,6 +158,12 @@ implements <a href='../../../grails/codegen/model/ModelBuilder.html'>ModelBuilde
</tr>
<tr class="rowColor">
+ <td class="colFirst"><code><strong>protected java.util.Set<java.lang.String></strong></code> </td>
+ <td class="colLast"><code><a href="#reportedPages">reportedPages</a></code></td>
+ <td class="colLast">The pages already reported as having no compiled page, so each is reported once.</td>
+ </tr>
+
+ <tr class="altColor">
<td class="colFirst"><code><strong>protected java.util.Map<java.lang.Class, java.lang.Object></strong></code> </td>
<td class="colLast"><code><a href="#scaffoldValueCache">scaffoldValueCache</a></code></td>
<td class="colLast"></td>
@@ -276,12 +282,37 @@ implements <a href='../../../grails/codegen/model/ModelBuilder.html'>ModelBuilde
<td class="colLast"><code><strong><a href="#clearCache()">clearCache</a></strong>()</code><br></td>
</tr>
+ <tr class="altColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>protected boolean</code></td>
+ <td class="colLast"><code><strong><a href="#inNativeImage()">inNativeImage</a></strong>()</code><br>Whether this runs in a native image, which cannot expand a template into a page at runtime.</td>
+ </tr>
+
+ <tr class="rowColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>protected boolean</code></td>
+ <td class="colLast"><code><strong><a href="#isDevelopmentMode()">isDevelopmentMode</a></strong>()</code><br>Whether the application is being developed. </td>
+ </tr>
+
<tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a></code></td>
<td class="colLast"><code><strong><a href="#loadView(java.lang.String, java.util.Locale)">loadView</a></strong>(java.lang.String viewName, java.util.Locale locale)</code><br></td>
</tr>
+ <tr class="rowColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>protected boolean</code></td>
+ <td class="colLast"><code><strong><a href="#precompiledPagesInUse()">precompiledPagesInUse</a></strong>()</code><br>Whether pages compiled by the build are used, which is whether the page locator uses them.</td>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>protected boolean</code></td>
+ <td class="colLast"><code><strong><a href="#readsTemplatesFromProject()">readsTemplatesFromProject</a></strong>()</code><br>Whether templates are read from the project's <CODE>src/main/templates</CODE>, so that an edit to
+ one shows without a rebuild. </td>
+ </tr>
+
<tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>void</code></td>
@@ -294,6 +325,20 @@ implements <a href='../../../grails/codegen/model/ModelBuilder.html'>ModelBuilde
<td class="colLast"><code><strong><a href="#setEnableReload(boolean)">setEnableReload</a></strong>(boolean enableReload)</code><br></td>
</tr>
+ <tr class="rowColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a></code></td>
+ <td class="colLast"><code><strong><a href="#tryGenerateScaffoldedView(java.lang.String, grails.core.GrailsControllerClass)">tryGenerateScaffoldedView</a></strong>(java.lang.String viewName, <a href='../../../grails/core/GrailsControllerClass.html'>GrailsControllerClass</a> controllerClass)</code><br>Attempts to generate a scaffolded view for the given controller from the template it uses for
+ a view it has none of: its namespace's, when it has a namespace and there is one, otherwise
+ the general one.</td>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a></code></td>
+ <td class="colLast"><code><strong><a href="#tryGenerateScaffoldedView(java.lang.String, grails.core.GrailsControllerClass, Closure)">tryGenerateScaffoldedView</a></strong>(java.lang.String viewName, <a href='../../../grails/core/GrailsControllerClass.html'>GrailsControllerClass</a> controllerClass, <a href='https://docs.groovy-lang.org/5.1.3/html/gapi/groovy/lang/Closure.html' title='Closure'>Closure</a><java.util.List<java.lang.String>> templatePa [...]
+ </tr>
+
</table>
</ul>
</li>
@@ -310,7 +355,7 @@ implements <a href='../../../grails/codegen/model/ModelBuilder.html'>ModelBuilde
<tr class="altColor">
<td class="colFirst"><code>class <a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html'>GroovyPageViewResolver</a></code></td>
- <td class="colLast"><code><a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html#call()'>call</a>, <a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html#clearCache()'>clearCache</a>, <a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html#createFallbackView(java.lang.String)'>createFallbackView</a>, <a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html#createGrailsView(java.lang.Strin [...]
+ <td class="colLast"><code><a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html#call()'>call</a>, <a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html#clearCache()'>clearCache</a>, <a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html#createFallbackView(java.lang.String)'>createFallbackView</a>, <a href='../../../org/grails/web/servlet/view/GroovyPageViewResolver.html#createGrailsView(java.lang.Strin [...]
</tr>
</table>
</ul>
@@ -359,6 +404,14 @@ implements <a href='../../../grails/codegen/model/ModelBuilder.html'>ModelBuilde
</li>
</ul>
+ <a name="reportedPages"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>protected final java.util.Set<java.lang.String> <strong>reportedPages</strong></h4>
+ <p>The pages already reported as having no compiled page, so each is reported once.</p>
+ </li>
+ </ul>
+
<a name="scaffoldValueCache"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
@@ -471,6 +524,23 @@ implements <a href='../../../grails/codegen/model/ModelBuilder.html'>ModelBuilde
</li>
</ul>
+ <a name="inNativeImage()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>protected boolean <strong>inNativeImage</strong>()</h4>
+ <p>Whether this runs in a native image, which cannot expand a template into a page at runtime.</p>
+ </li>
+ </ul>
+
+ <a name="isDevelopmentMode()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>protected boolean <strong>isDevelopmentMode</strong>()</h4>
+ <p> Whether the application is being developed. Overridable because that is derived from the
+ working directory when the class is loaded, and so cannot be varied any other way.</p>
+ </li>
+ </ul>
+
<a name="loadView(java.lang.String, java.util.Locale)"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
@@ -479,6 +549,26 @@ implements <a href='../../../grails/codegen/model/ModelBuilder.html'>ModelBuilde
</li>
</ul>
+ <a name="precompiledPagesInUse()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>protected boolean <strong>precompiledPagesInUse</strong>()</h4>
+ <p>Whether pages compiled by the build are used, which is whether the page locator uses them.</p>
+ </li>
+ </ul>
+
+ <a name="readsTemplatesFromProject()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>protected boolean <strong>readsTemplatesFromProject</strong>()</h4>
+ <p> Whether templates are read from the project's <CODE>src/main/templates</CODE>, so that an edit to
+ one shows without a rebuild. That is so during development, unless the application runs from
+ ahead-of-time artifacts: there the pages compiled at build time are used whatever the
+ surroundings suggest, and a page is found by the template it was compiled from, which is the
+ packaged one.</p>
+ </li>
+ </ul>
+
<a name="setEnableNamespaceViewDefaults(boolean)"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
@@ -495,6 +585,24 @@ implements <a href='../../../grails/codegen/model/ModelBuilder.html'>ModelBuilde
</li>
</ul>
+ <a name="tryGenerateScaffoldedView(java.lang.String, grails.core.GrailsControllerClass)"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a> <strong>tryGenerateScaffoldedView</strong>(java.lang.String viewName, <a href='../../../grails/core/GrailsControllerClass.html'>GrailsControllerClass</a> controllerClass)</h4>
+ <p> Attempts to generate a scaffolded view for the given controller from the template it uses for
+ a view it has none of: its namespace's, when it has a namespace and there is one, otherwise
+ the general one. <DL><DT><B>Parameters:</B></DT><DD><code>viewName</code> - The view name</DD><DD><code>controllerClass</code> - The controller class</DD></DL><DL><DT><B>Returns:</B></DT><DD>The generated scaffolded view, or null if not applicable</DD></DL></p>
+ </li>
+ </ul>
+
+ <a name="tryGenerateScaffoldedView(java.lang.String, grails.core.GrailsControllerClass, Closure)"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a> <strong>tryGenerateScaffoldedView</strong>(java.lang.String viewName, <a href='../../../grails/core/GrailsControllerClass.html'>GrailsControllerClass</a> controllerClass, <a href='https://docs.groovy-lang.org/5.1.3/html/gapi/groovy/lang/Closure.html' title='Closure'>Closure</a><java.util.List<java [...]
+ <p> Attempts to generate a scaffolded view for the given controller <DL><DT><B>Parameters:</B></DT><DD><code>viewName</code> - The view name</DD><DD><code>controllerClass</code> - The controller class</DD><DD><code>templatePaths</code> - Closure giving, for a short view name, the template paths to try in order</DD></DL><DL><DT><B>Returns:</B></DT><DD>The generated scaffolded view, or null if not applicable</DD></DL></p>
+ </li>
+ </ul>
+
</li>
</ul>
diff --git a/docs/snapshot/api/grails/util/BuildSettings.html b/docs/snapshot/api/grails/util/BuildSettings.html
index dfe6ab9e0d1..5f0faa080a0 100644
--- a/docs/snapshot/api/grails/util/BuildSettings.html
+++ b/docs/snapshot/api/grails/util/BuildSettings.html
@@ -259,49 +259,66 @@ extends java.lang.Object</pre>
</tr>
<tr class="altColor">
+ <td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#GENERATED_GSP_VIEW_DIRECTORIES">GENERATED_GSP_VIEW_DIRECTORIES</a></code></td>
+ <td class="colLast">A property name whose value lists, separated by the platform's path separator, directories of
+ pages the build generated, to be compiled in the same page compilation as the directory being
+ compiled: each page is named by its path under the directory holding it, as though it were in
+ the directory being compiled, where a page at the same path takes precedence. </td>
+ </tr>
+
+ <tr class="rowColor">
<td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
<td class="colLast"><code><a href="#GORM_DEFAULT_ID_TYPE">GORM_DEFAULT_ID_TYPE</a></code></td>
<td class="colLast">A property name that selects the type of the <CODE>id</CODE> GORM injects into an entity that
declares none of its own.</td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
<td class="colLast"><code><a href="#GORM_DEFAULT_ID_TYPE_LONG">GORM_DEFAULT_ID_TYPE_LONG</a></code></td>
<td class="colLast">The <a href='#GORM_DEFAULT_ID_TYPE'>GORM_DEFAULT_ID_TYPE</a> value that gives every entity a <CODE>Long</CODE> id.</td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
<td class="colLast"><code><a href="#GORM_DEFAULT_ID_TYPE_NATIVE">GORM_DEFAULT_ID_TYPE_NATIVE</a></code></td>
<td class="colLast">The <a href='#GORM_DEFAULT_ID_TYPE'>GORM_DEFAULT_ID_TYPE</a> value that defers to the GORM implementation an entity is
mapped with.</td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code><strong>static boolean</strong></code> </td>
<td class="colLast"><code><a href="#GRAILS_APP_DIR_PRESENT">GRAILS_APP_DIR_PRESENT</a></code></td>
<td class="colLast">Whether the application is running inside the development environment or deployed</td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code><strong>static java.util.regex.Pattern</strong></code> </td>
<td class="colLast"><code><a href="#JAR_PATTERN">JAR_PATTERN</a></code></td>
<td class="colLast"></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
<td class="colLast"><code><a href="#MAIN_CLASS_NAME">MAIN_CLASS_NAME</a></code></td>
<td class="colLast">Name of the System property that specifies the main class name</td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
<td class="colLast"><code><a href="#OFFLINE_MODE">OFFLINE_MODE</a></code></td>
<td class="colLast"></td>
</tr>
+ <tr class="altColor">
+ <td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#OPTIONAL_GSP_PAGES">OPTIONAL_GSP_PAGES</a></code></td>
+ <td class="colLast">A property name whose value lists, separated by the platform's path separator, files that
+ each name pages of a page compilation, one per line, as paths relative to the directory being
+ compiled. </td>
+ </tr>
+
<tr class="rowColor">
<td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
<td class="colLast"><code><a href="#PROFILE">PROFILE</a></code></td>
@@ -755,6 +772,18 @@ extends java.lang.Object</pre>
</li>
</ul>
+ <a name="GENERATED_GSP_VIEW_DIRECTORIES"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>public static final java.lang.String <strong>GENERATED_GSP_VIEW_DIRECTORIES</strong></h4>
+ <p> A property name whose value lists, separated by the platform's path separator, directories of
+ pages the build generated, to be compiled in the same page compilation as the directory being
+ compiled: each page is named by its path under the directory holding it, as though it were in
+ the directory being compiled, where a page at the same path takes precedence. A compiler that
+ does not know it compiles no generated page, which is then produced when it is first rendered.</p>
+ </li>
+ </ul>
+
<a name="GORM_DEFAULT_ID_TYPE"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
@@ -818,6 +847,20 @@ extends java.lang.Object</pre>
</li>
</ul>
+ <a name="OPTIONAL_GSP_PAGES"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>public static final java.lang.String <strong>OPTIONAL_GSP_PAGES</strong></h4>
+ <p> A property name whose value lists, separated by the platform's path separator, files that
+ each name pages of a page compilation, one per line, as paths relative to the directory being
+ compiled. Such a page is optional: if it does not compile it is left out, with a warning,
+ rather than failing the compilation. A page generated from a template a dependency supplies is
+ one - it is an optimisation, and without it the page is produced when it is first rendered, as
+ it would be had nothing been generated. A page the application wrote, or generated from a
+ template of its own, is not.</p>
+ </li>
+ </ul>
+
<a name="PROFILE"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
diff --git a/docs/snapshot/api/index-all.html b/docs/snapshot/api/index-all.html
index 2727d2716ce..93440c7e3a2 100644
--- a/docs/snapshot/api/index-all.html
+++ b/docs/snapshot/api/index-all.html
@@ -9812,6 +9812,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/web/servlet/view/GroovyPageView.html#createGroovyPageException(java.lang.Exception, org.grails.gsp.GroovyPagesTemplateEngine, java.lang.String)" title="Method in GroovyPageView">createGroovyPageException(java.lang.Exception, org.grails.gsp.GroovyPagesTemplateEngine, java.lang.String)</a></span> - Method in <a href="org/grails/web/servlet/view/GroovyPageView.html">GroovyPageView</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/web/servlet/view/GroovyPageViewResolver.html#createGroovyPageView(java.lang.String, org.springframework.scripting.ScriptSource)" title="Method in GroovyPageViewResolver">createGroovyPageView(java.lang.String, org.springframework.scripting.ScriptSource)</a></span> - Method in <a href="org/grails/web/servlet/view/GroovyPageViewResolver.html">GroovyPageViewResolver</a>
+</dt><dd> <div class="block">Creates the view that renders a located page.</div></dd>
<dt><span class="strong"><a href="org/grails/cli/profile/commands/factory/GroovyScriptCommandFactory.html#createGroovyScriptCommandClassLoader()" title="Method in GroovyScriptCommandFactory">createGroovyScriptCommandClassLoader()</a></span> - Method in <a href="org/grails/cli/profile/commands/factory/GroovyScriptCommandFactory.html">GroovyScriptCommandFactory</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/orm/hibernate/query/AbstractHibernateQuery.html#createHibernateCriterionAdapter()" title="Method in AbstractHibernateQuery">createHibernateCriterionAdapter()</a></span> - Method in <a href="org/grails/orm/hibernate/query/AbstractHibernateQuery.html">AbstractHibernateQuery</a>
@@ -13299,6 +13301,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block">The direction to sort by</div></dd>
<dt><span class="strong"><a href="org/grails/datastore/gorm/neo4j/connections/Neo4jConnectionSourceSettings.EmbeddedSettings.html#directory" title="Property in Neo4jConnectionSourceSettings.EmbeddedSettings">directory</a></span> - Property in <a href="org/grails/datastore/gorm/neo4j/connections/Neo4jConnectionSourceSettings.EmbeddedSettings.html">Neo4jConnectionSourceSettings.EmbeddedSettings</a>
</dt><dd> <div class="block">The directory to store embedded data</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPages.html#DIRECTORY" title="Field in ScaffoldedPages">DIRECTORY</a></span> - Field in <a href="org/apache/grails/scaffolding/ScaffoldedPages.html">ScaffoldedPages</a>
+</dt><dd> <div class="block">The directory under the views root that holds the compiled pages. </div></dd>
<dt><span class="strong"><a href="org/grails/plugins/support/WatchPattern.html#directory" title="Property in WatchPattern">directory</a></span> - Property in <a href="org/grails/plugins/support/WatchPattern.html">WatchPattern</a>
</dt><dd> <div class="block">The directories being watched, if any</div></dd>
<dt><span class="strong"><a href="org/grails/io/watch/DirectoryWatcher.html" title="Class in org.grails.io.watch">DirectoryWatcher</a></span> - Class in <a href="./org/grails/io/watch/package-summary.html">org.grails.io.watch</a>
@@ -13934,6 +13938,8 @@ if (location.href.indexOf('is-external=true') == -1) {
<dt><span class="strong"><a href="grails/plugin/scaffolding/annotation/Scaffold.html#domain" title="Field in Scaffold">domain</a></span> - Field in <a href="grails/plugin/scaffolding/annotation/Scaffold.html">Scaffold</a>
</dt><dd> <div class="block">Domain/entity class (alternative to value).
</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html#domain" title="Property in ScaffoldedPagesGenerator.Failure">domain</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html">ScaffoldedPagesGenerator.Failure</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/mapping/reflect/AstUtils.html#DOMAIN_TYPE" title="Field in AstUtils">DOMAIN_TYPE</a></span> - Field in <a href="org/grails/datastore/mapping/reflect/AstUtils.html">AstUtils</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/util/DomainBuilder.html" title="Class in grails.util">DomainBuilder</a></span> - Class in <a href="./grails/util/package-summary.html">grails.util</a>
@@ -16238,6 +16244,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/json/view/api/internal/DefaultJsonViewHelper.html#EXPAND" title="Property in DefaultJsonViewHelper">EXPAND</a></span> - Property in <a href="grails/plugin/json/view/api/internal/DefaultJsonViewHelper.html">DefaultJsonViewHelper</a>
</dt><dd> <div class="block">The expand parameter</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPages.html#expand(byte[], Map<String,?>)" title="Method in ScaffoldedPages">expand(byte[], Map<String,?>)</a></span> - Method in <a href="org/apache/grails/scaffolding/ScaffoldedPages.html">ScaffoldedPages</a>
+</dt><dd> <div class="block">Expands a template with a model, as both the build and the resolver do. </div></dd>
<dt><span class="strong"><a href="org/grails/web/json/parser/SimpleCharStream.html#ExpandBuff(boolean)" title="Method in SimpleCharStream">ExpandBuff(boolean)</a></span> - Method in <a href="org/grails/web/json/parser/SimpleCharStream.html">SimpleCharStream</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/apache/grails/testing/http/client/utils/XmlUtils.Format.html#expandEmptyElements" title="Property in XmlUtils.Format">expandEmptyElements</a></span> - Property in <a href="org/apache/grails/testing/http/client/utils/XmlUtils.Format.html">XmlUtils.Format</a>
@@ -16515,6 +16523,10 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/mapping/core/connections/ConnectionSourceSettings.html#failOnErrorPackages" title="Property in ConnectionSourceSettings">failOnErrorPackages</a></span> - Property in <a href="org/grails/datastore/mapping/core/connections/ConnectionSourceSettings.html">ConnectionSourceSettings</a>
</dt><dd> <div class="block">Package names that should fail on error</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html#Failure(java.io.File, java.lang.String, java.lang.String, java.lang.String, java.lang.String)" title="Constructor in ScaffoldedPagesGenerator.Failure">Failure(java.io.File, java.lang.String, java.lang.String, java.lang.String, java.lang.String)</a></span> - Constructor in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html">ScaffoldedPagesGenerator.Failure</a>
+</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html#failures" title="Property in ScaffoldedPagesGenerator.Result">failures</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html">ScaffoldedPagesGenerator.Result</a>
+</dt><dd> <div class="block">Each template that could not be expanded for a domain class.</div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/oauth2/util/OAuth2ProviderConfiguration.html#failureUrl" title="Property in OAuth2ProviderConfiguration">failureUrl</a></span> - Property in <a href="grails/plugin/springsecurity/oauth2/util/OAuth2ProviderConfiguration.html">OAuth2ProviderConfiguration</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/mapping/config/ConfigurationBuilder.html#fallBackConfiguration" title="Property in ConfigurationBuilder">fallBackConfiguration</a></span> - Property in <a href="org/grails/datastore/mapping/config/ConfigurationBuilder.html">ConfigurationBuilder</a>
@@ -18348,6 +18360,9 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/orm/hibernate/query/PredicateGenerator.html#generate(AbstractQuery<?>, From<?,?>, List<Query.Criterion>, org.grails.orm.hibernate.query.JpaQueryContext, org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity)" title="Method in PredicateGenerator">generate(AbstractQuery<?>, From<?,?>, List<Query.Criterion>, org.grails.orm.hibernate.query.JpaQueryContext, org.grails.orm.hibernate.cfg.domainbinding. [...]
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html#generate(Map<String, List<File>>, java.io.File, java.lang.String, Map<File, String>)" title="Method in ScaffoldedPagesGenerator">generate(Map<String, List<File>>, java.io.File, java.lang.String, Map<File, String>)</a></span> - Method in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html">ScaffoldedPagesGenerator</a>
+</dt><dd> <div class="block">Writes, under <CODE>outputDir</CODE> where the resolver looks for it, the page for each domain
+ class and each template in the directories planned for it. </div></dd>
<dt><span class="strong"><a href="org/grails/gorm/graphql/Schema.html#generate()" title="Method in Schema">generate()</a></span> - Method in <a href="org/grails/gorm/graphql/Schema.html">Schema</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/taglib/index/TagLibraryIndexGenerator.html#generate(List<File>, List<File>, java.io.File, boolean, java.lang.String)" title="Method in TagLibraryIndexGenerator">generate(List<File>, List<File>, java.io.File, boolean, java.lang.String)</a></span> - Method in <a href="org/grails/taglib/index/TagLibraryIndexGenerator.html">TagLibraryIndexGenerator</a>
@@ -18370,6 +18385,11 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/rest/token/generation/jwt/AbstractJwtTokenGenerator.html#generateClaims(org.springframework.security.core.userdetails.UserDetails, java.lang.String, java.lang.Integer)" title="Method in AbstractJwtTokenGenerator">generateClaims(org.springframework.security.core.userdetails.UserDetails, java.lang.String, java.lang.Integer)</a></span> - Method in <a href="grails/plugin/springsecurity/rest/token/generation/jwt/AbstractJwtTokenGe [...]
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/util/BuildSettings.html#GENERATED_GSP_VIEW_DIRECTORIES" title="Field in BuildSettings">GENERATED_GSP_VIEW_DIRECTORIES</a></span> - Field in <a href="grails/util/BuildSettings.html">BuildSettings</a>
+</dt><dd> <div class="block">A property name whose value lists, separated by the platform's path separator, directories of
+ pages the build generated, to be compiled in the same page compilation as the directory being
+ compiled: each page is named by its path under the directory holding it, as though it were in
+ the directory being compiled, where a page at the same path takes precedence. </div></dd>
<dt><span class="strong"><a href="org/grails/datastore/mapping/model/ValueGenerator.html#GENERATED" title="Enum Constant in ValueGenerator">GENERATED</a></span> - Enum Constant in <a href="org/grails/datastore/mapping/model/ValueGenerator.html">ValueGenerator</a>
</dt><dd> <div class="block">Generated by the datastore implementation</div></dd>
<dt><span class="strong"><a href="org/grails/gsp/compiler/GroovyPageCompiler.html#generatedGroovyPagesDirectory" title="Property in GroovyPageCompiler">generatedGroovyPagesDirectory</a></span> - Property in <a href="org/grails/gsp/compiler/GroovyPageCompiler.html">GroovyPageCompiler</a>
@@ -18378,6 +18398,16 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html#generatedViewCache" title="Field in ScaffoldingViewResolver">generatedViewCache</a></span> - Field in <a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html">ScaffoldingViewResolver</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/web/pages/GroovyPageForkedCompiler.html#generatedViewDirectories()" title="Method in GroovyPageForkedCompiler">generatedViewDirectories()</a></span> - Method in <a href="org/grails/web/pages/GroovyPageForkedCompiler.html">GroovyPageForkedCompiler</a>
+</dt><dd> <div class="block">The directories of generated pages the build asks to be compiled with the source, those that exist.</div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html#generatedViews" title="Property in GroovyPageForkCompileTask">generatedViews</a></span> - Property in <a href="org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html">GroovyPageForkCompileTask</a>
+</dt><dd> <div class="block">Directories of pages the build generated, compiled in the same compilation as the source, each
+ page named by its path under the directory holding it, as though it were in the source, where a
+ page at the same path takes precedence. </div></dd>
+<dt><span class="strong"><a href="org/grails/gsp/compiler/GroovyPageCompiler.html#generatedViewsDirs" title="Property in GroovyPageCompiler">generatedViewsDirs</a></span> - Property in <a href="org/grails/gsp/compiler/GroovyPageCompiler.html">GroovyPageCompiler</a>
+</dt><dd> <div class="block">Directories of pages the build generated, compiled with those under <a href='#viewsDir'>viewsDir</a> in the
+ same compilation: a page among <a href='#srcFiles'>srcFiles</a> under one of them is compiled, registered and
+ named by its path under that directory, as though it were under <CODE>viewsDir</CODE>. </div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/ui/SecurityUiTagLib.html#generateFormLink(java.lang.String)" title="Method in SecurityUiTagLib">generateFormLink(java.lang.String)</a></span> - Method in <a href="grails/plugin/springsecurity/ui/SecurityUiTagLib.html">SecurityUiTagLib</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gsp/compiler/GroovyPageParser.html#generateGsp(java.io.Writer, boolean)" title="Method in GroovyPageParser">generateGsp(java.io.Writer, boolean)</a></span> - Method in <a href="org/grails/gsp/compiler/GroovyPageParser.html">GroovyPageParser</a>
@@ -18432,7 +18462,8 @@ if (location.href.indexOf('is-external=true') == -1) {
<dt><span class="strong"><a href="org/grails/plugins/databasemigration/liquibase/GroovyChange.html#generateRollbackStatements(liquibase.database.Database)" title="Method in GroovyChange">generateRollbackStatements(liquibase.database.Database)</a></span> - Method in <a href="org/grails/plugins/databasemigration/liquibase/GroovyChange.html">GroovyChange</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html" title="Class in org.grails.gradle.plugin.scaffolding">GenerateScaffoldedViewsTask</a></span> - Class in <a href="./org/grails/gradle/plugin/scaffolding/package-summary.html">org.grails.gradle.plugin.scaffolding</a>
-</dt><dd><div class="block">Writes the views a scaffolded controller would otherwise generate on its first request.</div></dd>
+</dt><dd><div class="block">Expands the scaffolding templates at build time, so the pages a scaffolded controller renders are
+ compiled with the rest of the application instead of on the request that first asks for them.</div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#GenerateScaffoldedViewsTask()" title="Constructor in GenerateScaffoldedViewsTask">GenerateScaffoldedViewsTask()</a></span> - Constructor in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/gorm/services/transform/ServiceTransformation.html#generateServiceDescriptor(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.ClassNode)" title="Method in ServiceTransformation">generateServiceDescriptor(org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.ClassNode)</a></span> - Method in <a href="org/grails/datastore/gorm/services/transform/ServiceTransformation.html">ServiceTransformation</a>
@@ -18447,6 +18478,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GenerateTagLibraryIndexTask.html#GENERATOR_CLASS" title="Property in GenerateTagLibraryIndexTask">GENERATOR_CLASS</a></span> - Property in <a href="org/grails/gradle/plugin/views/gsp/GenerateTagLibraryIndexTask.html">GenerateTagLibraryIndexTask</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#GENERATOR" title="Property in GenerateScaffoldedViewsTask">GENERATOR</a></span> - Property in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block">The class that expands and names the pages, from the application's scaffolding library.</div></dd>
<dt><span class="strong"><a href="org/grails/orm/hibernate/cfg/HibernateSimpleIdentity.html#generator" title="Property in HibernateSimpleIdentity">generator</a></span> - Property in <a href="org/grails/orm/hibernate/cfg/HibernateSimpleIdentity.html">HibernateSimpleIdentity</a>
</dt><dd> <div class="block">The generator to use</div></dd>
<dt><span class="strong"><a href="org/grails/orm/hibernate/cfg/Identity.html#generator" title="Property in Identity">generator</a></span> - Property in <a href="org/grails/orm/hibernate/cfg/Identity.html">Identity</a>
@@ -18461,6 +18494,10 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/mapping/config/Property.html#generator" title="Property in Property">generator</a></span> - Property in <a href="org/grails/datastore/mapping/config/Property.html">Property</a>
</dt><dd> <div class="block">Set the id generator name or class.</div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#GENERATOR_PROTOCOL" title="Field in GenerateScaffoldedViewsTask">GENERATOR_PROTOCOL</a></span> - Field in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block">The version of the exchange with the generator this task speaks - the command line, and the
+ files handed over and back - as the generator declares its own in a <CODE>PROTOCOL</CODE>
+ constant. </div></dd>
<dt><span class="strong"><a href="org/grails/orm/hibernate/cfg/domainbinding/util/GeneratorCreationContextWrapper.html" title="Class in org.grails.orm.hibernate.cfg.domainbinding.util">GeneratorCreationContextWrapper</a></span> - Class in <a href="./org/grails/orm/hibernate/cfg/domainbinding/util/package-summary.html">org.grails.orm.hibernate.cfg.domainbinding.util</a>
</dt><dd><div class="block">A wrapper for org.hibernate.generator.GeneratorCreationContext that allows overriding the org.hibernate.mapping.Value.</div></dd>
<dt><span class="strong"><a href="org/grails/orm/hibernate/cfg/domainbinding/util/GeneratorCreationContextWrapper.html#GeneratorCreationContextWrapper(org.hibernate.generator.GeneratorCreationContext, org.hibernate.mapping.Value)" title="Constructor in GeneratorCreationContextWrapper">GeneratorCreationContextWrapper(org.hibernate.generator.GeneratorCreationContext, org.hibernate.mapping.Value)</a></span> - Constructor in <a href="org/grails/orm/hibernate/cfg/domainbinding/util/GeneratorC [...]
@@ -19043,8 +19080,6 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"><DL><DT><B>deprecated:</B></DT><DD>Use <a href='../../../../org/grails/web/servlet/mvc/GrailsWebRequest.html#getContextPath()' title='instead'>instead</a></DD></DL> </div></dd>
<dt><span class="strong"><a href="grails/util/Metadata.html#getApplicationVersion()" title="Method in Metadata">getApplicationVersion()</a></span> - Method in <a href="grails/util/Metadata.html">Metadata</a>
</dt><dd> <div class="block"></div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getApplicationViews()" title="Method in GenerateScaffoldedViewsTask">getApplicationViews()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
-</dt><dd> <div class="block">The application's own views; anything declared here is left alone.</div></dd>
<dt><span class="strong"><a href="grails/validation/ConstrainedDelegate.html#getAppliedConstraint(java.lang.String)" title="Method in ConstrainedDelegate">getAppliedConstraint(java.lang.String)</a></span> - Method in <a href="grails/validation/ConstrainedDelegate.html">ConstrainedDelegate</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/gorm/validation/ConstrainedProperty.html#getAppliedConstraint(java.lang.String)" title="Method in ConstrainedProperty">getAppliedConstraint(java.lang.String)</a></span> - Method in <a href="grails/gorm/validation/ConstrainedProperty.html">ConstrainedProperty</a>
@@ -20460,9 +20495,6 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/web/api/WebAttributes.html#getControllerClass()" title="Method in WebAttributes">getControllerClass()</a></span> - Method in <a href="grails/web/api/WebAttributes.html">WebAttributes</a>
</dt><dd> <div class="block">Obtains the currently executing controller class</div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getControllerClasspath()" title="Method in GenerateScaffoldedViewsTask">getControllerClasspath()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
-</dt><dd> <div class="block">The classpath a controller's superclasses are read from, to find a namespace it inherits.
- </div></dd>
<dt><span class="strong"><a href="grails/util/GrailsWebUtil.html#getControllerFromRequest(jakarta.servlet.http.HttpServletRequest)" title="Method in GrailsWebUtil">getControllerFromRequest(jakarta.servlet.http.HttpServletRequest)</a></span> - Method in <a href="grails/util/GrailsWebUtil.html">GrailsWebUtil</a>
</dt><dd> <div class="block">Obtains the currently executing controller from the given request if any.</div></dd>
<dt><span class="strong"><a href="org/grails/web/mapping/AbstractUrlMapping.html#getControllerName()" title="Method in AbstractUrlMapping">getControllerName()</a></span> - Method in <a href="org/grails/web/mapping/AbstractUrlMapping.html">AbstractUrlMapping</a>
@@ -20504,8 +20536,6 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/web/api/WebAttributes.html#getControllerNamespace()" title="Method in WebAttributes">getControllerNamespace()</a></span> - Method in <a href="grails/web/api/WebAttributes.html">WebAttributes</a>
</dt><dd> <div class="block">Obtains the currently executing controller namespace</div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html#getControllers()" title="Method in GroovyPagePlugin.ScaffoldedControllers.Parameters">getControllers()</a></span> - Method in <a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html">GroovyPagePlugin.ScaffoldedControllers.Parameters</a>
-</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/testing/web/UrlMappingsUnitTest.html#getControllersToMock()" title="Method in UrlMappingsUnitTest">getControllersToMock()</a></span> - Method in <a href="grails/testing/web/UrlMappingsUnitTest.html">UrlMappingsUnitTest</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/artefact/Controller.html#getControllerUri()" title="Method in Controller">getControllerUri()</a></span> - Method in <a href="grails/artefact/Controller.html">Controller</a>
@@ -21776,6 +21806,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block">Return the dependency exclusions.</div></dd>
<dt><span class="strong"><a href="org/apache/grails/gradle/plugin/aot/ExtractApplicationTask.html#getExecOperations()" title="Method in ExtractApplicationTask">getExecOperations()</a></span> - Method in <a href="org/apache/grails/gradle/plugin/aot/ExtractApplicationTask.html">ExtractApplicationTask</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getExecOperations()" title="Method in GenerateScaffoldedViewsTask">getExecOperations()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/cli/profile/AbstractProfile.html#getExecutablePatterns()" title="Method in AbstractProfile">getExecutablePatterns()</a></span> - Method in <a href="org/grails/cli/profile/AbstractProfile.html">AbstractProfile</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/cli/profile/Profile.html#getExecutablePatterns()" title="Method in Profile">getExecutablePatterns()</a></span> - Method in <a href="org/grails/cli/profile/Profile.html">Profile</a>
@@ -21999,6 +22031,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block">{<DL><DT><B>inheritDoc:</B></DT><DD>}</DD></DL> </div></dd>
<dt><span class="strong"><a href="org/grails/web/servlet/HttpServletRequestExtension.html#getFiles(jakarta.servlet.http.HttpServletRequest, java.lang.String)" title="Method in HttpServletRequestExtension">getFiles(jakarta.servlet.http.HttpServletRequest, java.lang.String)</a></span> - Method in <a href="org/grails/web/servlet/HttpServletRequestExtension.html">HttpServletRequestExtension</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getFileSeparator()" title="Method in GenerateScaffoldedViewsTask">getFileSeparator()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block">The separator the pages were expanded under. </div></dd>
<dt><span class="strong"><a href="org/grails/plugins/AbstractGrailsPlugin.html#getFileSystemName()" title="Method in AbstractGrailsPlugin">getFileSystemName()</a></span> - Method in <a href="org/grails/plugins/AbstractGrailsPlugin.html">AbstractGrailsPlugin</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugins/GrailsPlugin.html#getFileSystemName()" title="Method in GrailsPlugin">getFileSystemName()</a></span> - Method in <a href="grails/plugins/GrailsPlugin.html">GrailsPlugin</a>
@@ -22897,6 +22931,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/apache/grails/gradle/plugin/aot/ExtractApplicationTask.html#getJavaLauncher()" title="Method in ExtractApplicationTask">getJavaLauncher()</a></span> - Method in <a href="org/apache/grails/gradle/plugin/aot/ExtractApplicationTask.html">ExtractApplicationTask</a>
</dt><dd> <div class="block">The Java runtime to unpack with. </div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getJavaLauncher()" title="Method in GenerateScaffoldedViewsTask">getJavaLauncher()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block">The Java the pages are expanded with; the build's own when not set.</div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GenerateTagLibraryIndexTask.html#getJavaLauncher()" title="Method in GenerateTagLibraryIndexTask">getJavaLauncher()</a></span> - Method in <a href="org/grails/gradle/plugin/views/gsp/GenerateTagLibraryIndexTask.html">GenerateTagLibraryIndexTask</a>
</dt><dd> <div class="block">The Java the index is generated with. </div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html#getJavaLauncher()" title="Method in GroovyPageForkCompileTask">getJavaLauncher()</a></span> - Method in <a href="org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html">GroovyPageForkCompileTask</a>
@@ -24318,6 +24354,10 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/web/binding/StructuredPropertyEditor.html#getOptionalFields()" title="Method in StructuredPropertyEditor">getOptionalFields()</a></span> - Method in <a href="org/grails/web/binding/StructuredPropertyEditor.html">StructuredPropertyEditor</a>
</dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>The optional fields</DD></DL></div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getOptionalPages()" title="Method in GenerateScaffoldedViewsTask">getOptionalPages()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block">Lists, a line apiece, the pages expanded from templates a dependency supplies, as paths under
+ <a href='#getOutputDirectory()'>getOutputDirectory()</a>, for the page compilation to leave out any that do not compile.
+ </div></dd>
<dt><span class="strong"><a href="org/grails/testing/GrailsUnitTest.html#getOptionalServletContext()" title="Method in GrailsUnitTest">getOptionalServletContext()</a></span> - Method in <a href="org/grails/testing/GrailsUnitTest.html">GrailsUnitTest</a>
</dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>the servlet context</DD></DL></div></dd>
<dt><span class="strong"><a href="org/grails/scaffolding/registry/input/CurrencyInputRenderer.html#getOptionKey(java.util.Currency)" title="Method in CurrencyInputRenderer">getOptionKey(java.util.Currency)</a></span> - Method in <a href="org/grails/scaffolding/registry/input/CurrencyInputRenderer.html">CurrencyInputRenderer</a>
@@ -24574,7 +24614,7 @@ if (location.href.indexOf('is-external=true') == -1) {
<dt><span class="strong"><a href="org/apache/grails/gradle/plugin/aot/GenerateNativeMetadataTask.html#getOutputDirectory()" title="Method in GenerateNativeMetadataTask">getOutputDirectory()</a></span> - Method in <a href="org/apache/grails/gradle/plugin/aot/GenerateNativeMetadataTask.html">GenerateNativeMetadataTask</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getOutputDirectory()" title="Method in GenerateScaffoldedViewsTask">getOutputDirectory()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
-</dt><dd> <div class="block">Where the generated views are written.</div></dd>
+</dt><dd> <div class="block">Where the pages are written, as a tree to be compiled with the application's views.</div></dd>
<dt><span class="strong"><a href="org/apache/grails/gradle/plugin/aot/NativeMetadataExtension.html#getOutputDirectory()" title="Method in NativeMetadataExtension">getOutputDirectory()</a></span> - Method in <a href="org/apache/grails/gradle/plugin/aot/NativeMetadataExtension.html">NativeMetadataExtension</a>
</dt><dd> <div class="block">Where what was recorded is merged, in the application's sources so it can be reviewed.</div></dd>
<dt><span class="strong"><a href="org/apache/grails/gradle/plugin/aot/TraceNativeMetadataTask.html#getOutputDirectory()" title="Method in TraceNativeMetadataTask">getOutputDirectory()</a></span> - Method in <a href="org/apache/grails/gradle/plugin/aot/TraceNativeMetadataTask.html">TraceNativeMetadataTask</a>
@@ -24626,6 +24666,10 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/mapping/model/MappingConfigurationStrategy.html#getOwningEntities(java.lang.Class, org.grails.datastore.mapping.model.MappingContext)" title="Method in MappingConfigurationStrategy">getOwningEntities(java.lang.Class, org.grails.datastore.mapping.model.MappingContext)</a></span> - Method in <a href="org/grails/datastore/mapping/model/MappingConfigurationStrategy.html">MappingConfigurationStrategy</a>
</dt><dd> <div class="block">Returns a set of entities that "own" the given entity. </div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getPackagedTemplates()" title="Method in GenerateScaffoldedViewsTask">getPackagedTemplates()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block">The application's templates as it packages them, each at
+ <CODE>META-INF/templates/scaffolding/<template path></CODE> in its tree: normally the output of
+ <CODE>processResources</CODE>, filtered to them. </div></dd>
<dt><span class="strong"><a href="grails/views/ViewConfiguration.html#getPackageImports()" title="Method in ViewConfiguration">getPackageImports()</a></span> - Method in <a href="grails/views/ViewConfiguration.html">ViewConfiguration</a>
</dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>The packages to automatically import</DD></DL></div></dd>
<dt><span class="strong"><a href="org/grails/core/AbstractGrailsClass.html#getPackageName()" title="Method in AbstractGrailsClass">getPackageName()</a></span> - Method in <a href="org/grails/core/AbstractGrailsClass.html">AbstractGrailsClass</a>
@@ -24678,6 +24722,9 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block">The classpath whose artifacts may carry their own pages. </div></dd>
<dt><span class="strong"><a href="org/grails/gsp/jsp/GroovyPagesJspFactory.html#getPageContext(jakarta.servlet.Servlet, jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, java.lang.String, boolean, int, boolean)" title="Method in GroovyPagesJspFactory">getPageContext(jakarta.servlet.Servlet, jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, java.lang.String, boolean, int, boolean)</a></span> - Method in <a href="org/grails/gsp/jsp/GroovyPagesJspFactory.html"> [...]
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getPageEncoding()" title="Method in GenerateScaffoldedViewsTask">getPageEncoding()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block">The encoding the pages are written in, which must be the one they are compiled with, so that
+ a page reads back as it was expanded. </div></dd>
<dt><span class="strong"><a href="grails/plugin/geb/support/delegate/PageDelegate.html#getPageFragment()" title="Method in PageDelegate">getPageFragment()</a></span> - Method in <a href="grails/plugin/geb/support/delegate/PageDelegate.html">PageDelegate</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gsp/compiler/GroovyPageParser.html#getPageName()" title="Method in GroovyPageParser">getPageName()</a></span> - Method in <a href="org/grails/gsp/compiler/GroovyPageParser.html">GroovyPageParser</a>
@@ -26214,6 +26261,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugins/quartz/JobManagerService.html#getRunningJobs()" title="Method in JobManagerService">getRunningJobs()</a></span> - Method in <a href="grails/plugins/quartz/JobManagerService.html">JobManagerService</a>
</dt><dd> <div class="block">Returns a list of all currently executing jobs.</div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getRuntimeClasspath()" title="Method in GenerateScaffoldedViewsTask">getRuntimeClasspath()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
+</dt><dd> <div class="block">The application's runtime classpath. </div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/SpringSecurityUtils.html#getSavedRequest(jakarta.servlet.http.HttpSession)" title="Method in SpringSecurityUtils">getSavedRequest(jakarta.servlet.http.HttpSession)</a></span> - Method in <a href="grails/plugin/springsecurity/SpringSecurityUtils.html">SpringSecurityUtils</a>
</dt><dd> <div class="block">Get the saved request from the session.</div></dd>
<dt><span class="strong"><a href="org/grails/scaffolding/model/property/Constrained.html#getScale()" title="Method in Constrained">getScale()</a></span> - Method in <a href="org/grails/scaffolding/model/property/Constrained.html">Constrained</a>
@@ -26904,8 +26953,6 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block">Obtain a template by path</div></dd>
<dt><span class="strong"><a href="org/apache/grails/web/layout/SpringMVCViewDecorator.html#getTemplate()" title="Method in SpringMVCViewDecorator">getTemplate()</a></span> - Method in <a href="org/apache/grails/web/layout/SpringMVCViewDecorator.html">SpringMVCViewDecorator</a>
</dt><dd> <div class="block"></div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getTemplateClasspath()" title="Method in GenerateScaffoldedViewsTask">getTemplateClasspath()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
-</dt><dd> <div class="block">The classpath the scaffolding templates are read from. </div></dd>
<dt><span class="strong"><a href="grails/views/api/GrailsView.html#getTemplateEngine()" title="Method in GrailsView">getTemplateEngine()</a></span> - Method in <a href="grails/views/api/GrailsView.html">GrailsView</a>
</dt><dd> <div class="block">The template engine</div></dd>
<dt><span class="strong"><a href="grails/views/json/test/JsonViewUnitTest.html#getTemplateEngine()" title="Method in JsonViewUnitTest">getTemplateEngine()</a></span> - Method in <a href="grails/views/json/test/JsonViewUnitTest.html">JsonViewUnitTest</a>
@@ -26913,7 +26960,8 @@ if (location.href.indexOf('is-external=true') == -1) {
<dt><span class="strong"><a href="grails/plugin/formfields/FormFieldsTemplateService.html#getTemplateFor(java.lang.String)" title="Method in FormFieldsTemplateService">getTemplateFor(java.lang.String)</a></span> - Method in <a href="grails/plugin/formfields/FormFieldsTemplateService.html">FormFieldsTemplateService</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getTemplateOverrides()" title="Method in GenerateScaffoldedViewsTask">getTemplateOverrides()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
-</dt><dd> <div class="block">Application template overrides, normally <CODE>src/main/templates/scaffolding</CODE>.</div></dd>
+</dt><dd> <div class="block">The application's own templates, as trees rooted at the template directory: normally
+ <CODE>src/main/templates/scaffolding</CODE>. </div></dd>
<dt><span class="strong"><a href="grails/views/ViewConfiguration.html#getTemplatePath()" title="Method in ViewConfiguration">getTemplatePath()</a></span> - Method in <a href="grails/views/ViewConfiguration.html">ViewConfiguration</a>
</dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>Path to the templates</DD></DL></div></dd>
<dt><span class="strong"><a href="grails/artefact/Controller.html#getTemplateUri(java.lang.String)" title="Method in Controller">getTemplateUri(java.lang.String)</a></span> - Method in <a href="grails/artefact/Controller.html">Controller</a>
@@ -27605,8 +27653,6 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>The current view</DD></DL></div></dd>
<dt><span class="strong"><a href="org/apache/grails/web/layout/SpringMVCViewDecorator.html#getView()" title="Method in SpringMVCViewDecorator">getView()</a></span> - Method in <a href="org/apache/grails/web/layout/SpringMVCViewDecorator.html">SpringMVCViewDecorator</a>
</dt><dd> <div class="block"></div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html#getViewClasspath()" title="Method in GenerateScaffoldedViewsTask">getViewClasspath()</a></span> - Method in <a href="org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html">GenerateScaffoldedViewsTask</a>
-</dt><dd> <div class="block">Dependency views, including plugins used only at runtime.</div></dd>
<dt><span class="strong"><a href="grails/plugin/json/view/JsonViewConfiguration.html#getViewModuleName()" title="Method in JsonViewConfiguration">getViewModuleName()</a></span> - Method in <a href="grails/plugin/json/view/JsonViewConfiguration.html">JsonViewConfiguration</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/markup/view/MarkupViewConfiguration.html#getViewModuleName()" title="Method in MarkupViewConfiguration">getViewModuleName()</a></span> - Method in <a href="grails/plugin/markup/view/MarkupViewConfiguration.html">MarkupViewConfiguration</a>
@@ -27726,6 +27772,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/buffer/StreamCharBuffer.StreamCharBufferWriter.html#getWriterForEncoder(org.grails.encoder.Encoder, org.grails.encoder.EncodingStateRegistry)" title="Method in StreamCharBuffer.StreamCharBufferWriter">getWriterForEncoder(org.grails.encoder.Encoder, org.grails.encoder.EncodingStateRegistry)</a></span> - Method in <a href="org/grails/buffer/StreamCharBuffer.StreamCharBufferWriter.html">StreamCharBuffer.StreamCharBufferWriter</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html#getWritten()" title="Method in ScaffoldedPagesGenerator.Result">getWritten()</a></span> - Method in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html">ScaffoldedPagesGenerator.Result</a>
+</dt><dd> <div class="block">How many pages were written.</div></dd>
<dt><span class="strong"><a href="grails/config/external/WriteFilteringMap.html#getWrittenValues()" title="Method in WriteFilteringMap">getWrittenValues()</a></span> - Method in <a href="grails/config/external/WriteFilteringMap.html">WriteFilteringMap</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/gorm/jdbc/DatabaseDriver.html#getXaDataSourceClassName()" title="Method in DatabaseDriver">getXaDataSourceClassName()</a></span> - Method in <a href="org/grails/datastore/gorm/jdbc/DatabaseDriver.html">DatabaseDriver</a>
@@ -29763,12 +29811,6 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html" title="Class in org.grails.gradle.plugin.views.gsp">GroovyPagePlugin</a></span> - Class in <a href="./org/grails/gradle/plugin/views/gsp/package-summary.html">org.grails.gradle.plugin.views.gsp</a>
</dt><dd><div class="block">A plugin that adds support for compiling Groovy Server Pages (GSP)</div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html" title="Class in org.grails.gradle.plugin.views.gsp.GroovyPagePlugin">GroovyPagePlugin.ScaffoldedControllers</a></span> - Class in <a href="./org/grails/gradle/plugin/views/gsp/package-summary.html">org.grails.gradle.plugin.views.gsp</a>
-</dt><dd><div class="block">Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html" title="Interface in org.grails.gradle.plugin.views.gsp.GroovyPagePlugin.ScaffoldedControllers">GroovyPagePlugin.ScaffoldedControllers.Parameters</a></span> - Interface in <a href="./org/grails/gradle/plugin/views/gsp/package-summary.html">org.grails.gradle.plugin.views.gsp</a>
-</dt><dd><div class="block"></div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html#GroovyPagePlugin.ScaffoldedControllers()" title="Constructor in GroovyPagePlugin.ScaffoldedControllers">GroovyPagePlugin.ScaffoldedControllers()</a></span> - Constructor in <a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html">GroovyPagePlugin.ScaffoldedControllers</a>
-</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html#GroovyPagePlugin()" title="Constructor in GroovyPagePlugin">GroovyPagePlugin()</a></span> - Constructor in <a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html">GroovyPagePlugin</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/ui/RegisterController.html#groovyPageRenderer" title="Property in RegisterController">groovyPageRenderer</a></span> - Property in <a href="grails/plugin/springsecurity/ui/RegisterController.html">RegisterController</a>
@@ -32831,6 +32873,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd><div class="block">Default implementation of the <a href='../../../../../../org/grails/datastore/mapping/core/connections/ConnectionSources.html' title='ConnectionSources'>ConnectionSources</a> interface. </div></dd>
<dt><span class="strong"><a href="org/grails/datastore/mapping/core/connections/InMemoryConnectionSources.html#InMemoryConnectionSources(ConnectionSource<T, S>, ConnectionSourceFactory<T, S>, org.springframework.core.env.PropertyResolver)" title="Constructor in InMemoryConnectionSources">InMemoryConnectionSources(ConnectionSource<T, S>, ConnectionSourceFactory<T, S>, org.springframework.core.env.PropertyResolver)</a></span> - Constructor in <a href="org/grails/datastore/mappi [...]
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html#inNativeImage()" title="Method in ScaffoldingViewResolver">inNativeImage()</a></span> - Method in <a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html">ScaffoldingViewResolver</a>
+</dt><dd> <div class="block">Whether this runs in a native image, which cannot expand a template into a page at runtime.</div></dd>
<dt><span class="strong"><a href="grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html#innerAttributes" title="Property in FormFieldsTagLib.BeanAndPrefix">innerAttributes</a></span> - Property in <a href="grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html">FormFieldsTagLib.BeanAndPrefix</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/markup/view/MarkupViewTemplateEngine.html#innerEngine" title="Property in MarkupViewTemplateEngine">innerEngine</a></span> - Property in <a href="grails/plugin/markup/view/MarkupViewTemplateEngine.html">MarkupViewTemplateEngine</a>
@@ -34154,6 +34198,8 @@ if (location.href.indexOf('is-external=true') == -1) {
<dt><span class="strong"><a href="org/grails/plugins/web/GroovyPagesGrailsPlugin.html#isDevelopmentMode()" title="Method in GroovyPagesGrailsPlugin">isDevelopmentMode()</a></span> - Method in <a href="org/grails/plugins/web/GroovyPagesGrailsPlugin.html">GroovyPagesGrailsPlugin</a>
</dt><dd> <div class="block">Whether the application is being developed, which decides where its pages are read from and
whether they are watched for change.</div></dd>
+<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html#isDevelopmentMode()" title="Method in ScaffoldingViewResolver">isDevelopmentMode()</a></span> - Method in <a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html">ScaffoldingViewResolver</a>
+</dt><dd> <div class="block">Whether the application is being developed. </div></dd>
<dt><span class="strong"><a href="grails/views/ViewsEnvironment.html#isDevelopmentMode()" title="Method in ViewsEnvironment">isDevelopmentMode()</a></span> - Method in <a href="grails/views/ViewsEnvironment.html">ViewsEnvironment</a>
</dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>Whether development mode is enabled</DD></DL></div></dd>
<dt><span class="strong"><a href="grails/boot/GrailsApp.html#isDevelopmentModeActive()" title="Method in GrailsApp">isDevelopmentModeActive()</a></span> - Method in <a href="grails/boot/GrailsApp.html">GrailsApp</a>
@@ -35132,6 +35178,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/web/servlet/HttpServletRequestExtension.html#isPost(jakarta.servlet.http.HttpServletRequest)" title="Method in HttpServletRequestExtension">isPost(jakarta.servlet.http.HttpServletRequest)</a></span> - Method in <a href="org/grails/web/servlet/HttpServletRequestExtension.html">HttpServletRequestExtension</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/gsp/io/DefaultGroovyPageLocator.html#isPrecompiledAvailable()" title="Method in DefaultGroovyPageLocator">isPrecompiledAvailable()</a></span> - Method in <a href="org/grails/gsp/io/DefaultGroovyPageLocator.html">DefaultGroovyPageLocator</a>
+</dt><dd> <div class="block">Whether the pages compiled at build time should be used.</div></dd>
<dt><span class="strong"><a href="org/grails/gsp/GroovyPageMetaInfo.html#isPrecompiledMode()" title="Method in GroovyPageMetaInfo">isPrecompiledMode()</a></span> - Method in <a href="org/grails/gsp/GroovyPageMetaInfo.html">GroovyPageMetaInfo</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/buffer/StreamCharBuffer.html#isPreferSubChunkWhenWritingToOtherBuffer()" title="Method in StreamCharBuffer">isPreferSubChunkWhenWritingToOtherBuffer()</a></span> - Method in <a href="org/grails/buffer/StreamCharBuffer.html">StreamCharBuffer</a>
@@ -36810,6 +36858,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/apache/grails/data/testing/tck/tests/WhereQueryLeftJoinSpec.html#LEFT JOIN in DetachedCriteria subquery should not be downgraded to INNER JOIN()" title="Method in WhereQueryLeftJoinSpec">LEFT JOIN in DetachedCriteria subquery should not be downgraded to INNER JOIN()</a></span> - Method in <a href="org/apache/grails/data/testing/tck/tests/WhereQueryLeftJoinSpec.html">WhereQueryLeftJoinSpec</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/gsp/compiler/GroovyPageCompiler.html#leftOut" title="Property in GroovyPageCompiler">leftOut</a></span> - Property in <a href="org/grails/gsp/compiler/GroovyPageCompiler.html">GroovyPageCompiler</a>
+</dt><dd> <div class="block">The optional pages left out because they did not compile, each with the reason.</div></dd>
<dt><span class="strong"><a href="org/grails/plugins/testing/AbstractGrailsMockHttpServletResponse.html#leftShift(java.lang.String)" title="Method in AbstractGrailsMockHttpServletResponse">leftShift(java.lang.String)</a></span> - Method in <a href="org/grails/plugins/testing/AbstractGrailsMockHttpServletResponse.html">AbstractGrailsMockHttpServletResponse</a>
</dt><dd> <div class="block">Appends the given content string to the response's output stream.</div></dd>
<dt><span class="strong"><a href="org/grails/async/factory/BoundPromise.html#leftShift(Closure<T>)" title="Method in BoundPromise">leftShift(Closure<T>)</a></span> - Method in <a href="org/grails/async/factory/BoundPromise.html">BoundPromise</a>
@@ -38247,6 +38297,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/cli/archive/PackagedSpringApplicationLauncher.html#main(java.lang.String)" title="Method in PackagedSpringApplicationLauncher">main(java.lang.String)</a></span> - Method in <a href="org/grails/cli/archive/PackagedSpringApplicationLauncher.html">PackagedSpringApplicationLauncher</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html#main(java.lang.String)" title="Method in ScaffoldedPagesGenerator">main(java.lang.String)</a></span> - Method in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html">ScaffoldedPagesGenerator</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/init/Start.html#main(java.lang.String)" title="Method in Start">main(java.lang.String)</a></span> - Method in <a href="grails/init/Start.html">Start</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/taglib/index/TagLibraryIndexGenerator.html#main(java.lang.String)" title="Method in TagLibraryIndexGenerator">main(java.lang.String)</a></span> - Method in <a href="org/grails/taglib/index/TagLibraryIndexGenerator.html">TagLibraryIndexGenerator</a>
@@ -41711,8 +41763,6 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/springframework/security/access/intercept/AbstractSecurityInterceptor.html#observeOncePerRequest" title="Property in AbstractSecurityInterceptor">observeOncePerRequest</a></span> - Property in <a href="org/springframework/security/access/intercept/AbstractSecurityInterceptor.html">AbstractSecurityInterceptor</a>
</dt><dd> <div class="block"></div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html#obtain()" title="Method in GroovyPagePlugin.ScaffoldedControllers">obtain()</a></span> - Method in <a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html">GroovyPagePlugin.ScaffoldedControllers</a>
-</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/apache/grails/web/layout/EmbeddedGrailsLayoutView.html#obtainContent(Map<String,Object>, org.grails.web.servlet.mvc.GrailsWebRequest, jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse)" title="Method in EmbeddedGrailsLayoutView">obtainContent(Map<String,Object>, org.grails.web.servlet.mvc.GrailsWebRequest, jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse)</a></span> - Method in <a [...]
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/springframework/security/access/intercept/AbstractSecurityInterceptor.html#obtainSecurityMetadataSource()" title="Method in AbstractSecurityInterceptor">obtainSecurityMetadataSource()</a></span> - Method in <a href="org/springframework/security/access/intercept/AbstractSecurityInterceptor.html">AbstractSecurityInterceptor</a>
@@ -42272,8 +42322,19 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/web/mapping/RegexUrlMapping.html#OPTIONAL_EXTENSION_WILDCARD_PATTERN" title="Field in RegexUrlMapping">OPTIONAL_EXTENSION_WILDCARD_PATTERN</a></span> - Field in <a href="org/grails/web/mapping/RegexUrlMapping.html">RegexUrlMapping</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/util/BuildSettings.html#OPTIONAL_GSP_PAGES" title="Field in BuildSettings">OPTIONAL_GSP_PAGES</a></span> - Field in <a href="grails/util/BuildSettings.html">BuildSettings</a>
+</dt><dd> <div class="block">A property name whose value lists, separated by the platform's path separator, files that
+ each name pages of a page compilation, one per line, as paths relative to the directory being
+ compiled. </div></dd>
<dt><span class="strong"><a href="org/grails/datastore/gorm/neo4j/CypherBuilder.html#OPTIONAL_MATCH" title="Field in CypherBuilder">OPTIONAL_MATCH</a></span> - Field in <a href="org/grails/datastore/gorm/neo4j/CypherBuilder.html">CypherBuilder</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/grails/gsp/compiler/GroovyPageCompiler.html#optionalPages" title="Property in GroovyPageCompiler">optionalPages</a></span> - Property in <a href="org/grails/gsp/compiler/GroovyPageCompiler.html">GroovyPageCompiler</a>
+</dt><dd> <div class="block">Pages, by their paths under <a href='#viewsDir'>viewsDir</a> or the generated directory holding them, that
+ may be left out: one of these that does not compile is left out with a warning instead of
+ failing the compilation.</div></dd>
+<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html#optionalPages" title="Property in GroovyPageForkCompileTask">optionalPages</a></span> - Property in <a href="org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html">GroovyPageForkCompileTask</a>
+</dt><dd> <div class="block">Files that each name, one per line, pages of the source that are optional, as paths relative
+ to it. </div></dd>
<dt><span class="strong"><a href="org/grails/cli/command/OptionParsingCommand.html" title="Class in org.grails.cli.command">OptionParsingCommand</a></span> - Class in <a href="./org/grails/cli/command/package-summary.html">org.grails.cli.command</a>
</dt><dd><div class="block">Base class for a <a href='https://docs.spring.io/spring-boot/4.1.1/api/java/org/springframework/boot/cli/command/Command.html' title='Command'>Command</a> that parse options using an <a href='https://docs.spring.io/spring-boot/4.1.1/api/java/org/springframework/boot/cli/command/options/OptionHandler.html' title='OptionHandler'>OptionHandler</a>.</div></dd>
<dt><span class="strong"><a href="org/grails/cli/command/OptionParsingCommand.html#OptionParsingCommand(java.lang.String, java.lang.String, org.springframework.boot.cli.command.options.OptionHandler)" title="Constructor in OptionParsingCommand">OptionParsingCommand(java.lang.String, java.lang.String, org.springframework.boot.cli.command.options.OptionHandler)</a></span> - Constructor in <a href="org/grails/cli/command/OptionParsingCommand.html">OptionParsingCommand</a>
@@ -42519,6 +42580,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/ui/SpringSecurityUiGrailsPlugin.html#organization" title="Property in SpringSecurityUiGrailsPlugin">organization</a></span> - Property in <a href="grails/plugin/springsecurity/ui/SpringSecurityUiGrailsPlugin.html">SpringSecurityUiGrailsPlugin</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html#origin" title="Property in ScaffoldedPagesGenerator.Failure">origin</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html">ScaffoldedPagesGenerator.Failure</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/io/support/SystemStreamsRedirector.html#original()" title="Method in SystemStreamsRedirector">original()</a></span> - Method in <a href="grails/io/support/SystemStreamsRedirector.html">SystemStreamsRedirector</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html#originalConfiguration" title="Property in AbstractDatastoreInitializer">originalConfiguration</a></span> - Property in <a href="org/grails/datastore/gorm/bootstrap/AbstractDatastoreInitializer.html">AbstractDatastoreInitializer</a>
@@ -42722,6 +42785,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd><div class="block">Exception thrown when there was an error in the packing process of an application.</div></dd>
<dt><span class="strong"><a href="org/grails/core/io/watch/PackagingException.html#PackagingException(java.lang.String, java.lang.Throwable)" title="Constructor in PackagingException">PackagingException(java.lang.String, java.lang.Throwable)</a></span> - Constructor in <a href="org/grails/core/io/watch/PackagingException.html">PackagingException</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html#Page(java.io.File, java.lang.String)" title="Constructor in ScaffoldedPagesGenerator.Page">Page(java.io.File, java.lang.String)</a></span> - Constructor in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html">ScaffoldedPagesGenerator.Page</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gsp/GroovyPage.html#PAGE_SCOPE" title="Field in GroovyPage">PAGE_SCOPE</a></span> - Field in <a href="org/grails/gsp/GroovyPage.html">GroovyPage</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gsp/jsp/JspFragmentImpl.html#pageContext" title="Property in JspFragmentImpl">pageContext</a></span> - Property in <a href="org/grails/gsp/jsp/JspFragmentImpl.html">JspFragmentImpl</a>
@@ -42768,6 +42833,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/gsp/PageRenderer.html#PageRenderer(org.grails.gsp.GroovyPagesTemplateEngine)" title="Constructor in PageRenderer">PageRenderer(org.grails.gsp.GroovyPagesTemplateEngine)</a></span> - Constructor in <a href="grails/gsp/PageRenderer.html">PageRenderer</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html#pages" title="Property in ScaffoldedPagesGenerator.Result">pages</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html">ScaffoldedPagesGenerator.Result</a>
+</dt><dd> <div class="block">Each page written.</div></dd>
<dt><span class="strong"><a href="org/grails/gsp/compiler/GroovyPageTypeCheckingConfig.html#pageScopeVariables" title="Field in GroovyPageTypeCheckingConfig">pageScopeVariables</a></span> - Field in <a href="org/grails/gsp/compiler/GroovyPageTypeCheckingConfig.html">GroovyPageTypeCheckingConfig</a>
</dt><dd> <div class="block">Names the page introduces for itself, through the <CODE>var</CODE> and <CODE>status</CODE> attributes of
the tags it calls -- <CODE><g:set var="total"/></CODE>, <CODE><g:each var="book"/></CODE> and the like.</div></dd>
@@ -43182,6 +43249,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/plugins/web/taglib/PluginTagLib.html#path(java.util.Map, groovy.lang.Closure)" title="Method in PluginTagLib">path(java.util.Map, groovy.lang.Closure)</a></span> - Method in <a href="org/grails/plugins/web/taglib/PluginTagLib.html">PluginTagLib</a>
</dt><dd> <div class="block">Gets the path to a particular plugin.</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html#path" title="Property in ScaffoldedPagesGenerator.Page">path</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html">ScaffoldedPagesGenerator.Page</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/web/pages/GroovyPagesUriSupport.html#PATH_TO_VIEWS" title="Field in GroovyPagesUriSupport">PATH_TO_VIEWS</a></span> - Field in <a href="org/grails/web/pages/GroovyPagesUriSupport.html">GroovyPagesUriSupport</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gsp/io/DefaultGroovyPageLocator.html#PATH_TO_WEB_INF_VIEWS" title="Field in DefaultGroovyPageLocator">PATH_TO_WEB_INF_VIEWS</a></span> - Field in <a href="org/grails/gsp/io/DefaultGroovyPageLocator.html">DefaultGroovyPageLocator</a>
@@ -44198,6 +44267,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block">Where the <CODE>compileGroovyPages</CODE> build task writes the views it compiled.</div></dd>
<dt><span class="strong"><a href="org/apache/grails/gsp/aot/PrecompiledPageRuntimeHints.html" title="Class in org.apache.grails.gsp.aot">PrecompiledPageRuntimeHints</a></span> - Class in <a href="./org/apache/grails/gsp/aot/package-summary.html">org.apache.grails.gsp.aot</a>
</dt><dd><div class="block">Registers what a page compiled at build time is read from.</div></dd>
+<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html#precompiledPagesInUse()" title="Method in ScaffoldingViewResolver">precompiledPagesInUse()</a></span> - Method in <a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html">ScaffoldingViewResolver</a>
+</dt><dd> <div class="block">Whether pages compiled by the build are used, which is whether the page locator uses them.</div></dd>
<dt><span class="strong"><a href="org/grails/datastore/mapping/engine/event/EventType.html#PreDelete" title="Enum Constant in EventType">PreDelete</a></span> - Enum Constant in <a href="org/grails/datastore/mapping/engine/event/EventType.html">EventType</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/apache/grails/data/testing/tck/tests/SpecPersistenceListener.html#PreDeleteCount" title="Property in SpecPersistenceListener">PreDeleteCount</a></span> - Property in <a href="org/apache/grails/data/testing/tck/tests/SpecPersistenceListener.html">SpecPersistenceListener</a>
@@ -45329,6 +45400,9 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugins/mail/MailConfigurationProperties.html#protocol" title="Property in MailConfigurationProperties">protocol</a></span> - Property in <a href="grails/plugins/mail/MailConfigurationProperties.html">MailConfigurationProperties</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html#PROTOCOL" title="Field in ScaffoldedPagesGenerator">PROTOCOL</a></span> - Field in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html">ScaffoldedPagesGenerator</a>
+</dt><dd> <div class="block">The version of the exchange with the build this speaks: the command line, and the plan,
+ origins and report files. </div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/rest/token/generation/jwt/CustomClaimProvider.html#provideCustomClaims(com.nimbusds.jwt.JWTClaimsSet$Builder, org.springframework.security.core.userdetails.UserDetails, java.lang.String, java.lang.Integer)" title="Method in CustomClaimProvider">provideCustomClaims(com.nimbusds.jwt.JWTClaimsSet$Builder, org.springframework.security.core.userdetails.UserDetails, java.lang.String, java.lang.Integer)</a></span> - Method in <a hre [...]
</dt><dd> <div class="block">The method will be called when the JWT is built. </div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/rest/token/generation/jwt/IssuerClaimProvider.html#provideCustomClaims(com.nimbusds.jwt.JWTClaimsSet$Builder, org.springframework.security.core.userdetails.UserDetails, java.lang.String, java.lang.Integer)" title="Method in IssuerClaimProvider">provideCustomClaims(com.nimbusds.jwt.JWTClaimsSet$Builder, org.springframework.security.core.userdetails.UserDetails, java.lang.String, java.lang.Integer)</a></span> - Method in <a hre [...]
@@ -46186,6 +46260,9 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block">Reads an undeclared property</div></dd>
<dt><span class="strong"><a href="org/grails/cli/compiler/maven/MavenSettingsReader.html#readSettings()" title="Method in MavenSettingsReader">readSettings()</a></span> - Method in <a href="org/grails/cli/compiler/maven/MavenSettingsReader.html">MavenSettingsReader</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html#readsTemplatesFromProject()" title="Method in ScaffoldingViewResolver">readsTemplatesFromProject()</a></span> - Method in <a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html">ScaffoldingViewResolver</a>
+</dt><dd> <div class="block">Whether templates are read from the project's <CODE>src/main/templates</CODE>, so that an edit to
+ one shows without a rebuild. </div></dd>
<dt><span class="strong"><a href="org/grails/buffer/StreamCharBuffer.html#readToSingleStringChunk(boolean)" title="Method in StreamCharBuffer">readToSingleStringChunk(boolean)</a></span> - Method in <a href="org/grails/buffer/StreamCharBuffer.html">StreamCharBuffer</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/datastore/bson/codecs/CodecExtensions.ListCodec.html#readValue(org.bson.BsonReader, org.bson.codecs.DecoderContext)" title="Method in CodecExtensions.ListCodec">readValue(org.bson.BsonReader, org.bson.codecs.DecoderContext)</a></span> - Method in <a href="org/grails/datastore/bson/codecs/CodecExtensions.ListCodec.html">CodecExtensions.ListCodec</a>
@@ -46196,6 +46273,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/orm/hibernate/query/AliasRegistry.html#realize(java.lang.String, Expression<?>)" title="Method in AliasRegistry">realize(java.lang.String, Expression<?>)</a></span> - Method in <a href="org/grails/orm/hibernate/query/AliasRegistry.html">AliasRegistry</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html#reason" title="Property in ScaffoldedPagesGenerator.Failure">reason</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html">ScaffoldedPagesGenerator.Failure</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/SpringSecurityService.html#reauthenticate(java.lang.String, java.lang.String)" title="Method in SpringSecurityService">reauthenticate(java.lang.String, java.lang.String)</a></span> - Method in <a href="grails/plugin/springsecurity/SpringSecurityService.html">SpringSecurityService</a>
</dt><dd> <div class="block">Rebuild an Authentication for the given username and register it in the security context.
</div></dd>
@@ -47480,6 +47559,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/geb/support/ReportingSupport.html#report(java.lang.String)" title="Method in ReportingSupport">report(java.lang.String)</a></span> - Method in <a href="grails/plugin/geb/support/ReportingSupport.html">ReportingSupport</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html#reportedPages" title="Field in ScaffoldingViewResolver">reportedPages</a></span> - Field in <a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html">ScaffoldingViewResolver</a>
+</dt><dd> <div class="block">The pages already reported as having no compiled page, so each is reported once.</div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/annotation/AuthoritiesTransformation.html#reportError(java.lang.String, org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.ASTNode)" title="Method in AuthoritiesTransformation">reportError(java.lang.String, org.codehaus.groovy.control.SourceUnit, org.codehaus.groovy.ast.ASTNode)</a></span> - Method in <a href="grails/plugin/springsecurity/annotation/AuthoritiesTransformation.html">AuthoritiesTransformation</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/geb/support/delegate/BrowserDelegate.html#reportGroup(java.lang.Class)" title="Method in BrowserDelegate">reportGroup(java.lang.Class)</a></span> - Method in <a href="grails/plugin/geb/support/delegate/BrowserDelegate.html">BrowserDelegate</a>
@@ -49130,6 +49211,22 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/scaffolding/annotation/Scaffold.html" title="Annotation Type in grails.plugin.scaffolding.annotation">Scaffold</a></span> - Annotation Type in <a href="./grails/plugin/scaffolding/annotation/package-summary.html">grails.plugin.scaffolding.annotation</a>
</dt><dd><div class="block">Scaffolding annotation for Controllers and Services.</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPages.html" title="Class in org.apache.grails.scaffolding">ScaffoldedPages</a></span> - Class in <a href="./org/apache/grails/scaffolding/package-summary.html">org.apache.grails.scaffolding</a>
+</dt><dd><div class="block">Expands a scaffolding template into a page, and names the page the build compiles from it so
+ that the runtime resolver can find it.</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html" title="Class in org.apache.grails.scaffolding">ScaffoldedPagesGenerator</a></span> - Class in <a href="./org/apache/grails/scaffolding/package-summary.html">org.apache.grails.scaffolding</a>
+</dt><dd><div class="block">Expands scaffolding templates into the pages the build compiles, run by the Gradle plugin's
+ <CODE>generateScaffoldedViews</CODE> task in a JVM on the application's own classpath.</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html" title="Class in org.apache.grails.scaffolding.ScaffoldedPagesGenerator">ScaffoldedPagesGenerator.Failure</a></span> - Class in <a href="./org/apache/grails/scaffolding/package-summary.html">org.apache.grails.scaffolding</a>
+</dt><dd><div class="block">A template that could not be expanded for a domain class, and why.</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html" title="Class in org.apache.grails.scaffolding.ScaffoldedPagesGenerator">ScaffoldedPagesGenerator.Page</a></span> - Class in <a href="./org/apache/grails/scaffolding/package-summary.html">org.apache.grails.scaffolding</a>
+</dt><dd><div class="block">A page written: the templates directory it was expanded from, and its path under the output directory.</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html" title="Class in org.apache.grails.scaffolding.ScaffoldedPagesGenerator">ScaffoldedPagesGenerator.Result</a></span> - Class in <a href="./org/apache/grails/scaffolding/package-summary.html">org.apache.grails.scaffolding</a>
+</dt><dd><div class="block">What a generation did.</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html#ScaffoldedPagesGenerator.Result()" title="Constructor in ScaffoldedPagesGenerator.Result">ScaffoldedPagesGenerator.Result()</a></span> - Constructor in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html">ScaffoldedPagesGenerator.Result</a>
+</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html#ScaffoldedPagesGenerator()" title="Constructor in ScaffoldedPagesGenerator">ScaffoldedPagesGenerator()</a></span> - Constructor in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html">ScaffoldedPagesGenerator</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/config/Settings.html#SCAFFOLDING_DOMAIN_SUFFIX" title="Field in Settings">SCAFFOLDING_DOMAIN_SUFFIX</a></span> - Field in <a href="grails/config/Settings.html">Settings</a>
</dt><dd> <div class="block">The suffix used during scaffolding for the domain</div></dd>
<dt><span class="strong"><a href="org/grails/scaffolding/ScaffoldingBeanConfiguration.html" title="Class in org.grails.scaffolding">ScaffoldingBeanConfiguration</a></span> - Class in <a href="./org/grails/scaffolding/package-summary.html">org.grails.scaffolding</a>
@@ -49145,7 +49242,8 @@ if (location.href.indexOf('is-external=true') == -1) {
<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingGrailsPlugin.html#ScaffoldingGrailsPlugin()" title="Constructor in ScaffoldingGrailsPlugin">ScaffoldingGrailsPlugin()</a></span> - Constructor in <a href="grails/plugin/scaffolding/ScaffoldingGrailsPlugin.html">ScaffoldingGrailsPlugin</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/apache/grails/scaffolding/aot/ScaffoldingRuntimeHints.html" title="Class in org.apache.grails.scaffolding.aot">ScaffoldingRuntimeHints</a></span> - Class in <a href="./org/apache/grails/scaffolding/aot/package-summary.html">org.apache.grails.scaffolding.aot</a>
-</dt><dd><div class="block">Registers the controller a scaffolded resource is served by.</div></dd>
+</dt><dd><div class="block">Registers the controller a scaffolded resource is served by, and the templates its pages are
+ found by.</div></dd>
<dt><span class="strong"><a href="org/grails/compiler/scaffolding/ScaffoldingServiceInjector.html" title="Class in org.grails.compiler.scaffolding">ScaffoldingServiceInjector</a></span> - Class in <a href="./org/grails/compiler/scaffolding/package-summary.html">org.grails.compiler.scaffolding</a>
</dt><dd><div class="block">Transformation that turns a service into a scaffolding service at compile time if '@Scaffold'
is specified</div></dd>
@@ -49163,9 +49261,6 @@ if (location.href.indexOf('is-external=true') == -1) {
<CODE>doWithSpring()</CODE> bean DSL. </div></dd>
<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolverDefinitionPostProcessor.html#ScaffoldingViewResolverDefinitionPostProcessor()" title="Constructor in ScaffoldingViewResolverDefinitionPostProcessor">ScaffoldingViewResolverDefinitionPostProcessor()</a></span> - Constructor in <a href="grails/plugin/scaffolding/ScaffoldingViewResolverDefinitionPostProcessor.html">ScaffoldingViewResolverDefinitionPostProcessor</a>
</dt><dd> <div class="block"></div></dd>
-<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html#scaffoldsAnyController(org.gradle.api.Project)" title="Method in GroovyPagePlugin">scaffoldsAnyController(org.gradle.api.Project)</a></span> - Method in <a href="org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html">GroovyPagePlugin</a>
-</dt><dd> <div class="block">Whether any controller in this project is scaffolded, which decides whether the views are
- staged before they are compiled. </div></dd>
<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldService.html" title="Interface in grails.plugin.scaffolding">ScaffoldService</a></span> - Interface in <a href="./grails/plugin/scaffolding/package-summary.html">grails.plugin.scaffolding</a>
</dt><dd><div class="block">Scaffold service interface providing CRUD operations for domain entities.</div></dd>
<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html#scaffoldValueCache" title="Field in ScaffoldingViewResolver">scaffoldValueCache</a></span> - Field in <a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html">ScaffoldingViewResolver</a>
@@ -53882,7 +53977,7 @@ if (location.href.indexOf('is-external=true') == -1) {
<dt><span class="strong"><a href="org/grails/web/pages/GroovyPageCompilerTask.html#srcdir" title="Property in GroovyPageCompilerTask">srcdir</a></span> - Property in <a href="org/grails/web/pages/GroovyPageCompilerTask.html">GroovyPageCompilerTask</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html#srcDir" title="Property in GroovyPageForkCompileTask">srcDir</a></span> - Property in <a href="org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html">GroovyPageForkCompileTask</a>
-</dt><dd> <div class="block"></div></dd>
+</dt><dd> <div class="block">The directory of the pages, which the compiler names them under. </div></dd>
<dt><span class="strong"><a href="org/grails/gsp/compiler/GroovyPageCompiler.html#srcFiles" title="Property in GroovyPageCompiler">srcFiles</a></span> - Property in <a href="org/grails/gsp/compiler/GroovyPageCompiler.html">GroovyPageCompiler</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/apache/grails/testing/http/client/TestHttpResponse.html#sslSession()" title="Method in TestHttpResponse">sslSession()</a></span> - Method in <a href="org/apache/grails/testing/http/client/TestHttpResponse.html">TestHttpResponse</a>
@@ -55474,6 +55569,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/views/GenericViewConfiguration.html#templatePath" title="Property in GenericViewConfiguration">templatePath</a></span> - Property in <a href="grails/views/GenericViewConfiguration.html">GenericViewConfiguration</a>
</dt><dd> <div class="block">The path to the templates</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html#templatePath" title="Property in ScaffoldedPagesGenerator.Failure">templatePath</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html">ScaffoldedPagesGenerator.Failure</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/views/WritableScriptTemplate.html#templatePath" title="Property in WritableScriptTemplate">templatePath</a></span> - Property in <a href="grails/views/WritableScriptTemplate.html">WritableScriptTemplate</a>
</dt><dd> <div class="block">The resolved template path</div></dd>
<dt><span class="strong"><a href="grails/plugin/json/view/api/internal/TemplateRenderer.html" title="Class in grails.plugin.json.view.api.internal">TemplateRenderer</a></span> - Class in <a href="./grails/plugin/json/view/api/internal/package-summary.html">grails.plugin.json.view.api.internal</a>
@@ -55504,6 +55601,10 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block">Find templates matching the given pattern</div></dd>
<dt><span class="strong"><a href="org/grails/cli/profile/commands/templates/TemplateRendererImpl.html#templates(java.lang.String)" title="Method in TemplateRendererImpl">templates(java.lang.String)</a></span> - Method in <a href="org/grails/cli/profile/commands/templates/TemplateRendererImpl.html">TemplateRendererImpl</a>
</dt><dd> <div class="block">Find templates matching the given pattern</div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html#templatesDir" title="Property in ScaffoldedPagesGenerator.Failure">templatesDir</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html">ScaffoldedPagesGenerator.Failure</a>
+</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html#templatesDir" title="Property in ScaffoldedPagesGenerator.Page">templatesDir</a></span> - Property in <a href="org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html">ScaffoldedPagesGenerator.Page</a>
+</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/gradle/plugin/profiles/tasks/ProfileCompilerTask.html#templatesDirectory" title="Property in ProfileCompilerTask">templatesDirectory</a></span> - Property in <a href="org/grails/gradle/plugin/profiles/tasks/ProfileCompilerTask.html">ProfileCompilerTask</a>
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="org/grails/taglib/TemplateVariableBinding.html" title="Class in org.grails.taglib">TemplateVariableBinding</a></span> - Class in <a href="./org/grails/taglib/package-summary.html">org.grails.taglib</a>
@@ -57095,6 +57196,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/plugin/springsecurity/ui/AbstractS2UiDomainController.html#tryDelete(groovy.lang.Closure)" title="Method in AbstractS2UiDomainController">tryDelete(groovy.lang.Closure)</a></span> - Method in <a href="grails/plugin/springsecurity/ui/AbstractS2UiDomainController.html">AbstractS2UiDomainController</a>
</dt><dd> <div class="block"></div></dd>
+<dt><span class="strong"><a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html#tryGenerateScaffoldedView(java.lang.String, grails.core.GrailsControllerClass, Closure<List<String>>)" title="Method in ScaffoldingViewResolver">tryGenerateScaffoldedView(java.lang.String, grails.core.GrailsControllerClass, Closure<List<String>>)</a></span> - Method in <a href="grails/plugin/scaffolding/ScaffoldingViewResolver.html">ScaffoldingViewResolver</a>
+</dt><dd> <div class="block">Attempts to generate a scaffolded view for the given controller</div></dd>
<dt><span class="strong"><a href="org/apache/grails/common/reflect/ReflectionUtils.html#tryMakeReadable(java.lang.reflect.Field, java.lang.Object)" title="Method in ReflectionUtils">tryMakeReadable(java.lang.reflect.Field, java.lang.Object)</a></span> - Method in <a href="org/apache/grails/common/reflect/ReflectionUtils.html">ReflectionUtils</a>
</dt><dd> <div class="block">Makes an instance field readable, widening it only when it is not readable already.</div></dd>
<dt><span class="strong"><a href="grails/orm/CriteriaMethodInvoker.html#tryMetaMethod(java.lang.String, java.lang.Object)" title="Method in CriteriaMethodInvoker">tryMetaMethod(java.lang.String, java.lang.Object)</a></span> - Method in <a href="grails/orm/CriteriaMethodInvoker.html">CriteriaMethodInvoker</a>
@@ -57816,6 +57919,8 @@ if (location.href.indexOf('is-external=true') == -1) {
</dt><dd> <div class="block"></div></dd>
<dt><span class="strong"><a href="grails/rest/Resource.html#uri()" title="Method in Resource">uri()</a></span> - Method in <a href="grails/rest/Resource.html">Resource</a>
</dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>The URI of the resource.</DD></DL></div></dd>
+<dt><span class="strong"><a href="org/apache/grails/scaffolding/ScaffoldedPages.html#uri(java.lang.String, Map<String,?>, byte[])" title="Method in ScaffoldedPages">uri(java.lang.String, Map<String,?>, byte[])</a></span> - Method in <a href="org/apache/grails/scaffolding/ScaffoldedPages.html">ScaffoldedPages</a>
+</dt><dd> <div class="block">The URI, relative to the views root, of the page expanded from a template with a model.</div></dd>
<dt><span class="strong"><a href="org/apache/grails/testing/http/client/TestHttpResponse.html#uri()" title="Method in TestHttpResponse">uri()</a></span> - Method in <a href="org/apache/grails/testing/http/client/TestHttpResponse.html">TestHttpResponse</a>
</dt><dd> <div class="block"> <DL><DT><B>Returns:</B></DT><DD>delegated response URI</DD></DL></div></dd>
<dt><span class="strong"><a href="grails/plugin/json/view/test/TestRequestConfigurer.html#uri" title="Property in TestRequestConfigurer">uri</a></span> - Property in <a href="grails/plugin/json/view/test/TestRequestConfigurer.html">TestRequestConfigurer</a>
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPages.html
similarity index 55%
copy from docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html
copy to docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPages.html
index 08f163360fe..7fcf9f9406b 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPages.html
@@ -27,17 +27,17 @@
<html>
<head>
<!-- Generated by groovydoc (5.1.3) -->
- <title>GroovyPagePlugin.ScaffoldedControllers (Grails 8.0.0-SNAPSHOT)</title>
+ <title>ScaffoldedPages (Grails 8.0.0-SNAPSHOT)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="icon">
- <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="icon">
+ <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<body class="center">
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GroovyPagePlugin.ScaffoldedControllers (Grails 8.0.0-SNAPSHOT)";
+ parent.document.title="ScaffoldedPages (Grails 8.0.0-SNAPSHOT)";
}
//-->
</script>
@@ -51,30 +51,30 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPages" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPages.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested <li><a href="#field_summary">Field</a></li> Constructor <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ <li><a href="#field_detail">Field</a></li> Constructor <li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
@@ -85,32 +85,38 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
- <div class="subTitle">Package: <strong>org.grails.gradle.plugin.views.gsp</strong></div>
+ <div class="subTitle">Package: <strong>org.apache.grails.scaffolding</strong></div>
- <h2 title="[Groovy] Class GroovyPagePlugin.ScaffoldedControllers" class="title">[Groovy] Class GroovyPagePlugin.ScaffoldedControllers</h2>
+ <h2 title="[Java] Class ScaffoldedPages" class="title">[Java] Class ScaffoldedPages</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li>org.grails.gradle.plugin.views.gsp.GroovyPagePlugin.ScaffoldedControllers
+<li><ul class="inheritance"></ul></li><li>org.apache.grails.scaffolding.ScaffoldedPages
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
- <dl>
- <dt>All Implemented Interfaces and Traits:</dt>
- <dd>ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters></dd>
- </dl>
-
<!-- todo: direct known subclasses -->
<hr>
-<pre>static abstract class GroovyPagePlugin.ScaffoldedControllers
-extends java.lang.Object
-implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters></pre>
+<pre>public final class ScaffoldedPages
+extends java.lang.Object</pre>
+
+ <p> Expands a scaffolding template into a page, and names the page the build compiles from it so
+ that the runtime resolver can find it.
- <p>Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</p>
+ <p>The build and the resolver both come here, so a page is expanded and named by the same code
+ whichever of them does it. A page is named for the template's path, for readability, and for a
+ digest of the template and of the value of each name of the model the template mentions. A
+ template the build did not see, or saw expanded with a different model, so names a page that
+ does not exist rather than a different one. A name the template never mentions is left out, so
+ that a value that differs between the machine that built the application and the one running it
+ - <CODE>packagePath</CODE> follows the file separator - does not cost the page; a template that reads
+ the model without naming what it reads, through <CODE>binding</CODE> for instance, is named as though
+ it did not read it.</p>
+ <DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
</li>
</ul>
@@ -121,12 +127,17 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<li class="blockList">
<!-- =========== NESTED CLASS SUMMARY =========== -->
+
+ <!-- =========== ENUM CONSTANT SUMMARY =========== -->
+
+ <!-- =========== FIELD SUMMARY =========== -->
+
<ul class="blockList">
- <li class="blockList"><a name="nested_summary"><!-- --></a>
- <h3>Nested Class Summary</h3>
+ <li class="blockList"><a name="field_summary"><!-- --></a>
+ <h3>Field Summary</h3>
<ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
- <caption><span>Nested classes</span><span class="tabEnd"> </span></caption>
+ <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum constants summary table">
+ <caption><span>Fields</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifiers</th>
<th class="colLast" scope="col">Name</th>
@@ -134,22 +145,18 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</tr>
<tr class="altColor">
- <td class="colFirst"><code><strong>static interface</strong></code> </td>
- <td class="colLast"><code><a href='../../../../../../org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html'>GroovyPagePlugin.ScaffoldedControllers.Parameters</a></code></td>
- <td class="colLast"></td>
+ <td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#DIRECTORY">DIRECTORY</a></code></td>
+ <td class="colLast">The directory under the views root that holds the compiled pages. </td>
</tr>
</table>
</ul>
</li>
+
</ul>
- <!-- =========== ENUM CONSTANT SUMMARY =========== -->
-
- <!-- =========== FIELD SUMMARY =========== -->
-
-
<!-- =========== PROPERTY SUMMARY =========== -->
@@ -157,27 +164,6 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
- <!-- ======== CONSTRUCTOR SUMMARY ======== -->
- <ul class="blockList">
- <li class="blockList"><a name="constructor_summary"><!-- --></a>
- <h3>Constructor Summary</h3>
- <ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructors Summary table">
- <caption><span>Constructors</span><span class="tabEnd"> </span></caption>
- <tr>
- <th class="colFirst" scope="col">Constructor and description</th>
- </tr>
-
- <tr class="altColor">
- <td class="colFirst">
- <code><strong><a href="#GroovyPagePlugin.ScaffoldedControllers()">GroovyPagePlugin.ScaffoldedControllers</a></strong>()</code><br></td>
- </tr>
-
- </table>
- </ul>
- </li>
- </ul>
-
<!-- ========== METHOD SUMMARY =========== -->
@@ -196,8 +182,14 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<tr class="altColor">
<td class="colFirst"><code></code></td>
- <td class="colLast"><code>java.lang.Boolean</code></td>
- <td class="colLast"><code><strong><a href="#obtain()">obtain</a></strong>()</code><br></td>
+ <td class="colLast"><code>public static java.lang.String</code></td>
+ <td class="colLast"><code><strong><a href="#expand(byte[], Map)">expand</a></strong>(byte[] template, java.util.Map<java.lang.String, ?> model)</code><br>Expands a template with a model, as both the build and the resolver do. </td>
+ </tr>
+
+ <tr class="rowColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>public static java.lang.String</code></td>
+ <td class="colLast"><code><strong><a href="#uri(java.lang.String, Map, byte[])">uri</a></strong>(java.lang.String templatePath, java.util.Map<java.lang.String, ?> model, byte[] template)</code><br>The URI, relative to the views root, of the page expanded from a template with a model.</td>
</tr>
</table>
@@ -234,24 +226,21 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
-
-
-
-
-
-
- <!-- =========== CONSTRUCTOR DETAIL =========== -->
+ <!-- =========== FIELD DETAIL =========== -->
<ul class="blockList">
- <li class="blockList"><a name="constructor_detail">
+ <li class="blockList"><a name="field_detail">
<!-- -->
</a>
- <h3>Constructor Detail</h3>
+ <h3>Field Detail</h3>
- <a name="GroovyPagePlugin.ScaffoldedControllers()"><!-- --></a>
+ <a name="DIRECTORY"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4><strong>GroovyPagePlugin.ScaffoldedControllers</strong>()</h4>
- <p></p>
+ <h4>public static final java.lang.String <strong>DIRECTORY</strong></h4>
+ <p> The directory under the views root that holds the compiled pages. A controller's views are
+ resolved from a directory named after a Java identifier, which cannot contain a hyphen, so no
+ request for a controller's view reaches a page here.
+ </p>
</li>
</ul>
@@ -259,6 +248,12 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</ul>
+
+
+
+
+
+
<!-- =========== METHOD DETAIL =========== -->
@@ -268,11 +263,24 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</a>
<h3>Method Detail</h3>
- <a name="obtain()"><!-- --></a>
+ <a name="expand(byte[], Map)"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>public static java.lang.String <strong>expand</strong>(byte[] template, java.util.Map<java.lang.String, ?> model)</h4>
+ <p> Expands a template with a model, as both the build and the resolver do. A template is read
+ as UTF-8 wherever it is expanded, so the page the build compiles is the page the resolver
+ would have expanded, whatever encoding either JVM defaults to.
+ <DL><DT><B>Parameters:</B></DT><DD><code>template</code> - the template exactly as it is read</DD><DD><code>model</code> - the names the template is expanded with</DD></DL><DL><DT><B>Returns:</B></DT><DD>the page</DD></DL></p>
+ </li>
+ </ul>
+
+ <a name="uri(java.lang.String, Map, byte[])"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@java.lang.Override<br>java.lang.Boolean <strong>obtain</strong>()</h4>
- <p></p>
+ <h4>public static java.lang.String <strong>uri</strong>(java.lang.String templatePath, java.util.Map<java.lang.String, ?> model, byte[] template)</h4>
+ <p> The URI, relative to the views root, of the page expanded from a template with a model.
+ <DL><DT><B>Parameters:</B></DT><DD><code>templatePath</code> - the template's path under <CODE>templates/scaffolding</CODE>, without its
+ extension, such as <CODE>show</CODE> or <CODE>admin/show</CODE></DD><DD><code>model</code> - the names the template is expanded with, including <CODE>fullName</CODE></DD><DD><code>template</code> - the template exactly as it is read</DD></DL><DL><DT><B>Returns:</B></DT><DD>the URI a page locator resolves the page by</DD></DL></p>
</li>
</ul>
@@ -291,30 +299,30 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPages" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPages.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested <li><a href="#field_summary">Field</a></li> Constructor <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ <li><a href="#field_detail">Field</a></li> Constructor <li><a href="#method_detail">Method</a></li>
</ul>
</div>
<p><!-- Matomo -->
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html
similarity index 56%
copy from docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html
copy to docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html
index 08f163360fe..8597de1b912 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html
@@ -27,17 +27,17 @@
<html>
<head>
<!-- Generated by groovydoc (5.1.3) -->
- <title>GroovyPagePlugin.ScaffoldedControllers (Grails 8.0.0-SNAPSHOT)</title>
+ <title>ScaffoldedPagesGenerator.Failure (Grails 8.0.0-SNAPSHOT)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="icon">
- <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="icon">
+ <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<body class="center">
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GroovyPagePlugin.ScaffoldedControllers (Grails 8.0.0-SNAPSHOT)";
+ parent.document.title="ScaffoldedPagesGenerator.Failure (Grails 8.0.0-SNAPSHOT)";
}
//-->
</script>
@@ -51,30 +51,30 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPagesGenerator.Failure.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> Method
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> Method
</ul>
</div>
<a name="skip-navbar_top">
@@ -85,32 +85,26 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
- <div class="subTitle">Package: <strong>org.grails.gradle.plugin.views.gsp</strong></div>
+ <div class="subTitle">Package: <strong>org.apache.grails.scaffolding</strong></div>
- <h2 title="[Groovy] Class GroovyPagePlugin.ScaffoldedControllers" class="title">[Groovy] Class GroovyPagePlugin.ScaffoldedControllers</h2>
+ <h2 title="[Groovy] Class ScaffoldedPagesGenerator.Failure" class="title">[Groovy] Class ScaffoldedPagesGenerator.Failure</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li>org.grails.gradle.plugin.views.gsp.GroovyPagePlugin.ScaffoldedControllers
+<li><ul class="inheritance"></ul></li><li>org.apache.grails.scaffolding.ScaffoldedPagesGenerator.Failure
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
- <dl>
- <dt>All Implemented Interfaces and Traits:</dt>
- <dd>ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters></dd>
- </dl>
-
<!-- todo: direct known subclasses -->
<hr>
-<pre>static abstract class GroovyPagePlugin.ScaffoldedControllers
-extends java.lang.Object
-implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters></pre>
+<pre>static final class ScaffoldedPagesGenerator.Failure
+extends java.lang.Object</pre>
- <p>Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</p>
+ <p>A template that could not be expanded for a domain class, and why.</p>
</li>
</ul>
@@ -121,38 +115,57 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<li class="blockList">
<!-- =========== NESTED CLASS SUMMARY =========== -->
- <ul class="blockList">
- <li class="blockList"><a name="nested_summary"><!-- --></a>
- <h3>Nested Class Summary</h3>
+
+ <!-- =========== ENUM CONSTANT SUMMARY =========== -->
+
+ <!-- =========== FIELD SUMMARY =========== -->
+
+
+ <!-- =========== PROPERTY SUMMARY =========== -->
+
+ <ul class="blockList">
+ <li class="blockList"><a name="property_summary"><!-- --></a>
+ <h3>Properties Summary</h3>
<ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
- <caption><span>Nested classes</span><span class="tabEnd"> </span></caption>
+ <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Properties Summary table, listing nested classes, and an explanation">
+ <caption><span>Properties</span><span class="tabEnd"> </span></caption>
<tr>
- <th class="colFirst" scope="col">Modifiers</th>
- <th class="colLast" scope="col">Name</th>
- <th class="colLast" scope="col">Description</th>
+ <th class="colFirst" scope="col">Type</th>
+ <th class="colLast" scope="col">Name and description</th>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code><strong>java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#domain">domain</a></code><br></td>
+ </tr>
+
+ <tr class="rowColor">
+ <td class="colFirst"><code><strong>java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#origin">origin</a></code><br></td>
</tr>
<tr class="altColor">
- <td class="colFirst"><code><strong>static interface</strong></code> </td>
- <td class="colLast"><code><a href='../../../../../../org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html'>GroovyPagePlugin.ScaffoldedControllers.Parameters</a></code></td>
- <td class="colLast"></td>
+ <td class="colFirst"><code><strong>java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#reason">reason</a></code><br></td>
+ </tr>
+
+ <tr class="rowColor">
+ <td class="colFirst"><code><strong>java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#templatePath">templatePath</a></code><br></td>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code><strong>java.io.File</strong></code> </td>
+ <td class="colLast"><code><a href="#templatesDir">templatesDir</a></code><br></td>
</tr>
</table>
</ul>
</li>
+
</ul>
- <!-- =========== ENUM CONSTANT SUMMARY =========== -->
-
- <!-- =========== FIELD SUMMARY =========== -->
-
-
- <!-- =========== PROPERTY SUMMARY =========== -->
-
-
<!-- =========== ELEMENT SUMMARY =========== -->
@@ -170,7 +183,7 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<tr class="altColor">
<td class="colFirst">
- <code><strong><a href="#GroovyPagePlugin.ScaffoldedControllers()">GroovyPagePlugin.ScaffoldedControllers</a></strong>()</code><br></td>
+ <code><strong><a href="#Failure(java.io.File, java.lang.String, java.lang.String, java.lang.String, java.lang.String)">Failure</a></strong>(java.io.File templatesDir, java.lang.String templatePath, java.lang.String origin, java.lang.String domain, java.lang.String reason)</code><br></td>
</tr>
</table>
@@ -183,27 +196,6 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
- <li class="blockList"><a name="method_summary"><!-- --></a>
- <h3>Methods Summary</h3>
- <ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Methods Summary table">
- <caption><span>Methods</span><span class="tabEnd"> </span></caption>
- <tr>
- <th class="colFirst" scope="col">Type Params</th>
- <th class="colLast" scope="col">Return Type</th>
- <th class="colLast" scope="col">Name and description</th>
- </tr>
-
- <tr class="altColor">
- <td class="colFirst"><code></code></td>
- <td class="colLast"><code>java.lang.Boolean</code></td>
- <td class="colLast"><code><strong><a href="#obtain()">obtain</a></strong>()</code><br></td>
- </tr>
-
- </table>
- </ul>
- </li>
-
<li class="blockList"><a name="method_summary"><!-- --></a>
<h3>Inherited Methods Summary</h3>
<ul class="blockList">
@@ -236,21 +228,49 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
-
-
-
-
- <!-- =========== CONSTRUCTOR DETAIL =========== -->
+ <!-- =========== PROPERTY DETAIL =========== -->
<ul class="blockList">
- <li class="blockList"><a name="constructor_detail">
+ <li class="blockList"><a name="prop_detail">
<!-- -->
</a>
- <h3>Constructor Detail</h3>
+ <h3>Property Detail</h3>
- <a name="GroovyPagePlugin.ScaffoldedControllers()"><!-- --></a>
+ <a name="domain"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4><strong>GroovyPagePlugin.ScaffoldedControllers</strong>()</h4>
+ <h4>final java.lang.String <strong>domain</strong></h4>
+ <p></p>
+ </li>
+ </ul>
+
+ <a name="origin"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>final java.lang.String <strong>origin</strong></h4>
+ <p></p>
+ </li>
+ </ul>
+
+ <a name="reason"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>final java.lang.String <strong>reason</strong></h4>
+ <p></p>
+ </li>
+ </ul>
+
+ <a name="templatePath"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>final java.lang.String <strong>templatePath</strong></h4>
+ <p></p>
+ </li>
+ </ul>
+
+ <a name="templatesDir"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>final java.io.File <strong>templatesDir</strong></h4>
<p></p>
</li>
</ul>
@@ -259,19 +279,20 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</ul>
+
- <!-- =========== METHOD DETAIL =========== -->
+ <!-- =========== CONSTRUCTOR DETAIL =========== -->
<ul class="blockList">
- <li class="blockList"><a name="method_detail">
+ <li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
- <h3>Method Detail</h3>
+ <h3>Constructor Detail</h3>
- <a name="obtain()"><!-- --></a>
+ <a name="Failure(java.io.File, java.lang.String, java.lang.String, java.lang.String, java.lang.String)"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@java.lang.Override<br>java.lang.Boolean <strong>obtain</strong>()</h4>
+ <h4><strong>Failure</strong>(java.io.File templatesDir, java.lang.String templatePath, java.lang.String origin, java.lang.String domain, java.lang.String reason)</h4>
<p></p>
</li>
</ul>
@@ -279,6 +300,9 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</li>
</ul>
+
+
+
</li>
</ul>
</div>
@@ -291,30 +315,30 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPagesGenerator.Failure.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> Method
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> Method
</ul>
</div>
<p><!-- Matomo -->
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html
similarity index 59%
copy from docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html
copy to docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html
index 08f163360fe..e8564a72bfa 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html
@@ -27,17 +27,17 @@
<html>
<head>
<!-- Generated by groovydoc (5.1.3) -->
- <title>GroovyPagePlugin.ScaffoldedControllers (Grails 8.0.0-SNAPSHOT)</title>
+ <title>ScaffoldedPagesGenerator.Page (Grails 8.0.0-SNAPSHOT)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="icon">
- <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="icon">
+ <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<body class="center">
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GroovyPagePlugin.ScaffoldedControllers (Grails 8.0.0-SNAPSHOT)";
+ parent.document.title="ScaffoldedPagesGenerator.Page (Grails 8.0.0-SNAPSHOT)";
}
//-->
</script>
@@ -51,30 +51,30 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPagesGenerator.Page.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> Method
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> Method
</ul>
</div>
<a name="skip-navbar_top">
@@ -85,32 +85,26 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
- <div class="subTitle">Package: <strong>org.grails.gradle.plugin.views.gsp</strong></div>
+ <div class="subTitle">Package: <strong>org.apache.grails.scaffolding</strong></div>
- <h2 title="[Groovy] Class GroovyPagePlugin.ScaffoldedControllers" class="title">[Groovy] Class GroovyPagePlugin.ScaffoldedControllers</h2>
+ <h2 title="[Groovy] Class ScaffoldedPagesGenerator.Page" class="title">[Groovy] Class ScaffoldedPagesGenerator.Page</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li>org.grails.gradle.plugin.views.gsp.GroovyPagePlugin.ScaffoldedControllers
+<li><ul class="inheritance"></ul></li><li>org.apache.grails.scaffolding.ScaffoldedPagesGenerator.Page
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
- <dl>
- <dt>All Implemented Interfaces and Traits:</dt>
- <dd>ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters></dd>
- </dl>
-
<!-- todo: direct known subclasses -->
<hr>
-<pre>static abstract class GroovyPagePlugin.ScaffoldedControllers
-extends java.lang.Object
-implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters></pre>
+<pre>static final class ScaffoldedPagesGenerator.Page
+extends java.lang.Object</pre>
- <p>Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</p>
+ <p>A page written: the templates directory it was expanded from, and its path under the output directory.</p>
</li>
</ul>
@@ -121,38 +115,42 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<li class="blockList">
<!-- =========== NESTED CLASS SUMMARY =========== -->
- <ul class="blockList">
- <li class="blockList"><a name="nested_summary"><!-- --></a>
- <h3>Nested Class Summary</h3>
+
+ <!-- =========== ENUM CONSTANT SUMMARY =========== -->
+
+ <!-- =========== FIELD SUMMARY =========== -->
+
+
+ <!-- =========== PROPERTY SUMMARY =========== -->
+
+ <ul class="blockList">
+ <li class="blockList"><a name="property_summary"><!-- --></a>
+ <h3>Properties Summary</h3>
<ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
- <caption><span>Nested classes</span><span class="tabEnd"> </span></caption>
+ <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Properties Summary table, listing nested classes, and an explanation">
+ <caption><span>Properties</span><span class="tabEnd"> </span></caption>
<tr>
- <th class="colFirst" scope="col">Modifiers</th>
- <th class="colLast" scope="col">Name</th>
- <th class="colLast" scope="col">Description</th>
+ <th class="colFirst" scope="col">Type</th>
+ <th class="colLast" scope="col">Name and description</th>
</tr>
<tr class="altColor">
- <td class="colFirst"><code><strong>static interface</strong></code> </td>
- <td class="colLast"><code><a href='../../../../../../org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html'>GroovyPagePlugin.ScaffoldedControllers.Parameters</a></code></td>
- <td class="colLast"></td>
+ <td class="colFirst"><code><strong>java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#path">path</a></code><br></td>
+ </tr>
+
+ <tr class="rowColor">
+ <td class="colFirst"><code><strong>java.io.File</strong></code> </td>
+ <td class="colLast"><code><a href="#templatesDir">templatesDir</a></code><br></td>
</tr>
</table>
</ul>
</li>
+
</ul>
- <!-- =========== ENUM CONSTANT SUMMARY =========== -->
-
- <!-- =========== FIELD SUMMARY =========== -->
-
-
- <!-- =========== PROPERTY SUMMARY =========== -->
-
-
<!-- =========== ELEMENT SUMMARY =========== -->
@@ -170,7 +168,7 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<tr class="altColor">
<td class="colFirst">
- <code><strong><a href="#GroovyPagePlugin.ScaffoldedControllers()">GroovyPagePlugin.ScaffoldedControllers</a></strong>()</code><br></td>
+ <code><strong><a href="#Page(java.io.File, java.lang.String)">Page</a></strong>(java.io.File templatesDir, java.lang.String path)</code><br></td>
</tr>
</table>
@@ -183,27 +181,6 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
- <li class="blockList"><a name="method_summary"><!-- --></a>
- <h3>Methods Summary</h3>
- <ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Methods Summary table">
- <caption><span>Methods</span><span class="tabEnd"> </span></caption>
- <tr>
- <th class="colFirst" scope="col">Type Params</th>
- <th class="colLast" scope="col">Return Type</th>
- <th class="colLast" scope="col">Name and description</th>
- </tr>
-
- <tr class="altColor">
- <td class="colFirst"><code></code></td>
- <td class="colLast"><code>java.lang.Boolean</code></td>
- <td class="colLast"><code><strong><a href="#obtain()">obtain</a></strong>()</code><br></td>
- </tr>
-
- </table>
- </ul>
- </li>
-
<li class="blockList"><a name="method_summary"><!-- --></a>
<h3>Inherited Methods Summary</h3>
<ul class="blockList">
@@ -236,21 +213,25 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
-
-
-
-
- <!-- =========== CONSTRUCTOR DETAIL =========== -->
+ <!-- =========== PROPERTY DETAIL =========== -->
<ul class="blockList">
- <li class="blockList"><a name="constructor_detail">
+ <li class="blockList"><a name="prop_detail">
<!-- -->
</a>
- <h3>Constructor Detail</h3>
+ <h3>Property Detail</h3>
+
+ <a name="path"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>final java.lang.String <strong>path</strong></h4>
+ <p></p>
+ </li>
+ </ul>
- <a name="GroovyPagePlugin.ScaffoldedControllers()"><!-- --></a>
+ <a name="templatesDir"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4><strong>GroovyPagePlugin.ScaffoldedControllers</strong>()</h4>
+ <h4>final java.io.File <strong>templatesDir</strong></h4>
<p></p>
</li>
</ul>
@@ -259,19 +240,20 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</ul>
+
- <!-- =========== METHOD DETAIL =========== -->
+ <!-- =========== CONSTRUCTOR DETAIL =========== -->
<ul class="blockList">
- <li class="blockList"><a name="method_detail">
+ <li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
- <h3>Method Detail</h3>
+ <h3>Constructor Detail</h3>
- <a name="obtain()"><!-- --></a>
+ <a name="Page(java.io.File, java.lang.String)"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@java.lang.Override<br>java.lang.Boolean <strong>obtain</strong>()</h4>
+ <h4><strong>Page</strong>(java.io.File templatesDir, java.lang.String path)</h4>
<p></p>
</li>
</ul>
@@ -279,6 +261,9 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</li>
</ul>
+
+
+
</li>
</ul>
</div>
@@ -291,30 +276,30 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPagesGenerator.Page.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> Method
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> Method
</ul>
</div>
<p><!-- Matomo -->
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html
similarity index 62%
rename from docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html
rename to docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html
index 08f163360fe..92d92885c75 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html
@@ -27,17 +27,17 @@
<html>
<head>
<!-- Generated by groovydoc (5.1.3) -->
- <title>GroovyPagePlugin.ScaffoldedControllers (Grails 8.0.0-SNAPSHOT)</title>
+ <title>ScaffoldedPagesGenerator.Result (Grails 8.0.0-SNAPSHOT)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="icon">
- <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="icon">
+ <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<body class="center">
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GroovyPagePlugin.ScaffoldedControllers (Grails 8.0.0-SNAPSHOT)";
+ parent.document.title="ScaffoldedPagesGenerator.Result (Grails 8.0.0-SNAPSHOT)";
}
//-->
</script>
@@ -51,30 +51,30 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPagesGenerator.Result.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
@@ -85,32 +85,26 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
- <div class="subTitle">Package: <strong>org.grails.gradle.plugin.views.gsp</strong></div>
+ <div class="subTitle">Package: <strong>org.apache.grails.scaffolding</strong></div>
- <h2 title="[Groovy] Class GroovyPagePlugin.ScaffoldedControllers" class="title">[Groovy] Class GroovyPagePlugin.ScaffoldedControllers</h2>
+ <h2 title="[Groovy] Class ScaffoldedPagesGenerator.Result" class="title">[Groovy] Class ScaffoldedPagesGenerator.Result</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li>org.grails.gradle.plugin.views.gsp.GroovyPagePlugin.ScaffoldedControllers
+<li><ul class="inheritance"></ul></li><li>org.apache.grails.scaffolding.ScaffoldedPagesGenerator.Result
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
- <dl>
- <dt>All Implemented Interfaces and Traits:</dt>
- <dd>ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters></dd>
- </dl>
-
<!-- todo: direct known subclasses -->
<hr>
-<pre>static abstract class GroovyPagePlugin.ScaffoldedControllers
-extends java.lang.Object
-implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters></pre>
+<pre>static final class ScaffoldedPagesGenerator.Result
+extends java.lang.Object</pre>
- <p>Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</p>
+ <p>What a generation did.</p>
</li>
</ul>
@@ -121,38 +115,42 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<li class="blockList">
<!-- =========== NESTED CLASS SUMMARY =========== -->
- <ul class="blockList">
- <li class="blockList"><a name="nested_summary"><!-- --></a>
- <h3>Nested Class Summary</h3>
+
+ <!-- =========== ENUM CONSTANT SUMMARY =========== -->
+
+ <!-- =========== FIELD SUMMARY =========== -->
+
+
+ <!-- =========== PROPERTY SUMMARY =========== -->
+
+ <ul class="blockList">
+ <li class="blockList"><a name="property_summary"><!-- --></a>
+ <h3>Properties Summary</h3>
<ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
- <caption><span>Nested classes</span><span class="tabEnd"> </span></caption>
+ <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Properties Summary table, listing nested classes, and an explanation">
+ <caption><span>Properties</span><span class="tabEnd"> </span></caption>
<tr>
- <th class="colFirst" scope="col">Modifiers</th>
- <th class="colLast" scope="col">Name</th>
- <th class="colLast" scope="col">Description</th>
+ <th class="colFirst" scope="col">Type</th>
+ <th class="colLast" scope="col">Name and description</th>
</tr>
<tr class="altColor">
- <td class="colFirst"><code><strong>static interface</strong></code> </td>
- <td class="colLast"><code><a href='../../../../../../org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html'>GroovyPagePlugin.ScaffoldedControllers.Parameters</a></code></td>
- <td class="colLast"></td>
+ <td class="colFirst"><code><strong>java.util.List<Failure></strong></code> </td>
+ <td class="colLast"><code><a href="#failures">failures</a></code><br>Each template that could not be expanded for a domain class.</td>
+ </tr>
+
+ <tr class="rowColor">
+ <td class="colFirst"><code><strong>java.util.List<Page></strong></code> </td>
+ <td class="colLast"><code><a href="#pages">pages</a></code><br>Each page written.</td>
</tr>
</table>
</ul>
</li>
+
</ul>
- <!-- =========== ENUM CONSTANT SUMMARY =========== -->
-
- <!-- =========== FIELD SUMMARY =========== -->
-
-
- <!-- =========== PROPERTY SUMMARY =========== -->
-
-
<!-- =========== ELEMENT SUMMARY =========== -->
@@ -170,7 +168,7 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<tr class="altColor">
<td class="colFirst">
- <code><strong><a href="#GroovyPagePlugin.ScaffoldedControllers()">GroovyPagePlugin.ScaffoldedControllers</a></strong>()</code><br></td>
+ <code><strong><a href="#ScaffoldedPagesGenerator.Result()">ScaffoldedPagesGenerator.Result</a></strong>()</code><br></td>
</tr>
</table>
@@ -196,8 +194,8 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<tr class="altColor">
<td class="colFirst"><code></code></td>
- <td class="colLast"><code>java.lang.Boolean</code></td>
- <td class="colLast"><code><strong><a href="#obtain()">obtain</a></strong>()</code><br></td>
+ <td class="colLast"><code>int</code></td>
+ <td class="colLast"><code><strong><a href="#getWritten()">getWritten</a></strong>()</code><br>How many pages were written.</td>
</tr>
</table>
@@ -236,6 +234,32 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
+ <!-- =========== PROPERTY DETAIL =========== -->
+ <ul class="blockList">
+ <li class="blockList"><a name="prop_detail">
+ <!-- -->
+ </a>
+ <h3>Property Detail</h3>
+
+ <a name="failures"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>final java.util.List<Failure> <strong>failures</strong></h4>
+ <p>Each template that could not be expanded for a domain class.</p>
+ </li>
+ </ul>
+
+ <a name="pages"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>final java.util.List<Page> <strong>pages</strong></h4>
+ <p>Each page written.</p>
+ </li>
+ </ul>
+
+ </li>
+ </ul>
+
@@ -247,10 +271,10 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</a>
<h3>Constructor Detail</h3>
- <a name="GroovyPagePlugin.ScaffoldedControllers()"><!-- --></a>
+ <a name="ScaffoldedPagesGenerator.Result()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4><strong>GroovyPagePlugin.ScaffoldedControllers</strong>()</h4>
+ <h4><strong>ScaffoldedPagesGenerator.Result</strong>()</h4>
<p></p>
</li>
</ul>
@@ -268,11 +292,11 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
</a>
<h3>Method Detail</h3>
- <a name="obtain()"><!-- --></a>
+ <a name="getWritten()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@java.lang.Override<br>java.lang.Boolean <strong>obtain</strong>()</h4>
- <p></p>
+ <h4>int <strong>getWritten</strong>()</h4>
+ <p>How many pages were written.</p>
</li>
</ul>
@@ -291,30 +315,30 @@ implements ValueSource<java.lang.Boolean, ScaffoldedControllers.Parameters>
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPagesGenerator.Result.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested Field <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ Field <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
</ul>
</div>
<p><!-- Matomo -->
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html
similarity index 63%
copy from docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html
copy to docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html
index 884e17c5989..4d02bbc3d4e 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/ScaffoldedPagesGenerator.html
@@ -27,17 +27,17 @@
<html>
<head>
<!-- Generated by groovydoc (5.1.3) -->
- <title>GroovyPagePlugin (Grails 8.0.0-SNAPSHOT)</title>
+ <title>ScaffoldedPagesGenerator (Grails 8.0.0-SNAPSHOT)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="icon">
- <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
+ <link href="../../../../groovy.ico" type="image/x-icon" rel="icon">
+ <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<body class="center">
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GroovyPagePlugin (Grails 8.0.0-SNAPSHOT)";
+ parent.document.title="ScaffoldedPagesGenerator (Grails 8.0.0-SNAPSHOT)";
}
//-->
</script>
@@ -51,20 +51,20 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPagesGenerator" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPagesGenerator.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
@@ -85,13 +85,13 @@ if (location.href.indexOf('is-external=true') == -1) {
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
- <div class="subTitle">Package: <strong>org.grails.gradle.plugin.views.gsp</strong></div>
+ <div class="subTitle">Package: <strong>org.apache.grails.scaffolding</strong></div>
- <h2 title="[Groovy] Class GroovyPagePlugin" class="title">[Groovy] Class GroovyPagePlugin</h2>
+ <h2 title="[Groovy] Class ScaffoldedPagesGenerator" class="title">[Groovy] Class ScaffoldedPagesGenerator</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li>org.grails.gradle.plugin.views.gsp.GroovyPagePlugin
+<li><ul class="inheritance"></ul></li><li>org.apache.grails.scaffolding.ScaffoldedPagesGenerator
</ul>
<div class="description">
<ul class="blockList">
@@ -99,7 +99,7 @@ if (location.href.indexOf('is-external=true') == -1) {
<dl>
<dt>All Implemented Interfaces and Traits:</dt>
- <dd>Plugin<Project></dd>
+ <dd><a href='../../../../grails/codegen/model/ModelBuilder.html'>ModelBuilder</a></dd>
</dl>
@@ -107,11 +107,30 @@ if (location.href.indexOf('is-external=true') == -1) {
<hr>
<pre>@<a href='https://docs.groovy-lang.org/5.1.3/html/gapi/groovy/transform/CompileStatic.html' title='CompileStatic'>CompileStatic</a>
-class GroovyPagePlugin
+class ScaffoldedPagesGenerator
extends java.lang.Object
-implements Plugin<Project></pre>
+implements <a href='../../../../grails/codegen/model/ModelBuilder.html'>ModelBuilder</a></pre>
- <p> A plugin that adds support for compiling Groovy Server Pages (GSP) <DL><DT><B>Authors:</B></DT><DD>Graeme Rocher</DD></DL><DL><DT><B>Since:</B></DT><DD>3.0</DD></DL></p>
+ <p> Expands scaffolding templates into the pages the build compiles, run by the Gradle plugin's
+ <CODE>generateScaffoldedViews</CODE> task in a JVM on the application's own classpath.
+
+ <p>Running here rather than in the build means a page is modelled by the application's
+ <a href='../../../../grails/codegen/model/ModelBuilder.html' title='ModelBuilder'>ModelBuilder</a>, expanded by the application's Groovy and named by <a href='../../../../org/apache/grails/scaffolding/ScaffoldedPages.html' title='ScaffoldedPages'>ScaffoldedPages</a>,
+ exactly as the resolver models, expands and names it when the view is asked for.</p>
+
+ <pre>
+ ScaffoldedPagesGenerator <plan> <origins> <output directory> <page encoding> <report>
+ </pre>
+
+ <p>Each line of the plan names a domain class and, tab separated, the templates directories to
+ expand for it. A templates directory holds a file per template path, such as <CODE>show.gsp</CODE> or
+ <CODE>admin/show.gsp</CODE>. Each line of the origins names a templates directory and, after a tab,
+ where its template came from. The pages are written in the encoding they will be compiled
+ with. What the build has to decide about is written to the report, a line apiece, tab
+ separated: each page written - <CODE>page</CODE>, its templates directory and its path under the
+ output directory - and each template that could not be expanded for a domain class -
+ <CODE>failed</CODE>, its templates directory, the domain class and why. What becomes of either depends
+ on whose template it is, which the build knows and this does not.</p> <DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
</li>
</ul>
@@ -136,8 +155,20 @@ implements Plugin<Project></pre>
<tr class="altColor">
<td class="colFirst"><code><strong>static class</strong></code> </td>
- <td class="colLast"><code><a href='../../../../../../org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html'>GroovyPagePlugin.ScaffoldedControllers</a></code></td>
- <td class="colLast">Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</td>
+ <td class="colLast"><code><a href='../../../../org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Failure.html'>ScaffoldedPagesGenerator.Failure</a></code></td>
+ <td class="colLast">A template that could not be expanded for a domain class, and why.</td>
+ </tr>
+
+ <tr class="rowColor">
+ <td class="colFirst"><code><strong>static class</strong></code> </td>
+ <td class="colLast"><code><a href='../../../../org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Page.html'>ScaffoldedPagesGenerator.Page</a></code></td>
+ <td class="colLast">A page written: the templates directory it was expanded from, and its path under the output directory.</td>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code><strong>static class</strong></code> </td>
+ <td class="colLast"><code><a href='../../../../org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html'>ScaffoldedPagesGenerator.Result</a></code></td>
+ <td class="colLast">What a generation did.</td>
</tr>
</table>
@@ -163,10 +194,10 @@ implements Plugin<Project></pre>
</tr>
<tr class="altColor">
- <td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
- <td class="colLast"><code><a href="#VIEWS_SERVER_PATH">VIEWS_SERVER_PATH</a></code></td>
- <td class="colLast">The server path application views are compiled under, and so the prefix of every key in a
- compiled-view index. </td>
+ <td class="colFirst"><code><strong>static int</strong></code> </td>
+ <td class="colLast"><code><a href="#PROTOCOL">PROTOCOL</a></code></td>
+ <td class="colLast">The version of the exchange with the build this speaks: the command line, and the plan,
+ origins and report files. </td>
</tr>
</table>
@@ -196,7 +227,7 @@ implements Plugin<Project></pre>
<tr class="altColor">
<td class="colFirst">
- <code><strong><a href="#GroovyPagePlugin()">GroovyPagePlugin</a></strong>()</code><br></td>
+ <code><strong><a href="#ScaffoldedPagesGenerator()">ScaffoldedPagesGenerator</a></strong>()</code><br></td>
</tr>
</table>
@@ -222,27 +253,15 @@ implements Plugin<Project></pre>
<tr class="altColor">
<td class="colFirst"><code></code></td>
- <td class="colLast"><code>void</code></td>
- <td class="colLast"><code><strong><a href="#apply(org.gradle.api.Project)">apply</a></strong>(<a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</code><br></td>
+ <td class="colLast"><code><a href='../../../../org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html'>ScaffoldedPagesGenerator.Result</a></code></td>
+ <td class="colLast"><code><strong><a href="#generate(Map, java.io.File, java.lang.String, Map)">generate</a></strong>(java.util.Map<java.lang.String, java.util.List<java.io.File>> plan, java.io.File outputDir, java.lang.String encoding, java.util.Map<java.io.File, java.lang.String> origins)</code><br>Writes, under <CODE>outputDir</CODE> where the resolver looks for it, the page for each domain
+ class and each template in the directories planned for it. </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code></code></td>
- <td class="colLast"><code>protected java.lang.String</code></td>
- <td class="colLast"><code><strong><a href="#getTmpDirPath(org.gradle.api.Project)">getTmpDirPath</a></strong>(<a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</code><br></td>
- </tr>
-
- <tr class="altColor">
- <td class="colFirst"><code></code></td>
- <td class="colLast"><code>protected <a href='../../../../../../org.gradle.api.file.FileCollection.html'>FileCollection</a></code></td>
- <td class="colLast"><code><strong><a href="#resolveClassesDirs(org.gradle.api.tasks.SourceSetOutput, org.gradle.api.Project)">resolveClassesDirs</a></strong>(<a href='../../../../../../org.gradle.api.tasks.SourceSetOutput.html'>SourceSetOutput</a> output, <a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</code><br></td>
- </tr>
-
- <tr class="rowColor">
- <td class="colFirst"><code></code></td>
- <td class="colLast"><code>protected Provider<java.lang.Boolean></code></td>
- <td class="colLast"><code><strong><a href="#scaffoldsAnyController(org.gradle.api.Project)">scaffoldsAnyController</a></strong>(<a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</code><br>Whether any controller in this project is scaffolded, which decides whether the views are
- staged before they are compiled. </td>
+ <td class="colLast"><code>static void</code></td>
+ <td class="colLast"><code><strong><a href="#main(java.lang.String)">main</a></strong>(java.lang.String[] args)</code><br></td>
</tr>
</table>
@@ -286,12 +305,16 @@ implements Plugin<Project></pre>
</a>
<h3>Field Detail</h3>
- <a name="VIEWS_SERVER_PATH"><!-- --></a>
+ <a name="PROTOCOL"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>public static final java.lang.String <strong>VIEWS_SERVER_PATH</strong></h4>
- <p> The server path application views are compiled under, and so the prefix of every key in a
- compiled-view index. GenerateScaffoldedViewsTask matches plugin index keys against it.</p>
+ <h4>public static final int <strong>PROTOCOL</strong></h4>
+ <p> The version of the exchange with the build this speaks: the command line, and the plan,
+ origins and report files. This ships in grails-scaffolding and the build's side in the Gradle
+ plugin, so a build can pair one version with another; the plugin reads this constant from the
+ class file before running it, and expands nothing when it does not speak the same version, so a
+ mismatch leaves the pages to be expanded when rendered instead of failing the build. Raised with
+ every change to either side of the exchange, together with the plugin's.</p>
</li>
</ul>
@@ -311,10 +334,10 @@ implements Plugin<Project></pre>
</a>
<h3>Constructor Detail</h3>
- <a name="GroovyPagePlugin()"><!-- --></a>
+ <a name="ScaffoldedPagesGenerator()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4><strong>GroovyPagePlugin</strong>()</h4>
+ <h4><strong>ScaffoldedPagesGenerator</strong>()</h4>
<p></p>
</li>
</ul>
@@ -332,51 +355,28 @@ implements Plugin<Project></pre>
</a>
<h3>Method Detail</h3>
- <a name="apply(org.gradle.api.Project)"><!-- --></a>
+ <a name="generate(Map, java.io.File, java.lang.String, Map)"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@java.lang.Override<br>void <strong>apply</strong>(<a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</h4>
- <p></p>
+ <h4><a href='../../../../org/apache/grails/scaffolding/ScaffoldedPagesGenerator.Result.html'>ScaffoldedPagesGenerator.Result</a> <strong>generate</strong>(java.util.Map<java.lang.String, java.util.List<java.io.File>> plan, java.io.File outputDir, java.lang.String encoding, java.util.Map<java.io.File, java.lang.String> origins)</h4>
+ <p> Writes, under <CODE>outputDir</CODE> where the resolver looks for it, the page for each domain
+ class and each template in the directories planned for it. A template that cannot be
+ expanded for a domain class is left out, and returned with why.
+
+ <p>A page ends with a comment naming the template it was expanded from, which renders as
+ nothing, so that a page the build reports can be traced to the template to fix.</p> <DL><DT><B>Parameters:</B></DT><DD><code>plan</code> - each domain class, with the templates directories to expand for it</DD><DD><code>origins</code> - where the template in each templates directory came from; the template's own
+ file for a directory not named</DD></DL><DL><DT><B>Returns:</B></DT><DD>each page written, and each template that could not be expanded</DD></DL></p>
</li>
</ul>
- <a name="getTmpDirPath(org.gradle.api.Project)"><!-- --></a>
+ <a name="main(java.lang.String)"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>protected java.lang.String <strong>getTmpDirPath</strong>(<a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</h4>
+ <h4>static void <strong>main</strong>(java.lang.String[] args)</h4>
<p></p>
</li>
</ul>
- <a name="resolveClassesDirs(org.gradle.api.tasks.SourceSetOutput, org.gradle.api.Project)"><!-- --></a>
- <ul class="blockListLast">
- <li class="blockList">
- <h4>protected <a href='../../../../../../org.gradle.api.file.FileCollection.html'>FileCollection</a> <strong>resolveClassesDirs</strong>(<a href='../../../../../../org.gradle.api.tasks.SourceSetOutput.html'>SourceSetOutput</a> output, <a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</h4>
- <p></p>
- </li>
- </ul>
-
- <a name="scaffoldsAnyController(org.gradle.api.Project)"><!-- --></a>
- <ul class="blockListLast">
- <li class="blockList">
- <h4>protected Provider<java.lang.Boolean> <strong>scaffoldsAnyController</strong>(<a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</h4>
- <p> Whether any controller in this project is scaffolded, which decides whether the views are
- staged before they are compiled. The answer is needed while the build is being configured,
- before anything has been compiled, so it is read from the sources.
-
- <p>Read through a ValueSource rather than by opening the files here. Gradle re-runs a
- value source on every build and invalidates the configuration cache when its answer changes,
- so a controller that becomes scaffolded rebuilds the graph that generates its views. Read
- directly, the answer would be an undeclared input: settled once, cached, and wrong from then
- on.</p>
-
- <p>The match is deliberately loose. GenerateScaffoldedViewsTask reads the real
- annotation from the compiled class, so a false positive here costs a staging copy and a
- generation task that writes nothing -- while a false negative costs a view that is missing
- from the artifact, found by whoever opens that page.</p></p>
- </li>
- </ul>
-
</li>
</ul>
@@ -392,20 +392,20 @@ implements Plugin<Project></pre>
<!-- -->
</a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.html" target="_top">No Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/ScaffoldedPagesGenerator" target="_top">Frames</a></li>
+ <li><a href="ScaffoldedPagesGenerator.html" target="_top">No Frames</a></li>
</ul>
</div>
<div>
diff --git a/docs/snapshot/api/org/apache/grails/scaffolding/aot/ScaffoldingRuntimeHints.html b/docs/snapshot/api/org/apache/grails/scaffolding/aot/ScaffoldingRuntimeHints.html
index 3624945c309..00edae6665b 100644
--- a/docs/snapshot/api/org/apache/grails/scaffolding/aot/ScaffoldingRuntimeHints.html
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/aot/ScaffoldingRuntimeHints.html
@@ -110,11 +110,16 @@ if (location.href.indexOf('is-external=true') == -1) {
extends java.lang.Object
implements <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/aot/hint/RuntimeHintsRegistrar.html' title='RuntimeHintsRegistrar'>RuntimeHintsRegistrar</a></pre>
- <p> Registers the controller a scaffolded resource is served by.
+ <p> Registers the controller a scaffolded resource is served by, and the templates its pages are
+ found by.
<p>Its actions are reached through Groovy, including the protected ones it defines for the write
operations, so an image that keeps only the members something asked for serves the pages and then
fails on the request that saves or removes a record.</p>
+
+ <p>The pages themselves are compiled by the build, but the resolver still reads the template a
+ page was expanded from, because the page is named for it. An image without the templates finds no
+ template, and so no page, for any scaffolded view.</p>
<DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
</li>
diff --git a/docs/snapshot/api/org/apache/grails/scaffolding/aot/package-summary.html b/docs/snapshot/api/org/apache/grails/scaffolding/aot/package-summary.html
index 82de89ae745..400e8e3e9fd 100644
--- a/docs/snapshot/api/org/apache/grails/scaffolding/aot/package-summary.html
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/aot/package-summary.html
@@ -94,7 +94,8 @@ function windowTitle()
ScaffoldingRuntimeHints
</a></strong>
</td>
- <td>Registers the controller a scaffolded resource is served by.</td>
+ <td>Registers the controller a scaffolded resource is served by, and the templates its pages are
+ found by.</td>
</tr>
</tbody>
diff --git a/docs/snapshot/api/org/apache/grails/scaffolding/package-frame.html b/docs/snapshot/api/org/apache/grails/scaffolding/package-frame.html
new file mode 100644
index 00000000000..819ee02fa99
--- /dev/null
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/package-frame.html
@@ -0,0 +1,58 @@
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>org.apache.grails.scaffolding</title>
+
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta name="keywords" CONTENT="org/apache/grails/scaffolding package">
+
+ <link href="groovy.ico" type="image/x-icon" rel="shortcut icon">
+ <link href="groovy.ico" type="image/x-icon" rel="icon">
+ <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+</head>
+
+<body class="left">
+<div class="indexHeader">
+ <b><a href="package-summary.html" target="classFrame">org.apache.grails.scaffolding</a></b>
+</div>
+
+
+
+
+
+<div class="indexContainer">
+ <h2>Classes</h2>
+ <ul>
+ <li><a href="ScaffoldedPages.html" title="class in org.apache.grails.scaffolding" target="classFrame">ScaffoldedPages</a></li><li><a href="ScaffoldedPagesGenerator.html" title="class in org.apache.grails.scaffolding" target="classFrame">ScaffoldedPagesGenerator</a></li><li><a href="ScaffoldedPagesGenerator.Failure.html" title="class in org.apache.grails.scaffolding" target="classFrame">ScaffoldedPagesGenerator.Failure</a></li><li><a href="ScaffoldedPagesGenerator.Page.html" title [...]
+ </ul>
+</div>
+
+
+
+
+
+
+
+
+</body>
+</html>
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-summary.html b/docs/snapshot/api/org/apache/grails/scaffolding/package-summary.html
similarity index 57%
copy from docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-summary.html
copy to docs/snapshot/api/org/apache/grails/scaffolding/package-summary.html
index 77169d0aa48..6688b13d566 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-summary.html
+++ b/docs/snapshot/api/org/apache/grails/scaffolding/package-summary.html
@@ -22,16 +22,16 @@
<html>
<head>
-<title>org.grails.gradle.plugin.views.gsp (Grails 8.0.0-SNAPSHOT)</title>
-<meta name="keywords" content="org.grails.gradle.plugin.views.gsp package">
+<title>org.apache.grails.scaffolding (Grails 8.0.0-SNAPSHOT)</title>
+<meta name="keywords" content="org.apache.grails.scaffolding package">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<link rel ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" title="Style">
-<link href="../../../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
-<link href="../../../../../../groovy.ico" type="image/x-icon" rel="icon">
+<link rel ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" title="Style">
+<link href="../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
+<link href="../../../../groovy.ico" type="image/x-icon" rel="icon">
<script type="text/javascript">
function windowTitle()
{
- parent.document.title="org.grails.gradle.plugin.views.gsp (Grails 8.0.0-SNAPSHOT)";
+ parent.document.title="org.apache.grails.scaffolding (Grails 8.0.0-SNAPSHOT)";
}
</script>
<noscript>
@@ -49,18 +49,18 @@ function windowTitle()
</a>
<a name="navbar_top_firstrow"><!-- --></a>
<ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
+ <li><a href="../../../../overview-summary.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
+ <li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+ <li><a href="../../../../index-all.html">Index</a></li>
+ <li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/package-summary.html" target="_top">Frames</a></li>
+ <li><a href="../../../../index.html?org/apache/grails/scaffolding/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No Frames</a></li>
</ul>
</div>
@@ -68,7 +68,7 @@ function windowTitle()
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
- <h1 class="title">Package org.grails.gradle.plugin.views.gsp</h1>
+ <h1 class="title">Package org.apache.grails.scaffolding</h1>
</div>
@@ -76,32 +76,6 @@ function windowTitle()
<div class="contentContainer">
- <div class="summary">
- <ul class="blockList">
- <li class="blockList">
- <table border="0" cellpadding="3" cellspacing="0" summary="Interface Summary">
- <caption><span>Interface Summary</span><span class="tabEnd"> </span></caption>
- <tbody>
- <tr>
- <th class="colFirst" scope="col">Interface</th>
- <th class="colLast" scope="col">Description</th>
- </tr>
-<tr class="altColor">
- <td class="colOne">
- <strong><a href="GroovyPagePlugin.ScaffoldedControllers.Parameters.html" title="class in org/grails/gradle/plugin/views/gsp">
- GroovyPagePlugin.ScaffoldedControllers.Parameters
- </a></strong>
- </td>
- <td></td>
- </tr>
-
- </tbody>
- </table>
- </li>
- </ul>
- </div>
-
-
<div class="summary">
@@ -116,45 +90,45 @@ function windowTitle()
</tr>
<tr class="altColor">
<td class="colOne">
- <strong><a href="GenerateTagLibraryIndexTask.html" title="class in org/grails/gradle/plugin/views/gsp">
- GenerateTagLibraryIndexTask
+ <strong><a href="ScaffoldedPages.html" title="class in org/apache/grails/scaffolding">
+ ScaffoldedPages
</a></strong>
</td>
- <td>Writes the tag library index describing the tag libraries in this project.</td>
+ <td>Expands a scaffolding template into a page, and names the page the build compiles from it so
+ that the runtime resolver can find it.</td>
</tr>
<tr class="altColor">
<td class="colOne">
- <strong><a href="GroovyPageForkCompileTask.html" title="class in org/grails/gradle/plugin/views/gsp">
- GroovyPageForkCompileTask
+ <strong><a href="ScaffoldedPagesGenerator.html" title="class in org/apache/grails/scaffolding">
+ ScaffoldedPagesGenerator
</a></strong>
</td>
- <td>Abstract Gradle task for compiling templates, using GroovyPageForkedCompiler
- This Task is a Forked Java Task that is configurable with fork options provided
- by ViewCompileOptions</td>
+ <td>Expands scaffolding templates into the pages the build compiles, run by the Gradle plugin's
+ <CODE>generateScaffoldedViews</CODE> task in a JVM on the application's own classpath.</td>
</tr>
<tr class="altColor">
<td class="colOne">
- <strong><a href="GroovyPagePlugin.html" title="class in org/grails/gradle/plugin/views/gsp">
- GroovyPagePlugin
+ <strong><a href="ScaffoldedPagesGenerator.Failure.html" title="class in org/apache/grails/scaffolding">
+ ScaffoldedPagesGenerator.Failure
</a></strong>
</td>
- <td>A plugin that adds support for compiling Groovy Server Pages (GSP)</td>
+ <td>A template that could not be expanded for a domain class, and why.</td>
</tr>
<tr class="altColor">
<td class="colOne">
- <strong><a href="GroovyPagePlugin.ScaffoldedControllers.html" title="class in org/grails/gradle/plugin/views/gsp">
- GroovyPagePlugin.ScaffoldedControllers
+ <strong><a href="ScaffoldedPagesGenerator.Page.html" title="class in org/apache/grails/scaffolding">
+ ScaffoldedPagesGenerator.Page
</a></strong>
</td>
- <td>Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</td>
+ <td>A page written: the templates directory it was expanded from, and its path under the output directory.</td>
</tr>
<tr class="altColor">
<td class="colOne">
- <strong><a href="TagLibraryIndexFiles.html" title="class in org/grails/gradle/plugin/views/gsp">
- TagLibraryIndexFiles
+ <strong><a href="ScaffoldedPagesGenerator.Result.html" title="class in org/apache/grails/scaffolding">
+ ScaffoldedPagesGenerator.Result
</a></strong>
</td>
- <td>The files the tag library index is made of, as the build writes them.</td>
+ <td>What a generation did.</td>
</tr>
</tbody>
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html b/docs/snapshot/api/org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html
index 52f8e34ac4b..43f765320c6 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html
+++ b/docs/snapshot/api/org/grails/gradle/plugin/scaffolding/GenerateScaffoldedViewsTask.html
@@ -70,11 +70,11 @@ if (location.href.indexOf('is-external=true') == -1) {
<div>
<ul class="subNavList">
<li>Summary: </li>
- Nested Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested <li><a href="#field_summary">Field</a></li> <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ <li><a href="#field_detail">Field</a></li> <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
@@ -106,23 +106,40 @@ if (location.href.indexOf('is-external=true') == -1) {
abstract class GenerateScaffoldedViewsTask
extends <a href='../../../../../org.gradle.api.DefaultTask.html'>DefaultTask</a></pre>
- <p> Writes the views a scaffolded controller would otherwise generate on its first request.
-
- <p>Scaffolding expands a template into GSP source and compiles the result, and until now it did
- both when the view was first asked for. That costs the first request on the JVM, and a native
- image cannot do it at all: defining a class at runtime is exactly what an ahead-of-time image
- gives up. Expanding the templates here instead lets the ordinary GSP compiler precompile the
- result, so at runtime the views are found rather than produced.</p>
-
- <p>Only naming is substituted -- the templates read <CODE>className</CODE>, <CODE>propertyName</CODE>,
- <CODE>fullName</CODE> and <CODE>packageName</CODE>, and defer everything else about the domain class to the
- field tag libraries at render time. That is why this needs no GORM, no application context and no
- loading of application classes: the controllers are read with ASM and the domain class name is
- enough. The qualified name is bound too, so that a template can declare the type of its model in a
- form that resolves from the generated page.</p>
-
- <p>A view the application already declares is never overwritten, which keeps the existing
- precedence: a hand-written <CODE>grails-app/views</CODE> page wins over a scaffolded one.</p> <DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
+ <p> Expands the scaffolding templates at build time, so the pages a scaffolded controller renders are
+ compiled with the rest of the application instead of on the request that first asks for them.
+
+ <p>Scaffolding expands a template into GSP source and compiles the result. At runtime that costs
+ the first request on the JVM, and a native image cannot do it at all: defining a class at runtime
+ is exactly what an ahead-of-time image gives up. The pages written here are compiled by the
+ ordinary GSP compiler instead.</p>
+
+ <p>They are written under <CODE>grails-scaffolded/<domain class>/</CODE>, a directory no controller's
+ views resolve from, and each is named for its template and a digest of the template and the model
+ it was expanded with. The runtime resolver decides which page a request gets exactly as it would
+ without them - a view the application or a plugin declares, a namespace-specific template, a
+ template override - and only where it would expand a template does it look for the page expanded
+ from the same template and model. So a page cannot shadow a declared view, and a template this
+ task did not expand finds nothing and is expanded at runtime as before.</p>
+
+ <p>For each scaffolded controller - the application's own, and those plugins on the runtime
+ classpath provide - this expands for its domain class every copy of each template the resolver
+ could choose for it:</p>
+ <ul>
+ <li>Which copy the resolver finds is not something the build can know. On the JVM it looks
+ beside the controller's class first, then at a plugin that overrides the templates, then along
+ the classpath; a native image keeps no class files to look beside, and goes by the order of the
+ classpath it was built from. So every distinct copy is expanded - the application's own, from
+ <CODE>src/main/templates/scaffolding</CODE> or its resources, and each on the runtime classpath -
+ and whichever the resolver chooses has its page.</li>
+ <li>A namespace-specific template such as <CODE>admin/show.gsp</CODE> can only be chosen for a
+ controller with a namespace, so it is expanded only for the domain classes such controllers
+ scaffold.</li>
+ </ul>
+
+ <p>No application class is loaded: the controllers are read with ASM, and the pages are expanded
+ and named by <CODE>org.apache.grails.scaffolding.ScaffoldedPagesGenerator</CODE>, run in a JVM on the
+ application's runtime classpath, from the same code and the same Groovy as the resolver's.</p> <DL><DT><B>Since:</B></DT><DD>8.0</DD></DL></p>
</li>
</ul>
@@ -138,9 +155,57 @@ extends <a href='../../../../../org.gradle.api.DefaultTask.html'>DefaultTask</a>
<!-- =========== FIELD SUMMARY =========== -->
+ <ul class="blockList">
+ <li class="blockList"><a name="field_summary"><!-- --></a>
+ <h3>Field Summary</h3>
+ <ul class="blockList">
+ <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum constants summary table">
+ <caption><span>Fields</span><span class="tabEnd"> </span></caption>
+ <tr>
+ <th class="colFirst" scope="col">Modifiers</th>
+ <th class="colLast" scope="col">Name</th>
+ <th class="colLast" scope="col">Description</th>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code><strong>static int</strong></code> </td>
+ <td class="colLast"><code><a href="#GENERATOR_PROTOCOL">GENERATOR_PROTOCOL</a></code></td>
+ <td class="colLast">The version of the exchange with the generator this task speaks - the command line, and the
+ files handed over and back - as the generator declares its own in a <CODE>PROTOCOL</CODE>
+ constant. </td>
+ </tr>
+
+ </table>
+ </ul>
+ </li>
+
+ </ul>
+
<!-- =========== PROPERTY SUMMARY =========== -->
+ <ul class="blockList">
+ <li class="blockList"><a name="property_summary"><!-- --></a>
+ <h3>Properties Summary</h3>
+ <ul class="blockList">
+ <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Properties Summary table, listing nested classes, and an explanation">
+ <caption><span>Properties</span><span class="tabEnd"> </span></caption>
+ <tr>
+ <th class="colFirst" scope="col">Type</th>
+ <th class="colLast" scope="col">Name and description</th>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code><strong>static java.lang.String</strong></code> </td>
+ <td class="colLast"><code><a href="#GENERATOR">GENERATOR</a></code><br>The class that expands and names the pages, from the application's scaffolding library.</td>
+ </tr>
+
+ </table>
+ </ul>
+ </li>
+
+ </ul>
+
<!-- =========== ELEMENT SUMMARY =========== -->
@@ -192,44 +257,67 @@ extends <a href='../../../../../org.gradle.api.DefaultTask.html'>DefaultTask</a>
<tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></code></td>
- <td class="colLast"><code><strong><a href="#getApplicationViews()">getApplicationViews</a></strong>()</code><br>The application's own views; anything declared here is left alone.</td>
+ <td class="colLast"><code><strong><a href="#getClassesDirs()">getClassesDirs</a></strong>()</code><br>Compiled application classes, searched for scaffolded controllers.</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code></code></td>
- <td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></code></td>
- <td class="colLast"><code><strong><a href="#getClassesDirs()">getClassesDirs</a></strong>()</code><br>Compiled application classes, searched for scaffolded controllers.</td>
+ <td class="colLast"><code>abstract <a href='../../../../../org.gradle.process.ExecOperations.html'>ExecOperations</a></code></td>
+ <td class="colLast"><code><strong><a href="#getExecOperations()">getExecOperations</a></strong>()</code><br></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code></code></td>
- <td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></code></td>
- <td class="colLast"><code><strong><a href="#getControllerClasspath()">getControllerClasspath</a></strong>()</code><br>The classpath a controller's superclasses are read from, to find a namespace it inherits.
+ <td class="colLast"><code>java.lang.String</code></td>
+ <td class="colLast"><code><strong><a href="#getFileSeparator()">getFileSeparator</a></strong>()</code><br>The separator the pages were expanded under. </td>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>abstract Property<JavaLauncher></code></td>
+ <td class="colLast"><code><strong><a href="#getJavaLauncher()">getJavaLauncher</a></strong>()</code><br>The Java the pages are expanded with; the build's own when not set.</td>
+ </tr>
+
+ <tr class="rowColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.RegularFileProperty.html'>RegularFileProperty</a></code></td>
+ <td class="colLast"><code><strong><a href="#getOptionalPages()">getOptionalPages</a></strong>()</code><br>Lists, a line apiece, the pages expanded from templates a dependency supplies, as paths under
+ <a href='#getOutputDirectory()'>getOutputDirectory()</a>, for the page compilation to leave out any that do not compile.
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.DirectoryProperty.html'>DirectoryProperty</a></code></td>
- <td class="colLast"><code><strong><a href="#getOutputDirectory()">getOutputDirectory</a></strong>()</code><br>Where the generated views are written.</td>
+ <td class="colLast"><code><strong><a href="#getOutputDirectory()">getOutputDirectory</a></strong>()</code><br>Where the pages are written, as a tree to be compiled with the application's views.</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></code></td>
- <td class="colLast"><code><strong><a href="#getTemplateClasspath()">getTemplateClasspath</a></strong>()</code><br>The classpath the scaffolding templates are read from. </td>
+ <td class="colLast"><code><strong><a href="#getPackagedTemplates()">getPackagedTemplates</a></strong>()</code><br>The application's templates as it packages them, each at
+ <CODE>META-INF/templates/scaffolding/<template path></CODE> in its tree: normally the output of
+ <CODE>processResources</CODE>, filtered to them. </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code></code></td>
- <td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></code></td>
- <td class="colLast"><code><strong><a href="#getTemplateOverrides()">getTemplateOverrides</a></strong>()</code><br>Application template overrides, normally <CODE>src/main/templates/scaffolding</CODE>.</td>
+ <td class="colLast"><code>abstract Property<java.lang.String></code></td>
+ <td class="colLast"><code><strong><a href="#getPageEncoding()">getPageEncoding</a></strong>()</code><br>The encoding the pages are written in, which must be the one they are compiled with, so that
+ a page reads back as it was expanded. </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></code></td>
- <td class="colLast"><code><strong><a href="#getViewClasspath()">getViewClasspath</a></strong>()</code><br>Dependency views, including plugins used only at runtime.</td>
+ <td class="colLast"><code><strong><a href="#getRuntimeClasspath()">getRuntimeClasspath</a></strong>()</code><br>The application's runtime classpath. </td>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></code></td>
+ <td class="colLast"><code><strong><a href="#getTemplateOverrides()">getTemplateOverrides</a></strong>()</code><br>The application's own templates, as trees rooted at the template directory: normally
+ <CODE>src/main/templates/scaffolding</CODE>. </td>
</tr>
</table>
@@ -248,8 +336,47 @@ extends <a href='../../../../../org.gradle.api.DefaultTask.html'>DefaultTask</a>
+ <!-- =========== FIELD DETAIL =========== -->
+ <ul class="blockList">
+ <li class="blockList"><a name="field_detail">
+ <!-- -->
+ </a>
+ <h3>Field Detail</h3>
+
+ <a name="GENERATOR_PROTOCOL"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>public static final int <strong>GENERATOR_PROTOCOL</strong></h4>
+ <p> The version of the exchange with the generator this task speaks - the command line, and the
+ files handed over and back - as the generator declares its own in a <CODE>PROTOCOL</CODE>
+ constant. The two ship apart, the generator in grails-scaffolding and this in the Gradle plugin,
+ so a build can pair one version with another; this reads the generator's before running it.</p>
+ </li>
+ </ul>
+
+ </li>
+ </ul>
+
+ <!-- =========== PROPERTY DETAIL =========== -->
+ <ul class="blockList">
+ <li class="blockList"><a name="prop_detail">
+ <!-- -->
+ </a>
+ <h3>Property Detail</h3>
+
+ <a name="GENERATOR"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>static final java.lang.String <strong>GENERATOR</strong></h4>
+ <p>The class that expands and names the pages, from the application's scaffolding library.</p>
+ </li>
+ </ul>
+
+ </li>
+ </ul>
+
@@ -290,29 +417,48 @@ extends <a href='../../../../../org.gradle.api.DefaultTask.html'>DefaultTask</a>
</li>
</ul>
- <a name="getApplicationViews()"><!-- --></a>
+ <a name="getClassesDirs()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>@org.gradle.api.tasks.InputFiles<br>@org.gradle.api.tasks.PathSensitive(value: PathSensitivity.RELATIVE)<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getClassesDirs</strong>()</h4>
+ <p>Compiled application classes, searched for scaffolded controllers.</p>
+ </li>
+ </ul>
+
+ <a name="getExecOperations()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>@javax.inject.Inject<br>abstract <a href='../../../../../org.gradle.process.ExecOperations.html'>ExecOperations</a> <strong>getExecOperations</strong>()</h4>
+ <p></p>
+ </li>
+ </ul>
+
+ <a name="getFileSeparator()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@org.gradle.api.tasks.InputFiles<br>@java.util.Optional<br>@org.gradle.api.tasks.PathSensitive(value: PathSensitivity.RELATIVE)<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getApplicationViews</strong>()</h4>
- <p>The application's own views; anything declared here is left alone.</p>
+ <h4>@org.gradle.api.tasks.Input<br>java.lang.String <strong>getFileSeparator</strong>()</h4>
+ <p> The separator the pages were expanded under. A template that mentions <CODE>packagePath</CODE>
+ expands differently on Windows, so pages built on one platform are not taken from the build
+ cache for another.</p>
</li>
</ul>
- <a name="getClassesDirs()"><!-- --></a>
+ <a name="getJavaLauncher()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@org.gradle.api.tasks.InputFiles<br>@org.gradle.api.tasks.PathSensitive(value: PathSensitivity.RELATIVE)<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getClassesDirs</strong>()</h4>
- <p>Compiled application classes, searched for scaffolded controllers.</p>
+ <h4>@org.gradle.api.tasks.Nested<br>@java.util.Optional<br>abstract Property<JavaLauncher> <strong>getJavaLauncher</strong>()</h4>
+ <p>The Java the pages are expanded with; the build's own when not set.</p>
</li>
</ul>
- <a name="getControllerClasspath()"><!-- --></a>
+ <a name="getOptionalPages()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@org.gradle.api.tasks.Classpath<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getControllerClasspath</strong>()</h4>
- <p> The classpath a controller's superclasses are read from, to find a namespace it inherits.
- Kept apart from <a href='#getTemplateClasspath()'>getTemplateClasspath()</a> so that narrowing where templates are read
- from cannot quietly stop inherited namespaces being seen.</p>
+ <h4>@org.gradle.api.tasks.OutputFile<br>abstract <a href='../../../../../org.gradle.api.file.RegularFileProperty.html'>RegularFileProperty</a> <strong>getOptionalPages</strong>()</h4>
+ <p> Lists, a line apiece, the pages expanded from templates a dependency supplies, as paths under
+ <a href='#getOutputDirectory()'>getOutputDirectory()</a>, for the page compilation to leave out any that do not compile.
+ A page expanded from a template of the application's own is not listed, so it has to compile,
+ as a view does.</p>
</li>
</ul>
@@ -320,32 +466,49 @@ extends <a href='../../../../../org.gradle.api.DefaultTask.html'>DefaultTask</a>
<ul class="blockListLast">
<li class="blockList">
<h4>@org.gradle.api.tasks.OutputDirectory<br>abstract <a href='../../../../../org.gradle.api.file.DirectoryProperty.html'>DirectoryProperty</a> <strong>getOutputDirectory</strong>()</h4>
- <p>Where the generated views are written.</p>
+ <p>Where the pages are written, as a tree to be compiled with the application's views.</p>
</li>
</ul>
- <a name="getTemplateClasspath()"><!-- --></a>
+ <a name="getPackagedTemplates()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@org.gradle.api.tasks.Classpath<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getTemplateClasspath</strong>()</h4>
- <p> The classpath the scaffolding templates are read from. The application's own
- <CODE>src/main/templates/scaffolding</CODE> takes precedence, matching the runtime lookup.</p>
+ <h4>@org.gradle.api.tasks.InputFiles<br>@java.util.Optional<br>@org.gradle.api.tasks.PathSensitive(value: PathSensitivity.RELATIVE)<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getPackagedTemplates</strong>()</h4>
+ <p> The application's templates as it packages them, each at
+ <CODE>META-INF/templates/scaffolding/<template path></CODE> in its tree: normally the output of
+ <CODE>processResources</CODE>, filtered to them. That is where the resolver finds them beside the
+ application's controllers, however the build put them there - from
+ <CODE>src/main/templates</CODE>, from the resources, or from a task that feeds them.</p>
</li>
</ul>
- <a name="getTemplateOverrides()"><!-- --></a>
+ <a name="getPageEncoding()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@org.gradle.api.tasks.InputFiles<br>@java.util.Optional<br>@org.gradle.api.tasks.PathSensitive(value: PathSensitivity.RELATIVE)<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getTemplateOverrides</strong>()</h4>
- <p>Application template overrides, normally <CODE>src/main/templates/scaffolding</CODE>.</p>
+ <h4>@org.gradle.api.tasks.Input<br>abstract Property<java.lang.String> <strong>getPageEncoding</strong>()</h4>
+ <p> The encoding the pages are written in, which must be the one they are compiled with, so that
+ a page reads back as it was expanded. Normally <CODE>compileGroovyPages</CODE>' encoding.</p>
+ </li>
+ </ul>
+
+ <a name="getRuntimeClasspath()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>@org.gradle.api.tasks.Classpath<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getRuntimeClasspath</strong>()</h4>
+ <p> The application's runtime classpath. The templates and the plugins' controllers are read from
+ it, as the running application reads them, and the pages are expanded on it, by the
+ scaffolding library and the Groovy the application runs with.</p>
</li>
</ul>
- <a name="getViewClasspath()"><!-- --></a>
+ <a name="getTemplateOverrides()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@org.gradle.api.tasks.Classpath<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getViewClasspath</strong>()</h4>
- <p>Dependency views, including plugins used only at runtime.</p>
+ <h4>@org.gradle.api.tasks.InputFiles<br>@java.util.Optional<br>@org.gradle.api.tasks.PathSensitive(value: PathSensitivity.RELATIVE)<br>abstract <a href='../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getTemplateOverrides</strong>()</h4>
+ <p> The application's own templates, as trees rooted at the template directory: normally
+ <CODE>src/main/templates/scaffolding</CODE>. A template's path within its tree is its path as the
+ resolver asks for it, so <CODE>admin/show.gsp</CODE> is the <CODE>show</CODE> template of the
+ <CODE>admin</CODE> namespace.</p>
</li>
</ul>
@@ -383,11 +546,11 @@ extends <a href='../../../../../org.gradle.api.DefaultTask.html'>DefaultTask</a>
<div>
<ul class="subNavList">
<li>Summary: </li>
- Nested Field <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested <li><a href="#field_summary">Field</a></li> <li><a href="#property_summary">Property</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
- Field <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
+ <li><a href="#field_detail">Field</a></li> <li><a href="#prop_detail">Property</a></li> <li><a href="#constructor_detail">Constructor</a></li> <li><a href="#method_detail">Method</a></li>
</ul>
</div>
<p><!-- Matomo -->
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/scaffolding/package-summary.html b/docs/snapshot/api/org/grails/gradle/plugin/scaffolding/package-summary.html
index 2b58c14082d..44b4cad294b 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/scaffolding/package-summary.html
+++ b/docs/snapshot/api/org/grails/gradle/plugin/scaffolding/package-summary.html
@@ -94,7 +94,8 @@ function windowTitle()
GenerateScaffoldedViewsTask
</a></strong>
</td>
- <td>Writes the views a scaffolded controller would otherwise generate on its first request.</td>
+ <td>Expands the scaffolding templates at build time, so the pages a scaffolded controller renders are
+ compiled with the rest of the application instead of on the request that first asks for them.</td>
</tr>
</tbody>
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html
index 57bedf041e9..540a80916dd 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html
+++ b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPageForkCompileTask.html
@@ -172,10 +172,23 @@ extends <a href='../../../../../../org.gradle.api.tasks.compile.AbstractCompile.
</tr>
<tr class="altColor">
+ <td class="colFirst"><code><strong><a href='../../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></strong></code> </td>
+ <td class="colLast"><code><a href="#generatedViews">generatedViews</a></code><br>Directories of pages the build generated, compiled in the same compilation as the source, each
+ page named by its path under the directory holding it, as though it were in the source, where a
+ page at the same path takes precedence. </td>
+ </tr>
+
+ <tr class="rowColor">
<td class="colFirst"><code><strong><a href='../../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></strong></code> </td>
<td class="colLast"><code><a href="#grailsConfigurationPaths">grailsConfigurationPaths</a></code><br></td>
</tr>
+ <tr class="altColor">
+ <td class="colFirst"><code><strong><a href='../../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></strong></code> </td>
+ <td class="colLast"><code><a href="#optionalPages">optionalPages</a></code><br>Files that each name, one per line, pages of the source that are optional, as paths relative
+ to it. </td>
+ </tr>
+
<tr class="rowColor">
<td class="colFirst"><code><strong>Property<java.lang.String></strong></code> </td>
<td class="colLast"><code><a href="#packageName">packageName</a></code><br></td>
@@ -193,7 +206,7 @@ extends <a href='../../../../../../org.gradle.api.tasks.compile.AbstractCompile.
<tr class="altColor">
<td class="colFirst"><code><strong><a href='../../../../../../org.gradle.api.file.DirectoryProperty.html'>DirectoryProperty</a></strong></code> </td>
- <td class="colLast"><code><a href="#srcDir">srcDir</a></code><br></td>
+ <td class="colLast"><code><a href="#srcDir">srcDir</a></code><br>The directory of the pages, which the compiler names them under. </td>
</tr>
<tr class="rowColor">
@@ -358,6 +371,18 @@ extends <a href='../../../../../../org.gradle.api.tasks.compile.AbstractCompile.
</li>
</ul>
+ <a name="generatedViews"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>@org.gradle.api.tasks.Internal<br>final <a href='../../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>generatedViews</strong></h4>
+ <p> Directories of pages the build generated, compiled in the same compilation as the source, each
+ page named by its path under the directory holding it, as though it were in the source, where a
+ page at the same path takes precedence. Part of <a href='#getSource()'>getSource()</a>, so a project whose only
+ pages are generated compiles them. One compilation rather than two, because each would write a
+ <CODE>gsp/views.properties</CODE> and an archive keeps only the first.</p>
+ </li>
+ </ul>
+
<a name="grailsConfigurationPaths"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
@@ -366,6 +391,17 @@ extends <a href='../../../../../../org.gradle.api.tasks.compile.AbstractCompile.
</li>
</ul>
+ <a name="optionalPages"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>@org.gradle.api.tasks.InputFiles<br>@java.util.Optional<br>@org.gradle.api.tasks.PathSensitive(value: PathSensitivity.RELATIVE)<br>final <a href='../../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>optionalPages</strong></h4>
+ <p> Files that each name, one per line, pages of the source that are optional, as paths relative
+ to it. An optional page that does not compile is left out with a warning rather than failing
+ the build: a page generated from a template a dependency supplies is an optimisation, and
+ without it the page is produced when it is first rendered.</p>
+ </li>
+ </ul>
+
<a name="packageName"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
@@ -393,8 +429,11 @@ extends <a href='../../../../../../org.gradle.api.tasks.compile.AbstractCompile.
<a name="srcDir"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
- <h4>@org.gradle.api.tasks.InputDirectory<br>@org.gradle.api.tasks.PathSensitive(value: PathSensitivity.RELATIVE)<br>final <a href='../../../../../../org.gradle.api.file.DirectoryProperty.html'>DirectoryProperty</a> <strong>srcDir</strong></h4>
- <p></p>
+ <h4>@org.gradle.api.tasks.Internal<br>final <a href='../../../../../../org.gradle.api.file.DirectoryProperty.html'>DirectoryProperty</a> <strong>srcDir</strong></h4>
+ <p> The directory of the pages, which the compiler names them under. Internal rather than an input
+ directory: its pages are fingerprinted as part of <a href='#getSource()'>getSource()</a>, and it need not exist -
+ a project whose only pages are generated, a plugin that scaffolds controllers and has no views
+ of its own, has none, and an input directory that does not exist fails validation.</p>
</li>
</ul>
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html
deleted file mode 100644
index 443639ca5ce..00000000000
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters.html
+++ /dev/null
@@ -1,259 +0,0 @@
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- **************************************************************** -->
-<!-- * PLEASE KEEP COMPLICATED EXPRESSIONS OUT OF THESE TEMPLATES, * -->
-<!-- * i.e. only iterate & print data where possible. Thanks, Jez. * -->
-<!-- **************************************************************** -->
-
-<html>
-<head>
- <!-- Generated by groovydoc (5.1.3) -->
- <title>GroovyPagePlugin.ScaffoldedControllers.Parameters (Grails 8.0.0-SNAPSHOT)</title>
-
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="shortcut icon">
- <link href="../../../../../../groovy.ico" type="image/x-icon" rel="icon">
- <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-
-<body class="center">
-<script type="text/javascript"><!--
-if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GroovyPagePlugin.ScaffoldedControllers.Parameters (Grails 8.0.0-SNAPSHOT)";
-}
-//-->
-</script>
-<noscript>
- <div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar_top">
- <!-- -->
-</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
- <!-- -->
-</a>
- <ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
- <li><a href="package-summary.html">Package</a></li>
- <li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
- </ul>
-</div>
-
-<div class="subNav">
- <div>
- <ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.Parameters.html" target="_top">No Frames</a></li>
- </ul>
- </div>
- <div>
- <ul class="subNavList">
- <li>Summary: </li>
- Nested Field <li><a href="#method_summary">Method</a></li>
- </ul>
- <ul class="subNavList">
- <li> | Detail: </li>
- Field <li><a href="#method_detail">Method</a></li>
- </ul>
- </div>
- <a name="skip-navbar_top">
- <!-- -->
- </a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-
- <div class="subTitle">Package: <strong>org.grails.gradle.plugin.views.gsp</strong></div>
-
- <h2 title="[Groovy] Interface GroovyPagePlugin.ScaffoldedControllers.Parameters" class="title">[Groovy] Interface GroovyPagePlugin.ScaffoldedControllers.Parameters</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><ul class="inheritance"></ul></li><li>org.gradle.api.provider.ValueSourceParameters
-</ul>
-<div class="description">
- <ul class="blockList">
- <li class="blockList">
-
- <dl>
- <dt>All Superinterfaces:</dt>
- <dd><a href='../../../../../../org.gradle.api.provider.ValueSourceParameters.html'>ValueSourceParameters</a></dd>
- </dl>
- <!-- todo: direct known subclasses -->
- <hr>
-
-<pre>static interface GroovyPagePlugin.ScaffoldedControllers.Parameters
-extends <a href='../../../../../../org.gradle.api.provider.ValueSourceParameters.html'>ValueSourceParameters</a></pre>
-
- </li>
- </ul>
-</div>
-
-<div class="summary">
- <ul class="blockList">
- <li class="blockList">
- <!-- =========== NESTED CLASS SUMMARY =========== -->
-
-
- <!-- =========== ENUM CONSTANT SUMMARY =========== -->
-
- <!-- =========== FIELD SUMMARY =========== -->
-
-
- <!-- =========== PROPERTY SUMMARY =========== -->
-
-
- <!-- =========== ELEMENT SUMMARY =========== -->
-
-
-
-
-
- <!-- ========== METHOD SUMMARY =========== -->
- <ul class="blockList">
-
- <li class="blockList"><a name="method_summary"><!-- --></a>
- <h3>Methods Summary</h3>
- <ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Methods Summary table">
- <caption><span>Methods</span><span class="tabEnd"> </span></caption>
- <tr>
- <th class="colFirst" scope="col">Type Params</th>
- <th class="colLast" scope="col">Return Type</th>
- <th class="colLast" scope="col">Name and description</th>
- </tr>
-
- <tr class="altColor">
- <td class="colFirst"><code></code></td>
- <td class="colLast"><code>abstract <a href='../../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a></code></td>
- <td class="colLast"><code><strong><a href="#getControllers()">getControllers</a></strong>()</code><br></td>
- </tr>
-
- </table>
- </ul>
- </li>
-
- </ul>
-
- </li>
- </ul>
-</div>
-
-<div class="details">
- <ul class="blockList">
- <li class="blockList">
-
-
-
-
-
-
-
-
-
-
-
-
- <!-- =========== METHOD DETAIL =========== -->
- <ul class="blockList">
- <li class="blockList"><a name="method_detail">
- <!-- -->
- </a>
- <h3>Method Detail</h3>
-
- <a name="getControllers()"><!-- --></a>
- <ul class="blockListLast">
- <li class="blockList">
- <h4>abstract <a href='../../../../../../org.gradle.api.file.ConfigurableFileCollection.html'>ConfigurableFileCollection</a> <strong>getControllers</strong>()</h4>
- <p></p>
- </li>
- </ul>
-
- </li>
- </ul>
-
- </li>
- </ul>
-</div>
-
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar_bottom">
- <!-- -->
-</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
- <!-- -->
-</a>
- <ul class="navList" title="Navigation">
- <li><a href="../../../../../../overview-summary.html">Overview</a></li>
- <li><a href="package-summary.html">Package</a></li>
- <li class="navBarCell1Rev">Class</li>
- <li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
- <li><a href="../../../../../../index-all.html">Index</a></li>
- <li><a href="../../../../../../help-doc.html">Help</a></li>
- </ul>
-</div>
-
-<div class="subNav">
- <div>
- <ul class="navList">
- <li><a href="../../../../../../index.html?org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.Parameters" target="_top">Frames</a></li>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.Parameters.html" target="_top">No Frames</a></li>
- </ul>
- </div>
- <div>
- <ul class="subNavList">
- <li>Summary: </li>
- Nested Field <li><a href="#method_summary">Method</a></li>
- </ul>
- <ul class="subNavList">
- <li> | Detail: </li>
- Field <li><a href="#method_detail">Method</a></li>
- </ul>
- </div>
- <p><!-- 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 --></p>
- <a name="skip-navbar_bottom">
- <!-- -->
- </a>
- </div>
-</div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html
index 884e17c5989..7261831efa4 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html
+++ b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.html
@@ -70,7 +70,7 @@ if (location.href.indexOf('is-external=true') == -1) {
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> <li><a href="#field_summary">Field</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested <li><a href="#field_summary">Field</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
@@ -122,29 +122,6 @@ implements Plugin<Project></pre>
<li class="blockList">
<!-- =========== NESTED CLASS SUMMARY =========== -->
- <ul class="blockList">
- <li class="blockList"><a name="nested_summary"><!-- --></a>
- <h3>Nested Class Summary</h3>
- <ul class="blockList">
- <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
- <caption><span>Nested classes</span><span class="tabEnd"> </span></caption>
- <tr>
- <th class="colFirst" scope="col">Modifiers</th>
- <th class="colLast" scope="col">Name</th>
- <th class="colLast" scope="col">Description</th>
- </tr>
-
- <tr class="altColor">
- <td class="colFirst"><code><strong>static class</strong></code> </td>
- <td class="colLast"><code><a href='../../../../../../org/grails/gradle/plugin/views/gsp/GroovyPagePlugin.ScaffoldedControllers.html'>GroovyPagePlugin.ScaffoldedControllers</a></code></td>
- <td class="colLast">Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</td>
- </tr>
-
- </table>
- </ul>
- </li>
- </ul>
-
<!-- =========== ENUM CONSTANT SUMMARY =========== -->
@@ -238,13 +215,6 @@ implements Plugin<Project></pre>
<td class="colLast"><code><strong><a href="#resolveClassesDirs(org.gradle.api.tasks.SourceSetOutput, org.gradle.api.Project)">resolveClassesDirs</a></strong>(<a href='../../../../../../org.gradle.api.tasks.SourceSetOutput.html'>SourceSetOutput</a> output, <a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</code><br></td>
</tr>
- <tr class="rowColor">
- <td class="colFirst"><code></code></td>
- <td class="colLast"><code>protected Provider<java.lang.Boolean></code></td>
- <td class="colLast"><code><strong><a href="#scaffoldsAnyController(org.gradle.api.Project)">scaffoldsAnyController</a></strong>(<a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</code><br>Whether any controller in this project is scaffolded, which decides whether the views are
- staged before they are compiled. </td>
- </tr>
-
</table>
</ul>
</li>
@@ -291,7 +261,8 @@ implements Plugin<Project></pre>
<li class="blockList">
<h4>public static final java.lang.String <strong>VIEWS_SERVER_PATH</strong></h4>
<p> The server path application views are compiled under, and so the prefix of every key in a
- compiled-view index. GenerateScaffoldedViewsTask matches plugin index keys against it.</p>
+ compiled-view index. Scaffolded pages are compiled under it too, where the scaffolding
+ resolver looks for them.</p>
</li>
</ul>
@@ -356,27 +327,6 @@ implements Plugin<Project></pre>
</li>
</ul>
- <a name="scaffoldsAnyController(org.gradle.api.Project)"><!-- --></a>
- <ul class="blockListLast">
- <li class="blockList">
- <h4>protected Provider<java.lang.Boolean> <strong>scaffoldsAnyController</strong>(<a href='../../../../../../org.gradle.api.Project.html'>Project</a> project)</h4>
- <p> Whether any controller in this project is scaffolded, which decides whether the views are
- staged before they are compiled. The answer is needed while the build is being configured,
- before anything has been compiled, so it is read from the sources.
-
- <p>Read through a ValueSource rather than by opening the files here. Gradle re-runs a
- value source on every build and invalidates the configuration cache when its answer changes,
- so a controller that becomes scaffolded rebuilds the graph that generates its views. Read
- directly, the answer would be an undeclared input: settled once, cached, and wrong from then
- on.</p>
-
- <p>The match is deliberately loose. GenerateScaffoldedViewsTask reads the real
- annotation from the compiled class, so a false positive here costs a staging copy and a
- generation task that writes nothing -- while a false negative costs a view that is missing
- from the artifact, found by whoever opens that page.</p></p>
- </li>
- </ul>
-
</li>
</ul>
@@ -411,7 +361,7 @@ implements Plugin<Project></pre>
<div>
<ul class="subNavList">
<li>Summary: </li>
- <li><a href="#nested_summary">Nested</a></li> <li><a href="#field_summary">Field</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
+ Nested <li><a href="#field_summary">Field</a></li> <li><a href="#constructor_summary">Constructor</a></li> <li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li> | Detail: </li>
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-frame.html b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-frame.html
index 1351a001684..ef82970ce73 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-frame.html
+++ b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-frame.html
@@ -38,20 +38,12 @@
-<div class="indexContainer">
- <h2>Interfaces</h2>
- <ul>
- <li><a href="GroovyPagePlugin.ScaffoldedControllers.Parameters.html" title="interface in org.grails.gradle.plugin.views.gsp" target="classFrame"><em>GroovyPagePlugin.ScaffoldedControllers.Parameters</em></a></li>
- </ul>
-</div>
-
-
<div class="indexContainer">
<h2>Classes</h2>
<ul>
- <li><a href="GenerateTagLibraryIndexTask.html" title="class in org.grails.gradle.plugin.views.gsp" target="classFrame">GenerateTagLibraryIndexTask</a></li><li><a href="GroovyPageForkCompileTask.html" title="class in org.grails.gradle.plugin.views.gsp" target="classFrame">GroovyPageForkCompileTask</a></li><li><a href="GroovyPagePlugin.html" title="class in org.grails.gradle.plugin.views.gsp" target="classFrame">GroovyPagePlugin</a></li><li><a href="GroovyPagePlugin.ScaffoldedContr [...]
+ <li><a href="GenerateTagLibraryIndexTask.html" title="class in org.grails.gradle.plugin.views.gsp" target="classFrame">GenerateTagLibraryIndexTask</a></li><li><a href="GroovyPageForkCompileTask.html" title="class in org.grails.gradle.plugin.views.gsp" target="classFrame">GroovyPageForkCompileTask</a></li><li><a href="GroovyPagePlugin.html" title="class in org.grails.gradle.plugin.views.gsp" target="classFrame">GroovyPagePlugin</a></li><li><a href="TagLibraryIndexFiles.html" title [...]
</ul>
</div>
diff --git a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-summary.html b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-summary.html
index 77169d0aa48..8a722db8ec3 100644
--- a/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-summary.html
+++ b/docs/snapshot/api/org/grails/gradle/plugin/views/gsp/package-summary.html
@@ -76,32 +76,6 @@ function windowTitle()
<div class="contentContainer">
- <div class="summary">
- <ul class="blockList">
- <li class="blockList">
- <table border="0" cellpadding="3" cellspacing="0" summary="Interface Summary">
- <caption><span>Interface Summary</span><span class="tabEnd"> </span></caption>
- <tbody>
- <tr>
- <th class="colFirst" scope="col">Interface</th>
- <th class="colLast" scope="col">Description</th>
- </tr>
-<tr class="altColor">
- <td class="colOne">
- <strong><a href="GroovyPagePlugin.ScaffoldedControllers.Parameters.html" title="class in org/grails/gradle/plugin/views/gsp">
- GroovyPagePlugin.ScaffoldedControllers.Parameters
- </a></strong>
- </td>
- <td></td>
- </tr>
-
- </tbody>
- </table>
- </li>
- </ul>
- </div>
-
-
<div class="summary">
@@ -140,14 +114,6 @@ function windowTitle()
</td>
<td>A plugin that adds support for compiling Groovy Server Pages (GSP)</td>
</tr>
-<tr class="altColor">
- <td class="colOne">
- <strong><a href="GroovyPagePlugin.ScaffoldedControllers.html" title="class in org/grails/gradle/plugin/views/gsp">
- GroovyPagePlugin.ScaffoldedControllers
- </a></strong>
- </td>
- <td>Reads the controller sources for the mark of a scaffolded one, as a tracked build input.</td>
- </tr>
<tr class="altColor">
<td class="colOne">
<strong><a href="TagLibraryIndexFiles.html" title="class in org/grails/gradle/plugin/views/gsp">
diff --git a/docs/snapshot/api/org/grails/gsp/compiler/GroovyPageCompiler.html b/docs/snapshot/api/org/grails/gsp/compiler/GroovyPageCompiler.html
index 5f86159a690..95f1f1c9356 100644
--- a/docs/snapshot/api/org/grails/gsp/compiler/GroovyPageCompiler.html
+++ b/docs/snapshot/api/org/grails/gsp/compiler/GroovyPageCompiler.html
@@ -173,37 +173,56 @@ extends java.lang.Object</pre>
<td class="colLast"><code><a href="#generatedGroovyPagesDirectory">generatedGroovyPagesDirectory</a></code><br></td>
</tr>
+ <tr class="rowColor">
+ <td class="colFirst"><code><strong>java.util.List<java.io.File></strong></code> </td>
+ <td class="colLast"><code><a href="#generatedViewsDirs">generatedViewsDirs</a></code><br>Directories of pages the build generated, compiled with those under <a href='#viewsDir'>viewsDir</a> in the
+ same compilation: a page among <a href='#srcFiles'>srcFiles</a> under one of them is compiled, registered and
+ named by its path under that directory, as though it were under <CODE>viewsDir</CODE>. </td>
+ </tr>
+
+ <tr class="altColor">
+ <td class="colFirst"><code><strong>java.util.Map<java.lang.String, java.lang.String></strong></code> </td>
+ <td class="colLast"><code><a href="#leftOut">leftOut</a></code><br>The optional pages left out because they did not compile, each with the reason.</td>
+ </tr>
+
<tr class="rowColor">
<td class="colFirst"><code><strong><a href='../../../../org/grails/gsp/compiler/transform/GroovyPageInjectionOperation.html'>GroovyPageInjectionOperation</a></strong></code> </td>
<td class="colLast"><code><a href="#operation">operation</a></code><br></td>
</tr>
<tr class="altColor">
+ <td class="colFirst"><code><strong>java.util.Set<java.lang.String></strong></code> </td>
+ <td class="colLast"><code><a href="#optionalPages">optionalPages</a></code><br>Pages, by their paths under <a href='#viewsDir'>viewsDir</a> or the generated directory holding them, that
+ may be left out: one of these that does not compile is left out with a warning instead of
+ failing the compilation.</td>
+ </tr>
+
+ <tr class="rowColor">
<td class="colFirst"><code><strong>java.lang.String</strong></code> </td>
<td class="colLast"><code><a href="#packagePrefix">packagePrefix</a></code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code><strong>java.util.List<java.io.File></strong></code> </td>
<td class="colLast"><code><a href="#srcFiles">srcFiles</a></code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code><strong>java.io.File</strong></code> </td>
<td class="colLast"><code><a href="#targetDir">targetDir</a></code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code><strong>java.util.concurrent.ExecutorService</strong></code> </td>
<td class="colLast"><code><a href="#threadPool">threadPool</a></code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code><strong>java.lang.String</strong></code> </td>
<td class="colLast"><code><a href="#viewPrefix">viewPrefix</a></code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code><strong>java.io.File</strong></code> </td>
<td class="colLast"><code><a href="#viewsDir">viewsDir</a></code><br></td>
</tr>
@@ -391,6 +410,25 @@ extends java.lang.Object</pre>
</li>
</ul>
+ <a name="generatedViewsDirs"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>java.util.List<java.io.File> <strong>generatedViewsDirs</strong></h4>
+ <p> Directories of pages the build generated, compiled with those under <a href='#viewsDir'>viewsDir</a> in the
+ same compilation: a page among <a href='#srcFiles'>srcFiles</a> under one of them is compiled, registered and
+ named by its path under that directory, as though it were under <CODE>viewsDir</CODE>. A page
+ under <CODE>viewsDir</CODE> at the same path takes precedence, and the generated one is left out.</p>
+ </li>
+ </ul>
+
+ <a name="leftOut"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>final java.util.Map<java.lang.String, java.lang.String> <strong>leftOut</strong></h4>
+ <p>The optional pages left out because they did not compile, each with the reason.</p>
+ </li>
+ </ul>
+
<a name="operation"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
@@ -399,6 +437,16 @@ extends java.lang.Object</pre>
</li>
</ul>
+ <a name="optionalPages"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>java.util.Set<java.lang.String> <strong>optionalPages</strong></h4>
+ <p> Pages, by their paths under <a href='#viewsDir'>viewsDir</a> or the generated directory holding them, that
+ may be left out: one of these that does not compile is left out with a warning instead of
+ failing the compilation.</p>
+ </li>
+ </ul>
+
<a name="packagePrefix"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
diff --git a/docs/snapshot/api/org/grails/gsp/io/DefaultGroovyPageLocator.html b/docs/snapshot/api/org/grails/gsp/io/DefaultGroovyPageLocator.html
index 9d848e5d564..d8b545f6b50 100644
--- a/docs/snapshot/api/org/grails/gsp/io/DefaultGroovyPageLocator.html
+++ b/docs/snapshot/api/org/grails/gsp/io/DefaultGroovyPageLocator.html
@@ -317,88 +317,94 @@ implements <a href='../../../../org/grails/gsp/io/GroovyPageLocator.html'>Groovy
<tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public boolean</code></td>
- <td class="colLast"><code><strong><a href="#isReloadEnabled()">isReloadEnabled</a></strong>()</code><br></td>
+ <td class="colLast"><code><strong><a href="#isPrecompiledAvailable()">isPrecompiledAvailable</a></strong>()</code><br>Whether the pages compiled at build time should be used.</td>
</tr>
<tr class="altColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>public boolean</code></td>
+ <td class="colLast"><code><strong><a href="#isReloadEnabled()">isReloadEnabled</a></strong>()</code><br></td>
+ </tr>
+
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#removePrecompiledPage(org.grails.gsp.io.GroovyPageCompiledScriptSource)">removePrecompiledPage</a></strong>(<a href='../../../../org/grails/gsp/io/GroovyPageCompiledScriptSource.html'>GroovyPageCompiledScriptSource</a> scriptSource)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected java.lang.String</code></td>
<td class="colLast"><code><strong><a href="#removePrefix(java.lang.String, java.lang.String)">removePrefix</a></strong>(java.lang.String uri, java.lang.String prefix)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected java.lang.String</code></td>
<td class="colLast"><code><strong><a href="#removeViewLocationPrefixes(java.lang.String)">removeViewLocationPrefixes</a></strong>(java.lang.String uri)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected java.lang.String</code></td>
<td class="colLast"><code><strong><a href="#resolveContextPath(java.lang.String, java.lang.String, org.grails.taglib.TemplateVariableBinding)">resolveContextPath</a></strong>(java.lang.String pluginName, java.lang.String uri, <a href='../../../../org/grails/taglib/TemplateVariableBinding.html'>TemplateVariableBinding</a> binding)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected java.lang.String</code></td>
<td class="colLast"><code><strong><a href="#resolveContextPath(java.lang.String, java.lang.String, org.grails.taglib.TemplateVariableBinding, boolean)">resolveContextPath</a></strong>(java.lang.String pluginName, java.lang.String uri, <a href='../../../../org/grails/taglib/TemplateVariableBinding.html'>TemplateVariableBinding</a> binding, boolean forceCamelCase)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected java.lang.String</code></td>
<td class="colLast"><code><strong><a href="#resolvePluginViewPath(java.lang.String, grails.plugins.GrailsPlugin)">resolvePluginViewPath</a></strong>(java.lang.String uri, <a href='../../../../grails/plugins/GrailsPlugin.html'>GrailsPlugin</a> plugin)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected java.util.List<java.lang.String></code></td>
<td class="colLast"><code><strong><a href="#resolveSearchPaths(java.lang.String)">resolveSearchPaths</a></strong>(java.lang.String uri)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected <a href='../../../../org/grails/gsp/io/GroovyPageScriptSource.html'>GroovyPageScriptSource</a></code></td>
<td class="colLast"><code><strong><a href="#resolveViewInBinaryPlugin(org.grails.plugins.BinaryGrailsPlugin, java.lang.String)">resolveViewInBinaryPlugin</a></strong>(<a href='../../../../org/grails/plugins/BinaryGrailsPlugin.html'>BinaryGrailsPlugin</a> binaryPlugin, java.lang.String uri)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/core/io/Resource.html' title='Resource'>Resource</a></code></td>
<td class="colLast"><code><strong><a href="#run()">run</a></strong>()</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setApplicationContext(org.springframework.context.ApplicationContext)">setApplicationContext</a></strong>(<a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/context/ApplicationContext.html' title='ApplicationContext'>ApplicationContext</a> applicationContext)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setPluginManager(grails.plugins.GrailsPluginManager)">setPluginManager</a></strong>(<a href='../../../../grails/plugins/GrailsPluginManager.html'>GrailsPluginManager</a> pluginManager)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setPrecompiledGspMap(Map)">setPrecompiledGspMap</a></strong>(java.util.Map<java.lang.String, java.lang.String> precompiledGspMap)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setReloadEnabled(boolean)">setReloadEnabled</a></strong>(boolean reloadEnabled)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setResourceLoader(org.springframework.core.io.ResourceLoader)">setResourceLoader</a></strong>(<a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/core/io/ResourceLoader.html' title='ResourceLoader'>ResourceLoader</a> resourceLoader)</code><br></td>
@@ -627,6 +633,22 @@ implements <a href='../../../../org/grails/gsp/io/GroovyPageLocator.html'>Groovy
</li>
</ul>
+ <a name="isPrecompiledAvailable()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>public boolean <strong>isPrecompiledAvailable</strong>()</h4>
+ <p> Whether the pages compiled at build time should be used.
+
+ <p>They are skipped in development so that editing a page takes effect without a restart, and
+ that is decided by whether the application looks like a project on disk. An ahead-of-time
+ image can look like one -- it is a single executable that may be run from anywhere, including
+ the directory it was built in -- but it cannot compile a page at run time, because it cannot
+ define a class at all. Reading the sources there renders nothing, so the compiled pages are
+ used whatever the surroundings suggest.</p>
+ <DL><DT><B>Returns:</B></DT><DD>whether a page is looked up among the pages compiled at build time</DD></DL></p>
+ </li>
+ </ul>
+
<a name="isReloadEnabled()"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
diff --git a/docs/snapshot/api/org/grails/web/gsp/io/CachingGrailsConventionGroovyPageLocator.html b/docs/snapshot/api/org/grails/web/gsp/io/CachingGrailsConventionGroovyPageLocator.html
index c8d5667a5d9..fc1c1e9d25b 100644
--- a/docs/snapshot/api/org/grails/web/gsp/io/CachingGrailsConventionGroovyPageLocator.html
+++ b/docs/snapshot/api/org/grails/web/gsp/io/CachingGrailsConventionGroovyPageLocator.html
@@ -251,7 +251,7 @@ extends <a href='../../../../../org/grails/web/gsp/io/GrailsConventionGroovyPage
</tr>
<tr class="altColor">
<td class="colFirst"><code>class <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html'>DefaultGroovyPageLocator</a></code></td>
- <td class="colLast"><code><a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#addResourceLoader(org.springframework.core.io.ResourceLoader)'>addResourceLoader</a>, <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#createGroovyPageCompiledScriptSource(java.lang.String, java.lang.String, Class)'>createGroovyPageCompiledScriptSource</a>, <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#findBinaryScr [...]
+ <td class="colLast"><code><a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#addResourceLoader(org.springframework.core.io.ResourceLoader)'>addResourceLoader</a>, <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#createGroovyPageCompiledScriptSource(java.lang.String, java.lang.String, Class)'>createGroovyPageCompiledScriptSource</a>, <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#findBinaryScr [...]
</tr>
</table>
</ul>
diff --git a/docs/snapshot/api/org/grails/web/gsp/io/GrailsConventionGroovyPageLocator.html b/docs/snapshot/api/org/grails/web/gsp/io/GrailsConventionGroovyPageLocator.html
index 3c8b4ae4f41..67f05fc1f84 100644
--- a/docs/snapshot/api/org/grails/web/gsp/io/GrailsConventionGroovyPageLocator.html
+++ b/docs/snapshot/api/org/grails/web/gsp/io/GrailsConventionGroovyPageLocator.html
@@ -302,7 +302,7 @@ implements <a href='../../../../../grails/core/support/GrailsApplicationAware.ht
<tr class="altColor">
<td class="colFirst"><code>class <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html'>DefaultGroovyPageLocator</a></code></td>
- <td class="colLast"><code><a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#addResourceLoader(org.springframework.core.io.ResourceLoader)'>addResourceLoader</a>, <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#createGroovyPageCompiledScriptSource(java.lang.String, java.lang.String, Class)'>createGroovyPageCompiledScriptSource</a>, <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#findBinaryScr [...]
+ <td class="colLast"><code><a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#addResourceLoader(org.springframework.core.io.ResourceLoader)'>addResourceLoader</a>, <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#createGroovyPageCompiledScriptSource(java.lang.String, java.lang.String, Class)'>createGroovyPageCompiledScriptSource</a>, <a href='../../../../../org/grails/gsp/io/DefaultGroovyPageLocator.html#findBinaryScr [...]
</tr>
</table>
</ul>
diff --git a/docs/snapshot/api/org/grails/web/pages/GroovyPageForkedCompiler.html b/docs/snapshot/api/org/grails/web/pages/GroovyPageForkedCompiler.html
index 6d41c1cae02..310200c9218 100644
--- a/docs/snapshot/api/org/grails/web/pages/GroovyPageForkedCompiler.html
+++ b/docs/snapshot/api/org/grails/web/pages/GroovyPageForkedCompiler.html
@@ -241,12 +241,18 @@ extends java.lang.Object</pre>
</tr>
<tr class="altColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>static java.util.List<java.io.File></code></td>
+ <td class="colLast"><code><strong><a href="#generatedViewDirectories()">generatedViewDirectories</a></strong>()</code><br>The directories of generated pages the build asks to be compiled with the source, those that exist.</td>
+ </tr>
+
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>static void</code></td>
<td class="colLast"><code><strong><a href="#main(java.lang.String)">main</a></strong>(java.lang.String[] args)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>static void</code></td>
<td class="colLast"><code><strong><a href="#run(java.lang.String)">run</a></strong>(java.lang.String[] args)</code><br></td>
@@ -418,6 +424,14 @@ extends java.lang.Object</pre>
</li>
</ul>
+ <a name="generatedViewDirectories()"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>static java.util.List<java.io.File> <strong>generatedViewDirectories</strong>()</h4>
+ <p>The directories of generated pages the build asks to be compiled with the source, those that exist.</p>
+ </li>
+ </ul>
+
<a name="main(java.lang.String)"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
diff --git a/docs/snapshot/api/org/grails/web/servlet/view/GroovyPageViewResolver.html b/docs/snapshot/api/org/grails/web/servlet/view/GroovyPageViewResolver.html
index eb5c9c9f0ad..0618038d959 100644
--- a/docs/snapshot/api/org/grails/web/servlet/view/GroovyPageViewResolver.html
+++ b/docs/snapshot/api/org/grails/web/servlet/view/GroovyPageViewResolver.html
@@ -263,58 +263,64 @@ implements <a href='../../../../../org/grails/web/servlet/view/GrailsViewResolve
<tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a></code></td>
- <td class="colLast"><code><strong><a href="#createJstlView(java.lang.String)">createJstlView</a></strong>(java.lang.String viewName)</code><br></td>
+ <td class="colLast"><code><strong><a href="#createGroovyPageView(java.lang.String, org.springframework.scripting.ScriptSource)">createGroovyPageView</a></strong>(java.lang.String gspView, <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/scripting/ScriptSource.html' title='ScriptSource'>ScriptSource</a> scriptSource)</code><br>Creates the view that renders a located page.</td>
</tr>
<tr class="rowColor">
+ <td class="colFirst"><code></code></td>
+ <td class="colLast"><code>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a></code></td>
+ <td class="colLast"><code><strong><a href="#createJstlView(java.lang.String)">createJstlView</a></strong>(java.lang.String viewName)</code><br></td>
+ </tr>
+
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public long</code></td>
<td class="colLast"><code><strong><a href="#getCacheTimeout()">getCacheTimeout</a></strong>()</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public boolean</code></td>
<td class="colLast"><code><strong><a href="#isAllowGrailsViewCaching()">isAllowGrailsViewCaching</a></strong>()</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a></code></td>
<td class="colLast"><code><strong><a href="#loadView(java.lang.String, java.util.Locale)">loadView</a></strong>(java.lang.String viewName, java.util.Locale locale)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>protected java.lang.String</code></td>
<td class="colLast"><code><strong><a href="#resolveCurrentControllerKeyPrefixes(boolean)">resolveCurrentControllerKeyPrefixes</a></strong>(boolean absolute)</code><br> <DL><DT><B>Returns:</B></DT><DD>prefix for cache key that contains current controller's context (currently plugin and namespace)</DD></DL></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setAllowGrailsViewCaching(boolean)">setAllowGrailsViewCaching</a></strong>(boolean allowGrailsViewCaching)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setCacheTimeout(long)">setCacheTimeout</a></strong>(long cacheTimeout)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setGroovyPageLocator(org.grails.web.gsp.io.GrailsConventionGroovyPageLocator)">setGroovyPageLocator</a></strong>(<a href='../../../../../org/grails/web/gsp/io/GrailsConventionGroovyPageLocator.html'>GrailsConventionGroovyPageLocator</a> groovyPageLocator)</code><br></td>
</tr>
- <tr class="altColor">
+ <tr class="rowColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setResolveJspView(boolean)">setResolveJspView</a></strong>(boolean resolveJspView)</code><br></td>
</tr>
- <tr class="rowColor">
+ <tr class="altColor">
<td class="colFirst"><code></code></td>
<td class="colLast"><code>public void</code></td>
<td class="colLast"><code><strong><a href="#setTemplateEngine(org.grails.gsp.GroovyPagesTemplateEngine)">setTemplateEngine</a></strong>(<a href='../../../../../org/grails/gsp/GroovyPagesTemplateEngine.html'>GroovyPagesTemplateEngine</a> templateEngine)</code><br></td>
@@ -471,6 +477,15 @@ implements <a href='../../../../../org/grails/web/servlet/view/GrailsViewResolve
</li>
</ul>
+ <a name="createGroovyPageView(java.lang.String, org.springframework.scripting.ScriptSource)"><!-- --></a>
+ <ul class="blockListLast">
+ <li class="blockList">
+ <h4>protected <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/web/servlet/View.html' title='View'>View</a> <strong>createGroovyPageView</strong>(java.lang.String gspView, <a href='https://docs.spring.io/spring-framework/docs/7.0.9/javadoc-api/org/springframework/scripting/ScriptSource.html' title='ScriptSource'>ScriptSource</a> scriptSource)</h4>
+ <p> Creates the view that renders a located page.
+ <DL><DT><B>Parameters:</B></DT><DD><code>gspView</code> - the URI the page was located by</DD><DD><code>scriptSource</code> - the page</DD></DL><DL><DT><B>Returns:</B></DT><DD>the initialised view</DD></DL></p>
+ </li>
+ </ul>
+
<a name="createJstlView(java.lang.String)"><!-- --></a>
<ul class="blockListLast">
<li class="blockList">
diff --git a/docs/snapshot/api/overview-frame.html b/docs/snapshot/api/overview-frame.html
index 6122bcab4f0..6c974431122 100644
--- a/docs/snapshot/api/overview-frame.html
+++ b/docs/snapshot/api/overview-frame.html
@@ -854,6 +854,9 @@
<li><a href="org/apache/grails/mimetypes/aot/package-frame.html"
target="packageFrame">org.apache.grails.mimetypes.aot</a></li>
+ <li><a href="org/apache/grails/scaffolding/package-frame.html"
+ target="packageFrame">org.apache.grails.scaffolding</a></li>
+
<li><a href="org/apache/grails/scaffolding/aot/package-frame.html"
target="packageFrame">org.apache.grails.scaffolding.aot</a></li>
diff --git a/docs/snapshot/api/overview-summary.html b/docs/snapshot/api/overview-summary.html
index 2fde6e8f8c2..e911de98960 100644
--- a/docs/snapshot/api/overview-summary.html
+++ b/docs/snapshot/api/overview-summary.html
@@ -1723,2707 +1723,2713 @@ if (location.href.indexOf('is-external=true') == -1) {
<tr class="rowColor">
- <td class="colFirst"><a href="org/apache/grails/scaffolding/aot/package-summary.html">org.apache.grails.scaffolding.aot</a></td>
+ <td class="colFirst"><a href="org/apache/grails/scaffolding/package-summary.html">org.apache.grails.scaffolding</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
- <td class="colFirst"><a href="org/apache/grails/testing/cleanup/core/package-summary.html">org.apache.grails.testing.cleanup.core</a></td>
+ <td class="colFirst"><a href="org/apache/grails/scaffolding/aot/package-summary.html">org.apache.grails.scaffolding.aot</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
- <td class="colFirst"><a href="org/apache/grails/testing/cleanup/h2/package-summary.html">org.apache.grails.testing.cleanup.h2</a></td>
+ <td class="colFirst"><a href="org/apache/grails/testing/cleanup/core/package-summary.html">org.apache.grails.testing.cleanup.core</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
- <td class="colFirst"><a href="org/apache/grails/testing/cleanup/postgresql/package-summary.html">org.apache.grails.testing.cleanup.postgresql</a></td>
+ <td class="colFirst"><a href="org/apache/grails/testing/cleanup/h2/package-summary.html">org.apache.grails.testing.cleanup.h2</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
- <td class="colFirst"><a href="org/apache/grails/testing/http/client/package-summary.html">org.apache.grails.testing.http.client</a></td>
+ <td class="colFirst"><a href="org/apache/grails/testing/cleanup/postgresql/package-summary.html">org.apache.grails.testing.cleanup.postgresql</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
- <td class="colFirst"><a href="org/apache/grails/testing/http/client/utils/package-summary.html">org.apache.grails.testing.http.client.utils</a></td>
+ <td class="colFirst"><a href="org/apache/grails/testing/http/client/package-summary.html">org.apache.grails.testing.http.client</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
- <td class="colFirst"><a href="org/apache/grails/testing/latency/package-summary.html">org.apache.grails.testing.latency</a></td>
+ <td class="colFirst"><a href="org/apache/grails/testing/http/client/utils/package-summary.html">org.apache.grails.testing.http.client.utils</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
- <td class="colFirst"><a href="org/apache/grails/testing/mongo/package-summary.html">org.apache.grails.testing.mongo</a></td>
+ <td class="colFirst"><a href="org/apache/grails/testing/latency/package-summary.html">org.apache.grails.testing.latency</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
- <td class="colFirst"><a href="org/apache/grails/testing/redis/package-summary.html">org.apache.grails.testing.redis</a></td>
+ <td class="colFirst"><a href="org/apache/grails/testing/mongo/package-summary.html">org.apache.grails.testing.mongo</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
+ <td class="colFirst"><a href="org/apache/grails/testing/redis/package-summary.html">org.apache.grails.testing.redis</a></td>
+ <td class="colLast"> </td>
+</tr>
+
+
+<tr class="rowColor">
<td class="colFirst"><a href="org/apache/grails/undertow/core/package-summary.html">org.apache.grails.undertow.core</a></td>
<td class="colLast">Reactive and servlet web server implementations backed by Undertow.</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/apache/grails/undertow/core/autoconfigure/package-summary.html">org.apache.grails.undertow.core.autoconfigure</a></td>
<td class="colLast">Classes related to the auto-configuration of a servlet or reactive web server using
Undertow.</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/apache/grails/undertow/core/autoconfigure/actuate/web/server/package-summary.html">org.apache.grails.undertow.core.autoconfigure.actuate.web.server</a></td>
<td class="colLast">Actuator Undertow actuator web concerns.</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/apache/grails/undertow/core/autoconfigure/reactive/package-summary.html">org.apache.grails.undertow.core.autoconfigure.reactive</a></td>
<td class="colLast">Classes related to the auto-configuration of a reactive web server using Undertow.</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/apache/grails/undertow/core/autoconfigure/servlet/package-summary.html">org.apache.grails.undertow.core.autoconfigure.servlet</a></td>
<td class="colLast">Classes related to the auto-configuration of a servlet web server using Undertow.</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/apache/grails/undertow/core/reactive/package-summary.html">org.apache.grails.undertow.core.reactive</a></td>
<td class="colLast">Reactive web server implementation backed by Undertow.</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/apache/grails/undertow/core/servlet/package-summary.html">org.apache.grails.undertow.core.servlet</a></td>
<td class="colLast">Servlet web server implementation backed by Undertow.</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/apache/grails/undertow/plugin/package-summary.html">org.apache.grails.undertow.plugin</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/apache/grails/web/databinding/aot/package-summary.html">org.apache.grails.web.databinding.aot</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/apache/grails/web/layout/package-summary.html">org.apache.grails.web.layout</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/apache/grails/web/mapping/aot/package-summary.html">org.apache.grails.web.mapping.aot</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/async/factory/package-summary.html">org.grails.async.factory</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/async/factory/future/package-summary.html">org.grails.async.factory.future</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/async/factory/gpars/package-summary.html">org.grails.async.factory.gpars</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/async/factory/rxjava/package-summary.html">org.grails.async.factory.rxjava</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/async/factory/rxjava2/package-summary.html">org.grails.async.factory.rxjava2</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/async/factory/rxjava3/package-summary.html">org.grails.async.factory.rxjava3</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/async/transform/internal/package-summary.html">org.grails.async.transform.internal</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/beans/support/package-summary.html">org.grails.beans.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/boot/context/web/package-summary.html">org.grails.boot.context.web</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/boot/internal/package-summary.html">org.grails.boot.internal</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/buffer/package-summary.html">org.grails.buffer</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/build/parsing/package-summary.html">org.grails.build.parsing</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/charsequences/package-summary.html">org.grails.charsequences</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/package-summary.html">org.grails.cli</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/archive/package-summary.html">org.grails.cli.archive</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/boot/package-summary.html">org.grails.cli.boot</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/command/package-summary.html">org.grails.cli.command</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/command/archive/package-summary.html">org.grails.cli.command.archive</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/command/grab/package-summary.html">org.grails.cli.command.grab</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/command/install/package-summary.html">org.grails.cli.command.install</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/command/options/package-summary.html">org.grails.cli.command.options</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/command/run/package-summary.html">org.grails.cli.command.run</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/compiler/package-summary.html">org.grails.cli.compiler</a></td>
<td class="colLast">CLI Groovy compiler integration.</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/compiler/autoconfigure/package-summary.html">org.grails.cli.compiler.autoconfigure</a></td>
<td class="colLast">Classes for auto-configuring the Groovy compiler.</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/compiler/dependencies/package-summary.html">org.grails.cli.compiler.dependencies</a></td>
<td class="colLast">Classes for dependencies used during compilation.</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/compiler/grape/package-summary.html">org.grails.cli.compiler.grape</a></td>
<td class="colLast">CLI Groovy Grape integration.</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/compiler/maven/package-summary.html">org.grails.cli.compiler.maven</a></td>
<td class="colLast">CLI Maven integration.</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/gradle/package-summary.html">org.grails.cli.gradle</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/gradle/cache/package-summary.html">org.grails.cli.gradle.cache</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/gradle/commands/package-summary.html">org.grails.cli.gradle.commands</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/groovy/package-summary.html">org.grails.cli.groovy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/interactive/completers/package-summary.html">org.grails.cli.interactive.completers</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/profile/package-summary.html">org.grails.cli.profile</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/profile/commands/package-summary.html">org.grails.cli.profile.commands</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/profile/commands/events/package-summary.html">org.grails.cli.profile.commands.events</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/profile/commands/factory/package-summary.html">org.grails.cli.profile.commands.factory</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/profile/commands/io/package-summary.html">org.grails.cli.profile.commands.io</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/profile/commands/script/package-summary.html">org.grails.cli.profile.commands.script</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/profile/commands/templates/package-summary.html">org.grails.cli.profile.commands.templates</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/profile/repository/package-summary.html">org.grails.cli.profile.repository</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/profile/steps/package-summary.html">org.grails.cli.profile.steps</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/cli/profile/support/package-summary.html">org.grails.cli.profile.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/cli/util/package-summary.html">org.grails.cli.util</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/commons/package-summary.html">org.grails.commons</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/compiler/package-summary.html">org.grails.compiler</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/compiler/beans/package-summary.html">org.grails.compiler.beans</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/compiler/boot/package-summary.html">org.grails.compiler.boot</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/compiler/gorm/package-summary.html">org.grails.compiler.gorm</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/compiler/injection/package-summary.html">org.grails.compiler.injection</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/compiler/injection/testing/package-summary.html">org.grails.compiler.injection.testing</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/compiler/logging/package-summary.html">org.grails.compiler.logging</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/compiler/scaffolding/package-summary.html">org.grails.compiler.scaffolding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/compiler/web/package-summary.html">org.grails.compiler.web</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/compiler/web/async/package-summary.html">org.grails.compiler.web.async</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/compiler/web/converters/package-summary.html">org.grails.compiler.web.converters</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/compiler/web/taglib/package-summary.html">org.grails.compiler.web.taglib</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/config/package-summary.html">org.grails.config</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/config/yaml/package-summary.html">org.grails.config.yaml</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/core/package-summary.html">org.grails.core</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/core/artefact/package-summary.html">org.grails.core.artefact</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/core/artefact/gsp/package-summary.html">org.grails.core.artefact.gsp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/core/cfg/package-summary.html">org.grails.core.cfg</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/core/exceptions/package-summary.html">org.grails.core.exceptions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/core/gsp/package-summary.html">org.grails.core.gsp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/core/io/package-summary.html">org.grails.core.io</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/core/io/support/package-summary.html">org.grails.core.io.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/core/io/watch/package-summary.html">org.grails.core.io.watch</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/core/lifecycle/package-summary.html">org.grails.core.lifecycle</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/core/support/package-summary.html">org.grails.core.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/core/support/internal/tools/package-summary.html">org.grails.core.support.internal.tools</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/core/util/package-summary.html">org.grails.core.util</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/databinding/package-summary.html">org.grails.databinding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/databinding/bindingsource/package-summary.html">org.grails.databinding.bindingsource</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/databinding/compiler/package-summary.html">org.grails.databinding.compiler</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/databinding/converters/package-summary.html">org.grails.databinding.converters</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/databinding/converters/web/package-summary.html">org.grails.databinding.converters.web</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/databinding/errors/package-summary.html">org.grails.databinding.errors</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/databinding/xml/package-summary.html">org.grails.databinding.xml</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/bson/codecs/package-summary.html">org.grails.datastore.bson.codecs</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/bson/codecs/decoders/package-summary.html">org.grails.datastore.bson.codecs.decoders</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/bson/codecs/encoders/package-summary.html">org.grails.datastore.bson.codecs.encoders</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/bson/codecs/temporal/package-summary.html">org.grails.datastore.bson.codecs.temporal</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/bson/json/package-summary.html">org.grails.datastore.bson.json</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/bson/query/package-summary.html">org.grails.datastore.bson.query</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/package-summary.html">org.grails.datastore.gorm</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/async/package-summary.html">org.grails.datastore.gorm.async</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/async/transform/package-summary.html">org.grails.datastore.gorm.async.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/boot/autoconfigure/package-summary.html">org.grails.datastore.gorm.boot.autoconfigure</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/boot/compiler/package-summary.html">org.grails.datastore.gorm.boot.compiler</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/bootstrap/package-summary.html">org.grails.datastore.gorm.bootstrap</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/bootstrap/support/package-summary.html">org.grails.datastore.gorm.bootstrap.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/events/package-summary.html">org.grails.datastore.gorm.events</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/finders/package-summary.html">org.grails.datastore.gorm.finders</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/internal/package-summary.html">org.grails.datastore.gorm.internal</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/jdbc/package-summary.html">org.grails.datastore.gorm.jdbc</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/jdbc/connections/package-summary.html">org.grails.datastore.gorm.jdbc.connections</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/jdbc/schema/package-summary.html">org.grails.datastore.gorm.jdbc.schema</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/mongo/package-summary.html">org.grails.datastore.gorm.mongo</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/mongo/api/package-summary.html">org.grails.datastore.gorm.mongo.api</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/mongo/extensions/package-summary.html">org.grails.datastore.gorm.mongo.extensions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/mongo/geo/package-summary.html">org.grails.datastore.gorm.mongo.geo</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/mongo/simple/package-summary.html">org.grails.datastore.gorm.mongo.simple</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/mongodb/boot/autoconfigure/package-summary.html">org.grails.datastore.gorm.mongodb.boot.autoconfigure</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/mongodb/springdata/package-summary.html">org.grails.datastore.gorm.mongodb.springdata</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/multitenancy/package-summary.html">org.grails.datastore.gorm.multitenancy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/multitenancy/transform/package-summary.html">org.grails.datastore.gorm.multitenancy.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/package-summary.html">org.grails.datastore.gorm.neo4j</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/api/package-summary.html">org.grails.datastore.gorm.neo4j.api</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/collection/package-summary.html">org.grails.datastore.gorm.neo4j.collection</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/config/package-summary.html">org.grails.datastore.gorm.neo4j.config</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/connections/package-summary.html">org.grails.datastore.gorm.neo4j.connections</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/engine/package-summary.html">org.grails.datastore.gorm.neo4j.engine</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/extensions/package-summary.html">org.grails.datastore.gorm.neo4j.extensions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/identity/package-summary.html">org.grails.datastore.gorm.neo4j.identity</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/mapping/config/package-summary.html">org.grails.datastore.gorm.neo4j.mapping.config</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/mapping/reflect/package-summary.html">org.grails.datastore.gorm.neo4j.mapping.reflect</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/parsers/package-summary.html">org.grails.datastore.gorm.neo4j.parsers</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/proxy/package-summary.html">org.grails.datastore.gorm.neo4j.proxy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/services/implementers/package-summary.html">org.grails.datastore.gorm.neo4j.services.implementers</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/services/transform/package-summary.html">org.grails.datastore.gorm.neo4j.services.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/neo4j/util/package-summary.html">org.grails.datastore.gorm.neo4j.util</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/plugin/support/package-summary.html">org.grails.datastore.gorm.plugin.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/proxy/package-summary.html">org.grails.datastore.gorm.proxy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/query/package-summary.html">org.grails.datastore.gorm.query</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/query/criteria/package-summary.html">org.grails.datastore.gorm.query.criteria</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/query/transform/package-summary.html">org.grails.datastore.gorm.query.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/schemaless/package-summary.html">org.grails.datastore.gorm.schemaless</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/services/package-summary.html">org.grails.datastore.gorm.services</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/services/implementers/package-summary.html">org.grails.datastore.gorm.services.implementers</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/services/transform/package-summary.html">org.grails.datastore.gorm.services.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/support/package-summary.html">org.grails.datastore.gorm.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/timestamp/package-summary.html">org.grails.datastore.gorm.timestamp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/transactions/package-summary.html">org.grails.datastore.gorm.transactions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/transactions/transform/package-summary.html">org.grails.datastore.gorm.transactions.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/transform/package-summary.html">org.grails.datastore.gorm.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/utils/package-summary.html">org.grails.datastore.gorm.utils</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/package-summary.html">org.grails.datastore.gorm.validation</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/constraints/package-summary.html">org.grails.datastore.gorm.validation.constraints</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/constraints/builder/package-summary.html">org.grails.datastore.gorm.validation.constraints.builder</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/constraints/builtin/package-summary.html">org.grails.datastore.gorm.validation.constraints.builtin</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/constraints/eval/package-summary.html">org.grails.datastore.gorm.validation.constraints.eval</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/constraints/factory/package-summary.html">org.grails.datastore.gorm.validation.constraints.factory</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/constraints/registry/package-summary.html">org.grails.datastore.gorm.validation.constraints.registry</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/jakarta/package-summary.html">org.grails.datastore.gorm.validation.jakarta</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/jakarta/services/package-summary.html">org.grails.datastore.gorm.validation.jakarta.services</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/jakarta/services/implementers/package-summary.html">org.grails.datastore.gorm.validation.jakarta.services.implementers</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/listener/package-summary.html">org.grails.datastore.gorm.validation.listener</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/gorm/validation/registry/support/package-summary.html">org.grails.datastore.gorm.validation.registry.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/cache/package-summary.html">org.grails.datastore.mapping.cache</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/cache/exception/package-summary.html">org.grails.datastore.mapping.cache.exception</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/cache/impl/package-summary.html">org.grails.datastore.mapping.cache.impl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/collection/package-summary.html">org.grails.datastore.mapping.collection</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/column/package-summary.html">org.grails.datastore.mapping.column</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/config/package-summary.html">org.grails.datastore.mapping.config</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/config/groovy/package-summary.html">org.grails.datastore.mapping.config.groovy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/config/utils/package-summary.html">org.grails.datastore.mapping.config.utils</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/core/package-summary.html">org.grails.datastore.mapping.core</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/core/connections/package-summary.html">org.grails.datastore.mapping.core.connections</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/core/exceptions/package-summary.html">org.grails.datastore.mapping.core.exceptions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/core/grailsversion/package-summary.html">org.grails.datastore.mapping.core.grailsversion</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/core/impl/package-summary.html">org.grails.datastore.mapping.core.impl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/core/order/package-summary.html">org.grails.datastore.mapping.core.order</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/dirty/checking/package-summary.html">org.grails.datastore.mapping.dirty.checking</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/document/package-summary.html">org.grails.datastore.mapping.document</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/document/config/package-summary.html">org.grails.datastore.mapping.document.config</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/engine/package-summary.html">org.grails.datastore.mapping.engine</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/engine/event/package-summary.html">org.grails.datastore.mapping.engine.event</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/engine/internal/package-summary.html">org.grails.datastore.mapping.engine.internal</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/engine/types/package-summary.html">org.grails.datastore.mapping.engine.types</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/graph/package-summary.html">org.grails.datastore.mapping.graph</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/keyvalue/engine/package-summary.html">org.grails.datastore.mapping.keyvalue.engine</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/keyvalue/mapping/config/package-summary.html">org.grails.datastore.mapping.keyvalue.mapping.config</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/model/package-summary.html">org.grails.datastore.mapping.model</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/model/config/package-summary.html">org.grails.datastore.mapping.model.config</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/model/lifecycle/package-summary.html">org.grails.datastore.mapping.model.lifecycle</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/model/types/package-summary.html">org.grails.datastore.mapping.model.types</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/model/types/conversion/package-summary.html">org.grails.datastore.mapping.model.types.conversion</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/model/types/mapping/package-summary.html">org.grails.datastore.mapping.model.types.mapping</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/mongo/package-summary.html">org.grails.datastore.mapping.mongo</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/mongo/config/package-summary.html">org.grails.datastore.mapping.mongo.config</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/mongo/connections/package-summary.html">org.grails.datastore.mapping.mongo.connections</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/mongo/engine/package-summary.html">org.grails.datastore.mapping.mongo.engine</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/mongo/engine/codecs/package-summary.html">org.grails.datastore.mapping.mongo.engine.codecs</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/mongo/query/package-summary.html">org.grails.datastore.mapping.mongo.query</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/multitenancy/package-summary.html">org.grails.datastore.mapping.multitenancy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/multitenancy/exceptions/package-summary.html">org.grails.datastore.mapping.multitenancy.exceptions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/multitenancy/resolvers/package-summary.html">org.grails.datastore.mapping.multitenancy.resolvers</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/multitenancy/web/package-summary.html">org.grails.datastore.mapping.multitenancy.web</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/proxy/package-summary.html">org.grails.datastore.mapping.proxy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/query/package-summary.html">org.grails.datastore.mapping.query</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/query/api/package-summary.html">org.grails.datastore.mapping.query.api</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/query/criteria/package-summary.html">org.grails.datastore.mapping.query.criteria</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/query/event/package-summary.html">org.grails.datastore.mapping.query.event</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/query/jpa/package-summary.html">org.grails.datastore.mapping.query.jpa</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/query/order/package-summary.html">org.grails.datastore.mapping.query.order</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/query/projections/package-summary.html">org.grails.datastore.mapping.query.projections</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/rdbms/package-summary.html">org.grails.datastore.mapping.rdbms</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/reflect/package-summary.html">org.grails.datastore.mapping.reflect</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/services/package-summary.html">org.grails.datastore.mapping.services</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/simple/package-summary.html">org.grails.datastore.mapping.simple</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/simple/connections/package-summary.html">org.grails.datastore.mapping.simple.connections</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/simple/engine/package-summary.html">org.grails.datastore.mapping.simple.engine</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/simple/query/package-summary.html">org.grails.datastore.mapping.simple.query</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/transactions/package-summary.html">org.grails.datastore.mapping.transactions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/transactions/support/package-summary.html">org.grails.datastore.mapping.transactions.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/validation/package-summary.html">org.grails.datastore.mapping.validation</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/datastore/mapping/web/support/package-summary.html">org.grails.datastore.mapping.web.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/dev/support/package-summary.html">org.grails.dev.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/encoder/package-summary.html">org.grails.encoder</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/encoder/impl/package-summary.html">org.grails.encoder.impl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/events/package-summary.html">org.grails.events</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/events/bus/package-summary.html">org.grails.events.bus</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/events/bus/spring/package-summary.html">org.grails.events.bus.spring</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/events/gorm/package-summary.html">org.grails.events.gorm</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/events/gpars/package-summary.html">org.grails.events.gpars</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/events/registry/package-summary.html">org.grails.events.registry</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/events/rxjava/package-summary.html">org.grails.events.rxjava</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/events/rxjava2/package-summary.html">org.grails.events.rxjava2</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/events/rxjava3/package-summary.html">org.grails.events.rxjava3</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/events/spring/package-summary.html">org.grails.events.spring</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/events/transform/package-summary.html">org.grails.events.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/exceptions/package-summary.html">org.grails.exceptions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/exceptions/reporting/package-summary.html">org.grails.exceptions.reporting</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/package-summary.html">org.grails.gorm.graphql</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/binding/package-summary.html">org.grails.gorm.graphql.binding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/binding/manager/package-summary.html">org.grails.gorm.graphql.binding.manager</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/package-summary.html">org.grails.gorm.graphql.entity</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/arguments/package-summary.html">org.grails.gorm.graphql.entity.arguments</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/dsl/package-summary.html">org.grails.gorm.graphql.entity.dsl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/dsl/helpers/package-summary.html">org.grails.gorm.graphql.entity.dsl.helpers</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/fields/package-summary.html">org.grails.gorm.graphql.entity.fields</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/operations/package-summary.html">org.grails.gorm.graphql.entity.operations</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/property/package-summary.html">org.grails.gorm.graphql.entity.property</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/property/impl/package-summary.html">org.grails.gorm.graphql.entity.property.impl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/entity/property/manager/package-summary.html">org.grails.gorm.graphql.entity.property.manager</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/fetcher/package-summary.html">org.grails.gorm.graphql.fetcher</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/fetcher/context/package-summary.html">org.grails.gorm.graphql.fetcher.context</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/fetcher/impl/package-summary.html">org.grails.gorm.graphql.fetcher.impl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/fetcher/interceptor/package-summary.html">org.grails.gorm.graphql.fetcher.interceptor</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/fetcher/manager/package-summary.html">org.grails.gorm.graphql.fetcher.manager</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/interceptor/package-summary.html">org.grails.gorm.graphql.interceptor</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/interceptor/impl/package-summary.html">org.grails.gorm.graphql.interceptor.impl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/interceptor/manager/package-summary.html">org.grails.gorm.graphql.interceptor.manager</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/plugin/package-summary.html">org.grails.gorm.graphql.plugin</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/plugin/binding/package-summary.html">org.grails.gorm.graphql.plugin.binding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/plugin/testing/package-summary.html">org.grails.gorm.graphql.plugin.testing</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/response/package-summary.html">org.grails.gorm.graphql.response</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/response/delete/package-summary.html">org.grails.gorm.graphql.response.delete</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/response/errors/package-summary.html">org.grails.gorm.graphql.response.errors</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/response/pagination/package-summary.html">org.grails.gorm.graphql.response.pagination</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/testing/package-summary.html">org.grails.gorm.graphql.testing</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/types/package-summary.html">org.grails.gorm.graphql.types</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/types/input/package-summary.html">org.grails.gorm.graphql.types.input</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/types/output/package-summary.html">org.grails.gorm.graphql.types.output</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/types/scalars/package-summary.html">org.grails.gorm.graphql.types.scalars</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/types/scalars/coercing/package-summary.html">org.grails.gorm.graphql.types.scalars.coercing</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gorm/graphql/types/scalars/coercing/jsr310/package-summary.html">org.grails.gorm.graphql.types.scalars.coercing.jsr310</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/bom/package-summary.html">org.grails.gradle.plugin.bom</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/commands/package-summary.html">org.grails.gradle.plugin.commands</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/core/package-summary.html">org.grails.gradle.plugin.core</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/exploded/package-summary.html">org.grails.gradle.plugin.exploded</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/i18n/package-summary.html">org.grails.gradle.plugin.i18n</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/model/package-summary.html">org.grails.gradle.plugin.model</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/profiles/package-summary.html">org.grails.gradle.plugin.profiles</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/profiles/tasks/package-summary.html">org.grails.gradle.plugin.profiles.tasks</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/run/package-summary.html">org.grails.gradle.plugin.run</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/scaffolding/package-summary.html">org.grails.gradle.plugin.scaffolding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/util/package-summary.html">org.grails.gradle.plugin.util</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/views/package-summary.html">org.grails.gradle.plugin.views</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/views/gsp/package-summary.html">org.grails.gradle.plugin.views.gsp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/views/json/package-summary.html">org.grails.gradle.plugin.views.json</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/views/markup/package-summary.html">org.grails.gradle.plugin.views.markup</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gradle/plugin/web/package-summary.html">org.grails.gradle.plugin.web</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gsp/package-summary.html">org.grails.gsp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gsp/compiler/package-summary.html">org.grails.gsp.compiler</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gsp/compiler/tags/package-summary.html">org.grails.gsp.compiler.tags</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gsp/compiler/transform/package-summary.html">org.grails.gsp.compiler.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/gsp/io/package-summary.html">org.grails.gsp.io</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/gsp/jsp/package-summary.html">org.grails.gsp.jsp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/io/support/package-summary.html">org.grails.io.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/io/watch/package-summary.html">org.grails.io.watch</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/package-summary.html">org.grails.orm.hibernate</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/access/package-summary.html">org.grails.orm.hibernate.access</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/cfg/package-summary.html">org.grails.orm.hibernate.cfg</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/cfg/domainbinding/binder/package-summary.html">org.grails.orm.hibernate.cfg.domainbinding.binder</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/cfg/domainbinding/collectionType/package-summary.html">org.grails.orm.hibernate.cfg.domainbinding.collectionType</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/cfg/domainbinding/generator/package-summary.html">org.grails.orm.hibernate.cfg.domainbinding.generator</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/cfg/domainbinding/hibernate/package-summary.html">org.grails.orm.hibernate.cfg.domainbinding.hibernate</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/cfg/domainbinding/secondpass/package-summary.html">org.grails.orm.hibernate.cfg.domainbinding.secondpass</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/cfg/domainbinding/util/package-summary.html">org.grails.orm.hibernate.cfg.domainbinding.util</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/compiler/package-summary.html">org.grails.orm.hibernate.compiler</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/connections/package-summary.html">org.grails.orm.hibernate.connections</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/datasource/package-summary.html">org.grails.orm.hibernate.datasource</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/dirty/package-summary.html">org.grails.orm.hibernate.dirty</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/event/listener/package-summary.html">org.grails.orm.hibernate.event.listener</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/exceptions/package-summary.html">org.grails.orm.hibernate.exceptions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/multitenancy/package-summary.html">org.grails.orm.hibernate.multitenancy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/proxy/package-summary.html">org.grails.orm.hibernate.proxy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/query/package-summary.html">org.grails.orm.hibernate.query</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/support/package-summary.html">org.grails.orm.hibernate.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/orm/hibernate/transaction/package-summary.html">org.grails.orm.hibernate.transaction</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugin/cache/package-summary.html">org.grails.plugin.cache</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugin/cache/compiler/package-summary.html">org.grails.plugin.cache.compiler</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugin/hibernate/support/package-summary.html">org.grails.plugin.hibernate.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/package-summary.html">org.grails.plugins</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/codecs/package-summary.html">org.grails.plugins.codecs</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/converters/package-summary.html">org.grails.plugins.converters</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/converters/api/package-summary.html">org.grails.plugins.converters.api</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/databasemigration/package-summary.html">org.grails.plugins.databasemigration</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/databasemigration/liquibase/package-summary.html">org.grails.plugins.databasemigration.liquibase</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/databinding/package-summary.html">org.grails.plugins.databinding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/datasource/package-summary.html">org.grails.plugins.datasource</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/domain/package-summary.html">org.grails.plugins.domain</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/domain/support/package-summary.html">org.grails.plugins.domain.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/events/package-summary.html">org.grails.plugins.events</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/i18n/package-summary.html">org.grails.plugins.i18n</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/services/package-summary.html">org.grails.plugins.services</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/sitemesh3/package-summary.html">org.grails.plugins.sitemesh3</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/support/package-summary.html">org.grails.plugins.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/testing/package-summary.html">org.grails.plugins.testing</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/package-summary.html">org.grails.plugins.web</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/api/package-summary.html">org.grails.plugins.web.api</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/async/package-summary.html">org.grails.plugins.web.async</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/async/mvc/package-summary.html">org.grails.plugins.web.async.mvc</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/async/spring/package-summary.html">org.grails.plugins.web.async.spring</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/controllers/package-summary.html">org.grails.plugins.web.controllers</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/controllers/api/package-summary.html">org.grails.plugins.web.controllers.api</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/controllers/metaclass/package-summary.html">org.grails.plugins.web.controllers.metaclass</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/interceptors/package-summary.html">org.grails.plugins.web.interceptors</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/mapping/package-summary.html">org.grails.plugins.web.mapping</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/mapping/factory/package-summary.html">org.grails.plugins.web.mapping.factory</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/mime/package-summary.html">org.grails.plugins.web.mime</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/rest/plugin/package-summary.html">org.grails.plugins.web.rest.plugin</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/rest/render/package-summary.html">org.grails.plugins.web.rest.render</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/rest/render/html/package-summary.html">org.grails.plugins.web.rest.render.html</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/rest/render/json/package-summary.html">org.grails.plugins.web.rest.render.json</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/rest/render/xml/package-summary.html">org.grails.plugins.web.rest.render.xml</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/rest/transform/package-summary.html">org.grails.plugins.web.rest.transform</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/servlet/context/package-summary.html">org.grails.plugins.web.servlet.context</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/plugins/web/servlet/mvc/package-summary.html">org.grails.plugins.web.servlet.mvc</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/plugins/web/taglib/package-summary.html">org.grails.plugins.web.taglib</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/scaffolding/package-summary.html">org.grails.scaffolding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/scaffolding/markup/package-summary.html">org.grails.scaffolding.markup</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/scaffolding/model/package-summary.html">org.grails.scaffolding.model</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/scaffolding/model/property/package-summary.html">org.grails.scaffolding.model.property</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/scaffolding/registry/package-summary.html">org.grails.scaffolding.registry</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/scaffolding/registry/input/package-summary.html">org.grails.scaffolding.registry.input</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/scaffolding/registry/output/package-summary.html">org.grails.scaffolding.registry.output</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/spring/package-summary.html">org.grails.spring</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/spring/aop/autoproxy/package-summary.html">org.grails.spring.aop.autoproxy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/spring/beans/package-summary.html">org.grails.spring.beans</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/spring/beans/factory/package-summary.html">org.grails.spring.beans.factory</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/spring/context/package-summary.html">org.grails.spring.context</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/spring/context/annotation/package-summary.html">org.grails.spring.context.annotation</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/spring/context/support/package-summary.html">org.grails.spring.context.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/taglib/package-summary.html">org.grails.taglib</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/taglib/discovery/package-summary.html">org.grails.taglib.discovery</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/taglib/encoder/package-summary.html">org.grails.taglib.encoder</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/taglib/index/package-summary.html">org.grails.taglib.index</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/test/io/package-summary.html">org.grails.test.io</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/test/spock/package-summary.html">org.grails.test.spock</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/test/support/package-summary.html">org.grails.test.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/testing/package-summary.html">org.grails.testing</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/testing/context/junit4/package-summary.html">org.grails.testing.context.junit4</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/testing/gorm/package-summary.html">org.grails.testing.gorm</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/testing/gorm/spock/package-summary.html">org.grails.testing.gorm.spock</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/testing/runtime/support/package-summary.html">org.grails.testing.runtime.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/testing/spock/package-summary.html">org.grails.testing.spock</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/transaction/package-summary.html">org.grails.transaction</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/validation/package-summary.html">org.grails.validation</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/validation/discovery/package-summary.html">org.grails.validation.discovery</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/beans/package-summary.html">org.grails.web.beans</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/binding/package-summary.html">org.grails.web.binding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/config/http/package-summary.html">org.grails.web.config.http</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/context/package-summary.html">org.grails.web.context</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/converters/package-summary.html">org.grails.web.converters</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/converters/configuration/package-summary.html">org.grails.web.converters.configuration</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/converters/exceptions/package-summary.html">org.grails.web.converters.exceptions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/converters/marshaller/package-summary.html">org.grails.web.converters.marshaller</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/converters/marshaller/json/package-summary.html">org.grails.web.converters.marshaller.json</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/converters/marshaller/xml/package-summary.html">org.grails.web.converters.marshaller.xml</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/databinding/package-summary.html">org.grails.web.databinding</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/databinding/bindingsource/package-summary.html">org.grails.web.databinding.bindingsource</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/databinding/converters/package-summary.html">org.grails.web.databinding.converters</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/errors/package-summary.html">org.grails.web.errors</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/filters/package-summary.html">org.grails.web.filters</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/gsp/package-summary.html">org.grails.web.gsp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/gsp/io/package-summary.html">org.grails.web.gsp.io</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/i18n/package-summary.html">org.grails.web.i18n</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/json/package-summary.html">org.grails.web.json</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/json/parser/package-summary.html">org.grails.web.json.parser</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/mapping/package-summary.html">org.grails.web.mapping</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/mapping/mvc/package-summary.html">org.grails.web.mapping.mvc</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/mapping/servlet/package-summary.html">org.grails.web.mapping.servlet</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/mime/package-summary.html">org.grails.web.mime</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/pages/package-summary.html">org.grails.web.pages</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/plugins/support/package-summary.html">org.grails.web.plugins.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/servlet/package-summary.html">org.grails.web.servlet</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/servlet/boostrap/package-summary.html">org.grails.web.servlet.boostrap</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/servlet/context/package-summary.html">org.grails.web.servlet.context</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/servlet/context/support/package-summary.html">org.grails.web.servlet.context.support</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/servlet/mvc/package-summary.html">org.grails.web.servlet.mvc</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/servlet/mvc/exceptions/package-summary.html">org.grails.web.servlet.mvc.exceptions</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/servlet/view/package-summary.html">org.grails.web.servlet.view</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/taglib/package-summary.html">org.grails.web.taglib</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/taglib/encoder/package-summary.html">org.grails.web.taglib.encoder</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/taglib/jsp/package-summary.html">org.grails.web.taglib.jsp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/grails/web/util/package-summary.html">org.grails.web.util</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/grails/web/xml/package-summary.html">org.grails.web.xml</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/hibernate/proxy/package-summary.html">org.hibernate.proxy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/data/mongodb/package-summary.html">org.springframework.data.mongodb</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/access/package-summary.html">org.springframework.security.access</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/security/access/annotation/package-summary.html">org.springframework.security.access.annotation</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/access/expression/method/package-summary.html">org.springframework.security.access.expression.method</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/security/access/intercept/package-summary.html">org.springframework.security.access.intercept</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/access/intercept/aopalliance/package-summary.html">org.springframework.security.access.intercept.aopalliance</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/security/access/method/package-summary.html">org.springframework.security.access.method</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/access/prepost/package-summary.html">org.springframework.security.access.prepost</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/security/access/vote/package-summary.html">org.springframework.security.access.vote</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/acls/package-summary.html">org.springframework.security.acls</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/security/acls/afterinvocation/package-summary.html">org.springframework.security.acls.afterinvocation</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/config/http/package-summary.html">org.springframework.security.config.http</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/security/web/package-summary.html">org.springframework.security.web</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/web/access/package-summary.html">org.springframework.security.web.access</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/security/web/access/channel/package-summary.html">org.springframework.security.web.access.channel</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/web/access/expression/package-summary.html">org.springframework.security.web.access.expression</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="org/springframework/security/web/access/intercept/package-summary.html">org.springframework.security.web.access.intercept</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="org/springframework/security/web/util/matcher/package-summary.html">org.springframework.security.web.util.matcher</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="quartz/package-summary.html">quartz</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="redis/package-summary.html">redis</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="testapp/package-summary.html">testapp</a></td>
<td class="colLast"> </td>
</tr>
diff --git a/docs/snapshot/api/package-list b/docs/snapshot/api/package-list
index 35a6317d01c..45917902eb5 100644
--- a/docs/snapshot/api/package-list
+++ b/docs/snapshot/api/package-list
@@ -271,6 +271,7 @@ org.apache.grails.gsp.aot
org.apache.grails.gsp.taglib
org.apache.grails.gsp.taglib.aot
org.apache.grails.mimetypes.aot
+org.apache.grails.scaffolding
org.apache.grails.scaffolding.aot
org.apache.grails.testing.cleanup.core
org.apache.grails.testing.cleanup.h2
diff --git a/docs/snapshot/grails-data/developer-manual/gettingStarted.html b/docs/snapshot/grails-data/developer-manual/gettingStarted.html
index db85f9f356d..49444f88040 100644
--- a/docs/snapshot/grails-data/developer-manual/gettingStarted.html
+++ b/docs/snapshot/grails-data/developer-manual/gettingStarted.html
@@ -523,7 +523,7 @@ cd grails-core</pre>
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/introduction.html b/docs/snapshot/grails-data/developer-manual/introduction.html
index 79f855e0d85..4635900661a 100644
--- a/docs/snapshot/grails-data/developer-manual/introduction.html
+++ b/docs/snapshot/grails-data/developer-manual/introduction.html
@@ -476,7 +476,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/stepByStep.html b/docs/snapshot/grails-data/developer-manual/stepByStep.html
index e90ae32ec57..11c93006284 100644
--- a/docs/snapshot/grails-data/developer-manual/stepByStep.html
+++ b/docs/snapshot/grails-data/developer-manual/stepByStep.html
@@ -621,7 +621,7 @@ class XyzTestSuite {
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/testing.html b/docs/snapshot/grails-data/developer-manual/testing.html
index 6d0e57c3156..f0511a3004d 100644
--- a/docs/snapshot/grails-data/developer-manual/testing.html
+++ b/docs/snapshot/grails-data/developer-manual/testing.html
@@ -511,7 +511,7 @@ class PagedResultSpec extends GormDatastoreSpec{
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/understandingApi.html b/docs/snapshot/grails-data/developer-manual/understandingApi.html
index 82fa14159a5..300a10839c8 100644
--- a/docs/snapshot/grails-data/developer-manual/understandingApi.html
+++ b/docs/snapshot/grails-data/developer-manual/understandingApi.html
@@ -454,7 +454,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/understandingApi/datastoreBasics.html b/docs/snapshot/grails-data/developer-manual/understandingApi/datastoreBasics.html
index e3f3ebcab23..341234dc429 100644
--- a/docs/snapshot/grails-data/developer-manual/understandingApi/datastoreBasics.html
+++ b/docs/snapshot/grails-data/developer-manual/understandingApi/datastoreBasics.html
@@ -561,7 +561,7 @@ protected Session createSession(PropertyResolver connDetails) {
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/understandingApi/gormApis.html b/docs/snapshot/grails-data/developer-manual/understandingApi/gormApis.html
index 16e6d7de12e..93c5efd964c 100644
--- a/docs/snapshot/grails-data/developer-manual/understandingApi/gormApis.html
+++ b/docs/snapshot/grails-data/developer-manual/understandingApi/gormApis.html
@@ -496,7 +496,7 @@ class Neo4jEntityTraitProvider implements GormEntityTraitProvider {
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/understandingApi/gormEnhancer.html b/docs/snapshot/grails-data/developer-manual/understandingApi/gormEnhancer.html
index 7ce3556f14c..8797cbe16eb 100644
--- a/docs/snapshot/grails-data/developer-manual/understandingApi/gormEnhancer.html
+++ b/docs/snapshot/grails-data/developer-manual/understandingApi/gormEnhancer.html
@@ -488,7 +488,7 @@ enhancer.enhance()</code></pre>
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/understandingApi/implementingCrud.html b/docs/snapshot/grails-data/developer-manual/understandingApi/implementingCrud.html
index d866d7b8f06..323b4425daa 100644
--- a/docs/snapshot/grails-data/developer-manual/understandingApi/implementingCrud.html
+++ b/docs/snapshot/grails-data/developer-manual/understandingApi/implementingCrud.html
@@ -673,7 +673,7 @@ protected void deleteEntry(String family, final Object key, final Object entry)
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/understandingApi/implementingQueries.html b/docs/snapshot/grails-data/developer-manual/understandingApi/implementingQueries.html
index 242ae023a1f..3afb4222ad3 100644
--- a/docs/snapshot/grails-data/developer-manual/understandingApi/implementingQueries.html
+++ b/docs/snapshot/grails-data/developer-manual/understandingApi/implementingQueries.html
@@ -588,7 +588,7 @@ If, for instance, the underlying datastore does not support the calculation of a
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/developer-manual/understandingApi/secondaryIndexes.html b/docs/snapshot/grails-data/developer-manual/understandingApi/secondaryIndexes.html
index 985ef1fb0d1..a49556b8356 100644
--- a/docs/snapshot/grails-data/developer-manual/understandingApi/secondaryIndexes.html
+++ b/docs/snapshot/grails-data/developer-manual/understandingApi/secondaryIndexes.html
@@ -526,7 +526,7 @@ If the underlying datastore supports secondary indexes then it is ok to just ret
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/grails-data/hibernate5/manual/databaseMigration/index.html b/docs/snapshot/grails-data/hibernate5/manual/databaseMigration/index.html
index f09dacd5e1b..1fe1bc55073 100644
--- a/docs/snapshot/grails-data/hibernate5/manual/databaseMigration/index.html
+++ b/docs/snapshot/grails-data/hibernate5/manual/databaseMigration/index.html
@@ -451,7 +451,6 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<li><a href="#gorm">GORM Support</a></li>
<li><a href="#dbdoc">DbDoc Controller</a></li>
<li><a href="#reference">Reference</a></li>
-<li><a href="#ref-rollback-scripts">Rollback Scripts</a></li>
</ul>
</div>
</div>
@@ -2479,9 +2478,8 @@ For the <code>dataSource</code> parameter, if the data source is configured as <
</div>
</div>
</div>
-</div>
-<div class="sect2">
-<h3 id="ref-rollback-scripts">Rollback Scripts</h3>
+<div class="sect3">
+<h4 id="ref-rollback-scripts">Rollback Scripts</h4>
<div class="sect4">
<h5 id="ref-rollback-scripts-dbm-future-rollback-sql">dbm-future-rollback-sql</h5>
<div class="sect5">
@@ -3236,6 +3234,7 @@ For the <code>dataSource</code> parameter, if the data source is configured as <
</div>
</div>
</div>
+</div>
<div class="sect3">
<h4 id="ref-update-scripts">Update Scripts</h4>
<div class="sect4">
diff --git a/docs/snapshot/grails-data/hibernate5/manual/index.html b/docs/snapshot/grails-data/hibernate5/manual/index.html
index bf50effb523..22d408c8ddb 100644
--- a/docs/snapshot/grails-data/hibernate5/manual/index.html
+++ b/docs/snapshot/grails-data/hibernate5/manual/index.html
@@ -571,7 +571,7 @@ table.CodeRay td.code{padding:0 0 0 .75em}
</ul>
</li>
<li><a href="#persistenceBasics">6. Persistence Basics</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_transactional_write_behind">6.1. Transactional Write-Behind</a></li>
<li><a href="#savingAndUpdating">6.2. Saving and Updating</a></li>
<li><a href="#deletingObjects">6.3. Deleting Objects</a></li>
@@ -585,7 +585,7 @@ table.CodeRay td.code{padding:0 0 0 .75em}
</ul>
</li>
<li><a href="#querying">7. Querying with GORM</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_listing_instances">7.1. Listing instances</a></li>
<li><a href="#_retrieval_by_database_identifier">7.2. Retrieval by Database Identifier</a></li>
<li><a href="#finders">7.3. Dynamic Finders</a></li>
@@ -603,7 +603,7 @@ table.CodeRay td.code{padding:0 0 0 .75em}
</ul>
</li>
<li><a href="#programmaticTransactions">9. Programmatic Transactions</a>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_using_the_withtransaction_method">9.1. Using the withTransaction Method</a></li>
<li><a href="#_using_transactionservice">9.2. Using TransactionService</a></li>
</ul>
@@ -664,7 +664,6 @@ table.CodeRay td.code{padding:0 0 0 .75em}
<li><a href="#gorm">15.7. GORM Support</a></li>
<li><a href="#dbdoc">15.8. DbDoc Controller</a></li>
<li><a href="#reference">15.9. Reference</a></li>
-<li><a href="#ref-rollback-scripts">15.10. Rollback Scripts</a></li>
</ul>
</li>
</ul>
@@ -2656,8 +2655,8 @@ author.save()</code></pre>
}</code></pre>
</div>
</div>
-<div class="sect3">
-<h4 id="_transactional_write_behind">6.1. Transactional Write-Behind</h4>
+<div class="sect2">
+<h3 id="_transactional_write_behind">6.1. Transactional Write-Behind</h3>
<div class="paragraph">
<p>A useful feature of Hibernate over direct JDBC calls and even other frameworks is that when you call <a href="../api/org/grails/datastore/gorm/GormEntity.html#save()">save()</a> or <a href="../api/org/grails/datastore/gorm/GormEntity.html#delete()">delete()</a> it does not necessarily perform any SQL operations <strong>at that point</strong>. Hibernate batches up SQL statements and executes them as late as possible, often at the end of the request when flushing and closing the session.</p>
</div>
@@ -2833,8 +2832,7 @@ airport.delete()</code></pre>
<div class="paragraph">
<p>The above examples are called transitive persistence and are controlled via the <code>belongsTo</code> and the cascade policy. If I were to remove <code>belongsTo</code> then the above cascading deletion code <strong>would not work</strong>.</p>
</div>
-<div class="sect4">
-<h5 id="_unidirectional_many_to_one_without_belongsto">Unidirectional Many-To-One without belongsTo</h5>
+<h5 id="_unidirectional_many_to_one_without_belongsto" class="discrete">Unidirectional Many-To-One without belongsTo</h5>
<div class="paragraph">
<p>For example, consider the following domain model:</p>
</div>
@@ -2916,9 +2914,7 @@ a.save()</code></pre>
<div class="paragraph">
<p>The above example will configure the cascade policy to cascade saves and updates, but not deletes.</p>
</div>
-</div>
-<div class="sect4">
-<h5 id="_bidirectional_one_to_many_with_belongsto">Bidirectional one-to-many with belongsTo</h5>
+<h5 id="_bidirectional_one_to_many_with_belongsto" class="discrete">Bidirectional one-to-many with belongsTo</h5>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy"><span class="type">class</span> <span class="class">A</span> { <span class="directive">static</span> hasMany = [<span class="key">bees</span>: B] }</code></pre>
@@ -2935,9 +2931,7 @@ a.save()</code></pre>
<div class="paragraph">
<p>What this means is that whenever an instance of <code>A</code> is saved or updated. So will any instances of <code>B</code>. And, critically, whenever any instance of <code>A</code> is <strong>deleted</strong> so will all the associated instances of <code>B</code>!</p>
</div>
-</div>
-<div class="sect4">
-<h5 id="_unidirectional_one_to_many">Unidirectional One-to-Many</h5>
+<h5 id="_unidirectional_one_to_many" class="discrete">Unidirectional One-to-Many</h5>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy"><span class="type">class</span> <span class="class">A</span> { <span class="directive">static</span> hasMany = [<span class="key">bees</span>: B] }</code></pre>
@@ -2957,9 +2951,7 @@ a.save()</code></pre>
<div class="paragraph">
<p>Only when you define <code>belongsTo</code> in <code>B</code> or alter the cascading strategy of <code>A</code> will deletes be cascaded.</p>
</div>
-</div>
-<div class="sect4">
-<h5 id="_bidirectional_one_to_many_no_belongsto">Bidirectional One-to-Many, no belongsTo</h5>
+<h5 id="_bidirectional_one_to_many_no_belongsto" class="discrete">Bidirectional One-to-Many, no belongsTo</h5>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy"><span class="type">class</span> <span class="class">A</span> { <span class="directive">static</span> hasMany = [<span class="key">bees</span>: B] }</code></pre>
@@ -2986,9 +2978,7 @@ a.save()</code></pre>
}</code></pre>
</div>
</div>
-</div>
-<div class="sect4">
-<h5 id="_unidirectional_many_to_one_with_belongsto">Unidirectional Many-to-One with belongsTo</h5>
+<h5 id="_unidirectional_many_to_one_with_belongsto" class="discrete">Unidirectional Many-to-One with belongsTo</h5>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="groovy"><span class="type">class</span> <span class="class">A</span> { }</code></pre>
@@ -3019,7 +3009,6 @@ a.save()</code></pre>
<p>Note that if you need further control over cascading behaviour, you can use the <a href="#ormdsl">ORM DSL</a>.</p>
</div>
</div>
-</div>
<div class="sect2">
<h3 id="fetching">6.5. Eager and Lazy Fetching</h3>
<div class="paragraph">
@@ -3624,8 +3613,8 @@ airport.properties = params
<div class="paragraph">
<p>However, let’s start with the basics.</p>
</div>
-<div class="sect3">
-<h4 id="_listing_instances">7.1. Listing instances</h4>
+<div class="sect2">
+<h3 id="_listing_instances">7.1. Listing instances</h3>
<div class="paragraph">
<p>Use the <a href="../api/org/grails/datastore/gorm/GormEntity.html#list()">list()</a> method to obtain all instances of a given class:</p>
</div>
@@ -3654,8 +3643,8 @@ airport.properties = params
<p>Here, the <code>sort</code> argument is the name of the domain class property that you wish to sort on, and the <code>order</code> argument is either <code>asc</code> for *asc*ending or <code>desc</code> for *desc*ending.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_retrieval_by_database_identifier">7.2. Retrieval by Database Identifier</h4>
+<div class="sect2">
+<h3 id="_retrieval_by_database_identifier">7.2. Retrieval by Database Identifier</h3>
<div class="paragraph">
<p>The second basic form of retrieval is by database identifier using the <a href="../api/org/grails/datastore/gorm/GormEntity.html#get(java.io.Serializable)">get(id)</a> method:</p>
</div>
@@ -7447,8 +7436,8 @@ These mappings will not work for default unidirectional one-to-many or many-to-m
<div class="paragraph">
<p>However, GORM classes have been enhanced to make this simpler with the <a href="../api/org/grails/datastore/gorm/GormEntity.html#withTransaction(groovy.lang.Closure)">withTransaction(Closure)</a> method. This method has a single parameter, a Closure, which has a single parameter which is a Spring <a href="https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/TransactionStatus.html">TransactionStatus</a> instance.</p>
</div>
-<div class="sect3">
-<h4 id="_using_the_withtransaction_method">9.1. Using the withTransaction Method</h4>
+<div class="sect2">
+<h3 id="_using_the_withtransaction_method">9.1. Using the withTransaction Method</h3>
<div class="paragraph">
<p>Here’s an example of using <code>withTransaction</code> in a controller methods:</p>
</div>
@@ -7498,8 +7487,8 @@ GORM versions prior to 6.0.0 did not roll back transactions for a checked <code>
<p>The <code>withTransaction</code> method deals with the begin/commit/rollback logic for you within the scope of the block.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_using_transactionservice">9.2. Using TransactionService</h4>
+<div class="sect2">
+<h3 id="_using_transactionservice">9.2. Using TransactionService</h3>
<div class="paragraph">
<p>Since GORM 6.1, if you need more flexibility then instead you can instead take advantage of the <a href="../api/grails/gorm/transactions/TransactionService.html">TransactionService</a>, which can be obtained by looking it up from from the <code>HibernateDatastore</code>:</p>
</div>
@@ -12110,9 +12099,8 @@ For the <code>dataSource</code> parameter, if the data source is configured as <
</div>
</div>
</div>
-</div>
-<div class="sect2">
-<h3 id="ref-rollback-scripts">15.10. Rollback Scripts</h3>
+<div class="sect3">
+<h4 id="ref-rollback-scripts">15.9.4. Rollback Scripts</h4>
<div class="sect4">
<h5 id="ref-rollback-scripts-dbm-future-rollback-sql">dbm-future-rollback-sql</h5>
<div class="sect5">
@@ -12867,8 +12855,9 @@ For the <code>dataSource</code> parameter, if the data source is configured as <
</div>
</div>
</div>
+</div>
<div class="sect3">
-<h4 id="ref-update-scripts">15.10.10. Update Scripts</h4>
+<h4 id="ref-update-scripts">15.9.5. Update Scripts</h4>
<div class="sect4">
<h5 id="ref-update-scripts-dbm-previous-changeset-sql">dbm-previous-changeset-sql</h5>
<div class="sect5">
diff --git a/docs/snapshot/grails-data/hibernate5/manual/persistenceBasics.html b/docs/snapshot/grails-data/hibernate5/manual/persistenceBasics.html
index ff968bb2241..ffe96860747 100644
--- a/docs/snapshot/grails-data/hibernate5/manual/persistenceBasics.html
+++ b/docs/snapshot/grails-data/hibernate5/manual/persistenceBasics.html
@@ -441,7 +441,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div id="header">
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_transactional_write_behind">Transactional Write-Behind</a></li>
</ul>
</div>
@@ -473,8 +473,8 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
}</code></pre>
</div>
</div>
-<div class="sect3">
-<h4 id="_transactional_write_behind">Transactional Write-Behind</h4>
+<div class="sect2">
+<h3 id="_transactional_write_behind">Transactional Write-Behind</h3>
<div class="paragraph">
<p>A useful feature of Hibernate over direct JDBC calls and even other frameworks is that when you call <a href="../api/org/grails/datastore/gorm/GormEntity.html#save()">save()</a> or <a href="../api/org/grails/datastore/gorm/GormEntity.html#delete()">delete()</a> it does not necessarily perform any SQL operations <strong>at that point</strong>. Hibernate batches up SQL statements and executes them as late as possible, often at the end of the request when flushing and closing the session.</p>
</div>
diff --git a/docs/snapshot/grails-data/hibernate5/manual/persistenceBasics/cascades.html b/docs/snapshot/grails-data/hibernate5/manual/persistenceBasics/cascades.html
index 1a760d5abd1..3bd6c436251 100644
--- a/docs/snapshot/grails-data/hibernate5/manual/persistenceBasics/cascades.html
+++ b/docs/snapshot/grails-data/hibernate5/manual/persistenceBasics/cascades.html
@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.18">
-<title>Unidirectional Many-To-One without belongsTo</title>
+<title>Untitled</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
@@ -437,18 +437,8 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
-<body class="article toc2 toc-left">
+<body class="article">
<div id="header">
-<div id="toc" class="toc2">
-<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel4">
-<li><a href="#_unidirectional_many_to_one_without_belongsto">Unidirectional Many-To-One without belongsTo</a></li>
-<li><a href="#_bidirectional_one_to_many_with_belongsto">Bidirectional one-to-many with belongsTo</a></li>
-<li><a href="#_unidirectional_one_to_many">Unidirectional One-to-Many</a></li>
-<li><a href="#_bidirectional_one_to_many_no_belongsto">Bidirectional One-to-Many, no belongsTo</a></li>
-<li><a href="#_unidirectional_many_to_one_with_belongsto">Unidirectional Many-to-One with belongsTo</a></li>
-</ul>
-</div>
</div>
<div id="content">
<div class="paragraph">
@@ -502,8 +492,7 @@ airport.delete()</code></pre>
<div class="paragraph">
<p>The above examples are called transitive persistence and are controlled via the <code>belongsTo</code> and the cascade policy. If I were to remove <code>belongsTo</code> then the above cascading deletion code <strong>would not work</strong>.</p>
</div>
-<div class="sect4">
-<h5 id="_unidirectional_many_to_one_without_belongsto">Unidirectional Many-To-One without belongsTo</h5>
+<h5 id="_unidirectional_many_to_one_without_belongsto" class="discrete">Unidirectional Many-To-One without belongsTo</h5>
<div class="paragraph">
<p>For example, consider the following domain model:</p>
</div>
@@ -585,9 +574,7 @@ a.save()</code></pre>
<div class="paragraph">
<p>The above example will configure the cascade policy to cascade saves and updates, but not deletes.</p>
</div>
-</div>
-<div class="sect4">
-<h5 id="_bidirectional_one_to_many_with_belongsto">Bidirectional one-to-many with belongsTo</h5>
+<h5 id="_bidirectional_one_to_many_with_belongsto" class="discrete">Bidirectional one-to-many with belongsTo</h5>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-groovy" data-lang="groovy">class A { static hasMany = [bees: B] }</code></pre>
@@ -604,9 +591,7 @@ a.save()</code></pre>
<div class="paragraph">
<p>What this means is that whenever an instance of <code>A</code> is saved or updated. So will any instances of <code>B</code>. And, critically, whenever any instance of <code>A</code> is <strong>deleted</strong> so will all the associated instances of <code>B</code>!</p>
</div>
-</div>
-<div class="sect4">
-<h5 id="_unidirectional_one_to_many">Unidirectional One-to-Many</h5>
+<h5 id="_unidirectional_one_to_many" class="discrete">Unidirectional One-to-Many</h5>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-groovy" data-lang="groovy">class A { static hasMany = [bees: B] }</code></pre>
@@ -626,9 +611,7 @@ a.save()</code></pre>
<div class="paragraph">
<p>Only when you define <code>belongsTo</code> in <code>B</code> or alter the cascading strategy of <code>A</code> will deletes be cascaded.</p>
</div>
-</div>
-<div class="sect4">
-<h5 id="_bidirectional_one_to_many_no_belongsto">Bidirectional One-to-Many, no belongsTo</h5>
+<h5 id="_bidirectional_one_to_many_no_belongsto" class="discrete">Bidirectional One-to-Many, no belongsTo</h5>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-groovy" data-lang="groovy">class A { static hasMany = [bees: B] }</code></pre>
@@ -655,9 +638,7 @@ a.save()</code></pre>
}</code></pre>
</div>
</div>
-</div>
-<div class="sect4">
-<h5 id="_unidirectional_many_to_one_with_belongsto">Unidirectional Many-to-One with belongsTo</h5>
+<h5 id="_unidirectional_many_to_one_with_belongsto" class="discrete">Unidirectional Many-to-One with belongsTo</h5>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-groovy" data-lang="groovy">class A { }</code></pre>
@@ -688,7 +669,6 @@ a.save()</code></pre>
<p>Note that if you need further control over cascading behaviour, you can use the <a href="#ormdsl">ORM DSL</a>.</p>
</div>
</div>
-</div>
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
diff --git a/docs/snapshot/grails-data/hibernate5/manual/programmaticTransactions.html b/docs/snapshot/grails-data/hibernate5/manual/programmaticTransactions.html
index 4d497e96f3d..c30f9f94538 100644
--- a/docs/snapshot/grails-data/hibernate5/manual/programmaticTransactions.html
+++ b/docs/snapshot/grails-data/hibernate5/manual/programmaticTransactions.html
@@ -441,7 +441,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div id="header">
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_using_the_withtransaction_method">Using the withTransaction Method</a></li>
<li><a href="#_using_transactionservice">Using TransactionService</a></li>
</ul>
@@ -454,8 +454,8 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div class="paragraph">
<p>However, GORM classes have been enhanced to make this simpler with the <a href="../api/org/grails/datastore/gorm/GormEntity.html#withTransaction(groovy.lang.Closure)">withTransaction(Closure)</a> method. This method has a single parameter, a Closure, which has a single parameter which is a Spring <a href="https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/TransactionStatus.html">TransactionStatus</a> instance.</p>
</div>
-<div class="sect3">
-<h4 id="_using_the_withtransaction_method">Using the withTransaction Method</h4>
+<div class="sect2">
+<h3 id="_using_the_withtransaction_method">Using the withTransaction Method</h3>
<div class="paragraph">
<p>Here’s an example of using <code>withTransaction</code> in a controller methods:</p>
</div>
@@ -505,8 +505,8 @@ GORM versions prior to 6.0.0 did not roll back transactions for a checked <code>
<p>The <code>withTransaction</code> method deals with the begin/commit/rollback logic for you within the scope of the block.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_using_transactionservice">Using TransactionService</h4>
+<div class="sect2">
+<h3 id="_using_transactionservice">Using TransactionService</h3>
<div class="paragraph">
<p>Since GORM 6.1, if you need more flexibility then instead you can instead take advantage of the <a href="../api/grails/gorm/transactions/TransactionService.html">TransactionService</a>, which can be obtained by looking it up from from the <code>HibernateDatastore</code>:</p>
</div>
diff --git a/docs/snapshot/grails-data/hibernate5/manual/querying.html b/docs/snapshot/grails-data/hibernate5/manual/querying.html
index 1f20aed34e7..0391f536dca 100644
--- a/docs/snapshot/grails-data/hibernate5/manual/querying.html
+++ b/docs/snapshot/grails-data/hibernate5/manual/querying.html
@@ -441,7 +441,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div id="header">
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel3">
+<ul class="sectlevel2">
<li><a href="#_listing_instances">Listing instances</a></li>
<li><a href="#_retrieval_by_database_identifier">Retrieval by Database Identifier</a></li>
</ul>
@@ -473,8 +473,8 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div class="paragraph">
<p>However, let’s start with the basics.</p>
</div>
-<div class="sect3">
-<h4 id="_listing_instances">Listing instances</h4>
+<div class="sect2">
+<h3 id="_listing_instances">Listing instances</h3>
<div class="paragraph">
<p>Use the <a href="../api/org/grails/datastore/gorm/GormEntity.html#list()">list()</a> method to obtain all instances of a given class:</p>
</div>
@@ -503,8 +503,8 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<p>Here, the <code>sort</code> argument is the name of the domain class property that you wish to sort on, and the <code>order</code> argument is either <code>asc</code> for *asc*ending or <code>desc</code> for *desc*ending.</p>
</div>
</div>
-<div class="sect3">
-<h4 id="_retrieval_by_database_identifier">Retrieval by Database Identifier</h4>
+<div class="sect2">
+<h3 id="_retrieval_by_database_identifier">Retrieval by Database Identifier</h3>
<div class="paragraph">
<p>The second basic form of retrieval is by database identifier using the <a href="../api/org/grails/datastore/gorm/GormEntity.html#get(java.io.Serializable)">get(id)</a> method:</p>
</div>
diff --git a/docs/snapshot/grails-data/whats-new-manual/index.html b/docs/snapshot/grails-data/whats-new-manual/index.html
index 9b2994d1f28..b0cc88ed420 100644
--- a/docs/snapshot/grails-data/whats-new-manual/index.html
+++ b/docs/snapshot/grails-data/whats-new-manual/index.html
@@ -527,7 +527,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
<div id="footer">
<div id="footer-text">
Version 8.0.0-SNAPSHOT<br>
-Last updated 2026-09-25 15:26:34 UTC
+Last updated 2026-09-25 18:17:02 UTC
</div>
</div>
</body>
diff --git a/docs/snapshot/guide/scaffolding.html b/docs/snapshot/guide/scaffolding.html
index f71823481f8..8a918ad87cb 100644
--- a/docs/snapshot/guide/scaffolding.html
+++ b/docs/snapshot/guide/scaffolding.html
@@ -268,10 +268,19 @@ Companies deploy assistants like this [](https://kapa.ai) on docs via [website w
<p>A CRUD interface will also be generated. To access this open <code><a href="http://localhost:8080/book" class="bare">http://localhost:8080/book</a></code> in a browser.</p>
</div>
<div class="paragraph">
-<p>The Gradle plugin expands scaffold templates into <code>build/generated/scaffolded-views</code> with <code>generateScaffoldedViews</code>. Then <code>stageGroovyPages</code> combines them with application views in <code>build/generated/views</code>, and <code>compileGroovyPages</code> compiles them so packaged applications and native images do not need to generate them on the first request. Running <code>compileGroovyPages</code> runs these prerequisite tasks automatically. Handwritte [...]
+<p>When the application is built, the Gradle plugin’s <code>generateScaffoldedViews</code> task expands the scaffolding templates for every domain class a controller scaffolds with <code>@Scaffold</code>, the application’s or a plugin’s, and <code>compileGroovyPages</code> compiles the resulting pages in the same compilation as the application’s views. The templates are expanded by the application’s own scaffolding library and Groovy, in a JVM on its runtime [...]
</div>
<div class="paragraph">
-<p>Controllers that declare or inherit a static <code>namespace</code> keep runtime view generation, so namespace-specific templates and fallback views are resolved as they are during development. If another controller shares the same simple name, its scaffold views also remain runtime-generated to avoid introducing a shared view that changes the namespaced controller’s fallback. Controllers whose view directories collide and scaffold different domains also keep runtime view genera [...]
+<p>The task covers the application’s scaffolded controllers and those its plugins provide. For each, it expands every copy of each template the view resolver could choose: the application’s own, in <code>src/main/templates/scaffolding</code> or <code>src/main/resources/META-INF/templates/scaffolding</code>, and every copy on the runtime classpath. Which copy the resolver finds is not something the build can know: on the JVM it looks beside the controller’s class first, [...]
+</div>
+<div class="paragraph">
+<p>A template of the application’s own is its code, as a view is: if it cannot be expanded for a domain class, or a page expanded from it does not compile, the build fails. A copy a dependency supplies is not, and because every copy is compiled, that includes a copy the application has replaced with its own. If such a copy cannot be expanded, or its page does not compile, the build leaves the page out and says so, and the view is expanded on its first use if that copy is ever chose [...]
+</div>
+<div class="paragraph">
+<p>Compiling the pages does not change which page a request gets. A view the application or a plugin declares still takes precedence, and the resolver chooses the template as it always has; the compiled page is used only when it was expanded from that template for the same domain class. Otherwise the template is expanded on its first use, as before, and the log notes it once. That is the case for a controller using the <code>static scaffold</code> property described below, and for a page [...]
+</div>
+<div class="paragraph">
+<p>A native image cannot expand a template, so there a view with no compiled page fails; where the application has compiled pages of its own, a warning naming the template and the domain class comes first. What to do depends on why the page is missing: declare the controller with <code>@Scaffold</code> rather than <code>static scaffold</code>; for a page the build left out, give the application a template of its own in place of the one it came from: the build output names the page, under [...]
</div>
<div class="paragraph">
<p>If you prefer to keep your domain model in Java and <a href="https://hibernate.org/">mapped with Hibernate</a> you can still use scaffolding, simply import the domain class and use it in the <code>@Scaffold</code> annotation.</p>
diff --git a/docs/snapshot/guide/single.html b/docs/snapshot/guide/single.html
index a27e90b5d23..1670dbbc314 100644
--- a/docs/snapshot/guide/single.html
+++ b/docs/snapshot/guide/single.html
@@ -8707,6 +8707,46 @@ If a reverse proxy in front of the application already sends these headers (for
To disable or customize the Grails defaults, configure <code>grails.security.headers.*</code>; see the Security guide’s HTTP Security Headers section for the full list and the reverse-proxy guidance.</p>
</div>
</div>
+<div class="sect3">
+<h4 id="_74_scaffolded_views_are_compiled_with_the_application">74. Scaffolded Views Are Compiled With the Application</h4>
+<div class="paragraph">
+<p>In Grails 7 a scaffolded view was expanded from its template and compiled on the first request that asked
+for it. In Grails 8, the pages of every controller annotated <code>@Scaffold</code>, the application’s or a plugin’s, are
+expanded at build time by the <code>generateScaffoldedViews</code> task, into <code>build/generated/scaffolded-views</code>, and
+compiled by <code>compileGroovyPages</code> in the same compilation as <code>grails-app/views</code>, under a <code>grails-scaffolded</code>
+directory that no controller’s views resolve from. The resolver still chooses the
+template for a request exactly as before, and serves the page compiled from that template when there is one,
+so a request gets the same page it did. Which pages are compiled, and what happens to the others, is
+described in the <a href="scaffolding.html">Scaffolding</a> guide.</p>
+</div>
+<div class="paragraph">
+<p><code>compileGroovyPages</code> takes the pages as its <code>generatedViews</code>, beside its <code>source</code>, so a build that sets the
+<code>source</code> itself still compiles them. In a project that scaffolds nothing, <code>generateScaffoldedViews</code> writes
+nothing.</p>
+</div>
+<div class="paragraph">
+<p>A scaffolding template of the application’s own, in <code>src/main/templates/scaffolding</code> or packaged under
+<code>META-INF/templates/scaffolding</code>, is now compiled at build time, so one that cannot be expanded, or whose page
+does not compile, fails the build as a view that does not compile does - where in Grails 7 it failed on the
+first request for the view. A page expanded from a template a dependency supplies that cannot be compiled
+does not fail the build: it is left out, the build output names it, and it is expanded when it is first
+rendered, as in Grails 7.</p>
+</div>
+<div class="paragraph">
+<p>The <code>generateScaffoldedViews</code> task of 8.0.0-RC1 wrote pages into the controllers' view directories and had
+<code>templateClasspath</code> and <code>applicationViews</code> properties. Both are gone: the templates are read from the
+<code>runtimeClasspath</code> the pages are expanded on, and a view the application declares needs no exclusion, since
+it takes precedence over any scaffolded page when a request is resolved. A build that configures either
+property fails with an unknown property; remove the setting.</p>
+</div>
+<div class="paragraph">
+<p>8.0.0-RC1 also compiled a scaffolding project’s views from a copy made by a <code>stageGroovyPages</code> task, which
+it registered only when a controller source mentioned <code>@Scaffold</code> - decided by
+<code>GroovyPagePlugin.scaffoldsAnyController</code>. Both are gone: nothing is copied, and every project generates the
+pages its scaffolded controllers need, a plugin’s among them. A build that refers to <code>stageGroovyPages</code>
+fails with an unknown task; remove the reference.</p>
+</div>
+</div>
</div>
@@ -41021,6 +41061,36 @@ import org.springframework.beans.factory.annotation.*
<p>When the test is run the application container will be loaded up in the background and you can send requests to the running application using the Geb API.</p>
</div>
<div class="paragraph">
+<p>Web applications generated with Grails Forge include the <code>geb-with-testcontainers</code> feature by default. Its functional spec extends <code>ContainerGebSpec</code>, which runs the browser in a container and therefore needs Docker or a compatible container runtime. See the <a href="https://github.com/apache/grails-core/tree/7.0.x/grails-geb#readme">Grails Geb plugin README</a> for details.</p>
+</div>
+<div class="paragraph">
+<p>To run functional tests against browsers installed on your machine instead, select the <code>geb-with-local-browsers</code> feature. Before Grails 7.0.18 this feature was named <code>geb-with-webdriver-binaries</code>. It replaces <code>geb-with-testcontainers</code>, and the two features cannot be selected together. The generated project then contains:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>a functional spec that extends <code>GebSpec</code></p>
+</li>
+<li>
+<p>a <code>src/integration-test/resources/GebConfig.groovy</code> with one Geb environment per browser, such as <code>chrome</code>, <code>chromeHeadless</code>, <code>firefox</code> and <code>firefoxHeadless</code></p>
+</li>
+<li>
+<p>a <code>build.gradle</code> that passes the <code>geb.env</code> system property to the test JVM</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Select a browser by passing the Geb environment to Gradle:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="console">$ ./gradlew integrationTest -Dgeb.env=firefoxHeadless</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Selenium Manager, which is part of Selenium, downloads the WebDriver binary that matches the installed browser version.</p>
+</div>
+<div class="paragraph">
<p>Note that the application is only loaded once for the entire test run, so functional tests share the state of the application across the whole suite.</p>
</div>
<div class="paragraph">
@@ -64169,10 +64239,19 @@ database.dbname=<span class="string"><span class="delimiter">"</span><span
<p>A CRUD interface will also be generated. To access this open <code><a href="http://localhost:8080/book" class="bare">http://localhost:8080/book</a></code> in a browser.</p>
</div>
<div class="paragraph">
-<p>The Gradle plugin expands scaffold templates into <code>build/generated/scaffolded-views</code> with <code>generateScaffoldedViews</code>. Then <code>stageGroovyPages</code> combines them with application views in <code>build/generated/views</code>, and <code>compileGroovyPages</code> compiles them so packaged applications and native images do not need to generate them on the first request. Running <code>compileGroovyPages</code> runs these prerequisite tasks automatically. Handwritte [...]
+<p>When the application is built, the Gradle plugin’s <code>generateScaffoldedViews</code> task expands the scaffolding templates for every domain class a controller scaffolds with <code>@Scaffold</code>, the application’s or a plugin’s, and <code>compileGroovyPages</code> compiles the resulting pages in the same compilation as the application’s views. The templates are expanded by the application’s own scaffolding library and Groovy, in a JVM on its runtime [...]
+</div>
+<div class="paragraph">
+<p>The task covers the application’s scaffolded controllers and those its plugins provide. For each, it expands every copy of each template the view resolver could choose: the application’s own, in <code>src/main/templates/scaffolding</code> or <code>src/main/resources/META-INF/templates/scaffolding</code>, and every copy on the runtime classpath. Which copy the resolver finds is not something the build can know: on the JVM it looks beside the controller’s class first, [...]
+</div>
+<div class="paragraph">
+<p>A template of the application’s own is its code, as a view is: if it cannot be expanded for a domain class, or a page expanded from it does not compile, the build fails. A copy a dependency supplies is not, and because every copy is compiled, that includes a copy the application has replaced with its own. If such a copy cannot be expanded, or its page does not compile, the build leaves the page out and says so, and the view is expanded on its first use if that copy is ever chose [...]
+</div>
+<div class="paragraph">
+<p>Compiling the pages does not change which page a request gets. A view the application or a plugin declares still takes precedence, and the resolver chooses the template as it always has; the compiled page is used only when it was expanded from that template for the same domain class. Otherwise the template is expanded on its first use, as before, and the log notes it once. That is the case for a controller using the <code>static scaffold</code> property described below, and for a page [...]
</div>
<div class="paragraph">
-<p>Controllers that declare or inherit a static <code>namespace</code> keep runtime view generation, so namespace-specific templates and fallback views are resolved as they are during development. If another controller shares the same simple name, its scaffold views also remain runtime-generated to avoid introducing a shared view that changes the namespaced controller’s fallback. Controllers whose view directories collide and scaffold different domains also keep runtime view genera [...]
+<p>A native image cannot expand a template, so there a view with no compiled page fails; where the application has compiled pages of its own, a warning naming the template and the domain class comes first. What to do depends on why the page is missing: declare the controller with <code>@Scaffold</code> rather than <code>static scaffold</code>; for a page the build left out, give the application a template of its own in place of the one it came from: the build output names the page, under [...]
</div>
<div class="paragraph">
<p>If you prefer to keep your domain model in Java and <a href="https://hibernate.org/">mapped with Hibernate</a> you can still use scaffolding, simply import the domain class and use it in the <code>@Scaffold</code> annotation.</p>
diff --git a/docs/snapshot/guide/testing.html b/docs/snapshot/guide/testing.html
index 4429b6d2ff8..040c130435b 100644
--- a/docs/snapshot/guide/testing.html
+++ b/docs/snapshot/guide/testing.html
@@ -3085,6 +3085,36 @@ import org.springframework.beans.factory.annotation.*
<p>When the test is run the application container will be loaded up in the background and you can send requests to the running application using the Geb API.</p>
</div>
<div class="paragraph">
+<p>Web applications generated with Grails Forge include the <code>geb-with-testcontainers</code> feature by default. Its functional spec extends <code>ContainerGebSpec</code>, which runs the browser in a container and therefore needs Docker or a compatible container runtime. See the <a href="https://github.com/apache/grails-core/tree/7.0.x/grails-geb#readme">Grails Geb plugin README</a> for details.</p>
+</div>
+<div class="paragraph">
+<p>To run functional tests against browsers installed on your machine instead, select the <code>geb-with-local-browsers</code> feature. Before Grails 7.0.18 this feature was named <code>geb-with-webdriver-binaries</code>. It replaces <code>geb-with-testcontainers</code>, and the two features cannot be selected together. The generated project then contains:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>a functional spec that extends <code>GebSpec</code></p>
+</li>
+<li>
+<p>a <code>src/integration-test/resources/GebConfig.groovy</code> with one Geb environment per browser, such as <code>chrome</code>, <code>chromeHeadless</code>, <code>firefox</code> and <code>firefoxHeadless</code></p>
+</li>
+<li>
+<p>a <code>build.gradle</code> that passes the <code>geb.env</code> system property to the test JVM</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Select a browser by passing the Geb environment to Gradle:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="console">$ ./gradlew integrationTest -Dgeb.env=firefoxHeadless</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Selenium Manager, which is part of Selenium, downloads the WebDriver binary that matches the installed browser version.</p>
+</div>
+<div class="paragraph">
<p>Note that the application is only loaded once for the entire test run, so functional tests share the state of the application across the whole suite.</p>
</div>
<div class="paragraph">
diff --git a/docs/snapshot/guide/upgrading.html b/docs/snapshot/guide/upgrading.html
index b14ac52b465..968167d3b82 100644
--- a/docs/snapshot/guide/upgrading.html
+++ b/docs/snapshot/guide/upgrading.html
@@ -5775,6 +5775,46 @@ If a reverse proxy in front of the application already sends these headers (for
To disable or customize the Grails defaults, configure <code>grails.security.headers.*</code>; see the Security guide’s HTTP Security Headers section for the full list and the reverse-proxy guidance.</p>
</div>
</div>
+<div class="sect3">
+<h4 id="_74_scaffolded_views_are_compiled_with_the_application">74. Scaffolded Views Are Compiled With the Application</h4>
+<div class="paragraph">
+<p>In Grails 7 a scaffolded view was expanded from its template and compiled on the first request that asked
+for it. In Grails 8, the pages of every controller annotated <code>@Scaffold</code>, the application’s or a plugin’s, are
+expanded at build time by the <code>generateScaffoldedViews</code> task, into <code>build/generated/scaffolded-views</code>, and
+compiled by <code>compileGroovyPages</code> in the same compilation as <code>grails-app/views</code>, under a <code>grails-scaffolded</code>
+directory that no controller’s views resolve from. The resolver still chooses the
+template for a request exactly as before, and serves the page compiled from that template when there is one,
+so a request gets the same page it did. Which pages are compiled, and what happens to the others, is
+described in the <a href="scaffolding.html">Scaffolding</a> guide.</p>
+</div>
+<div class="paragraph">
+<p><code>compileGroovyPages</code> takes the pages as its <code>generatedViews</code>, beside its <code>source</code>, so a build that sets the
+<code>source</code> itself still compiles them. In a project that scaffolds nothing, <code>generateScaffoldedViews</code> writes
+nothing.</p>
+</div>
+<div class="paragraph">
+<p>A scaffolding template of the application’s own, in <code>src/main/templates/scaffolding</code> or packaged under
+<code>META-INF/templates/scaffolding</code>, is now compiled at build time, so one that cannot be expanded, or whose page
+does not compile, fails the build as a view that does not compile does - where in Grails 7 it failed on the
+first request for the view. A page expanded from a template a dependency supplies that cannot be compiled
+does not fail the build: it is left out, the build output names it, and it is expanded when it is first
+rendered, as in Grails 7.</p>
+</div>
+<div class="paragraph">
+<p>The <code>generateScaffoldedViews</code> task of 8.0.0-RC1 wrote pages into the controllers' view directories and had
+<code>templateClasspath</code> and <code>applicationViews</code> properties. Both are gone: the templates are read from the
+<code>runtimeClasspath</code> the pages are expanded on, and a view the application declares needs no exclusion, since
+it takes precedence over any scaffolded page when a request is resolved. A build that configures either
+property fails with an unknown property; remove the setting.</p>
+</div>
+<div class="paragraph">
+<p>8.0.0-RC1 also compiled a scaffolding project’s views from a copy made by a <code>stageGroovyPages</code> task, which
+it registered only when a controller source mentioned <code>@Scaffold</code> - decided by
+<code>GroovyPagePlugin.scaffoldsAnyController</code>. Both are gone: nothing is copied, and every project generates the
+pages its scaffolded controllers need, a plugin’s among them. A build that refers to <code>stageGroovyPages</code>
+fails with an unknown task; remove the reference.</p>
+</div>
+</div>
</div>