You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/01/04 14:00:48 UTC

[1/5] isis-site git commit: ISIS-1287: splitting out contributors vs committers guides

Repository: isis-site
Updated Branches:
  refs/heads/asf-site a1ff148dc -> 029a63bfb


http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/rg.html
----------------------------------------------------------------------
diff --git a/content/guides/rg.html b/content/guides/rg.html
index a2d7cf7..1947b3d 100644
--- a/content/guides/rg.html
+++ b/content/guides/rg.html
@@ -550,7 +550,9 @@ table.CodeRay td.code>pre{padding:0}
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>In addition, there is a <a href="cgcon.html">Contributors' Guide</a> (that describes how to set up a development environment
+for Apache Isis and contribute back to the project), and a <a href="cgcon.html">Committers' Guide</a> (that describes release
+procedures and related practices).</p>
 </div>
         </div>
 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/rgant.html
----------------------------------------------------------------------
diff --git a/content/guides/rgant.html b/content/guides/rgant.html
index f5d0bb0..311575d 100644
--- a/content/guides/rgant.html
+++ b/content/guides/rgant.html
@@ -513,7 +513,7 @@ annotations that are now deprecated, and indicates their replacement.</p>
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -560,7 +560,18 @@ annotations that are now deprecated, and indicates their replacement.</p>
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 <div class="sect2">
@@ -11112,7 +11123,7 @@ present in the title column. This convention can be overridden using
 <div class="sect2">
 <h3 id="_lombok_support">31.1. Lombok support</h3>
 <div class="paragraph">
-<p>If <a href="cg.html#_cg_ide_project-lombok">Project Lombok</a> is being used, then <code>@Title</code> can be specified on the backing field.</p>
+<p>If <a href="cgcon.html#_cgcon_ide_project-lombok">Project Lombok</a> is being used, then <code>@Title</code> can be specified on the backing field.</p>
 </div>
 <div class="paragraph">
 <p>For example:</p>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/rgcfg.html
----------------------------------------------------------------------
diff --git a/content/guides/rgcfg.html b/content/guides/rgcfg.html
index 8ce0d16..648d96a 100644
--- a/content/guides/rgcfg.html
+++ b/content/guides/rgcfg.html
@@ -533,7 +533,7 @@ configuration properties externally for different environments can be found in t
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -580,7 +580,18 @@ configuration properties externally for different environments can be found in t
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 </div>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/rgcms.html
----------------------------------------------------------------------
diff --git a/content/guides/rgcms.html b/content/guides/rgcms.html
index 9206468..cbb3fae 100644
--- a/content/guides/rgcms.html
+++ b/content/guides/rgcms.html
@@ -517,7 +517,7 @@ JAXB serialization of view models.</p>
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -564,7 +564,18 @@ JAXB serialization of view models.</p>
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 </div>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/rgsvc.html
----------------------------------------------------------------------
diff --git a/content/guides/rgsvc.html b/content/guides/rgsvc.html
index 881ff09..6d5e65f 100644
--- a/content/guides/rgsvc.html
+++ b/content/guides/rgsvc.html
@@ -513,7 +513,7 @@ table.CodeRay td.code>pre{padding:0}
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -560,7 +560,18 @@ table.CodeRay td.code>pre{padding:0}
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 </div>
@@ -948,7 +959,7 @@ SpecificationProvider</code></a>.</p>
 <code>isis-core-metamodel</code></p>
 </div></div></td>
 <td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>A <code>SwaggerServiceMenu</code> domain service is also provided which enables the swagger spec to be downloaded.  Apache Isis' <a href="cg.html#_cg_isis-maven-plugin">Maven plugin</a> also provides a <a href="cg.html#_cg_isis-maven-plugin_swagger">swagger goal</a> which allows the spec file(s) to be generated at build time (eg so that client-side stubs can then be generated in turn).</p>
+<p>A <code>SwaggerServiceMenu</code> domain service is also provided which enables the swagger spec to be downloaded.  Apache Isis' <a href="cgcon.html#_cgcon_isis-maven-plugin">Maven plugin</a> also provides a <a href="cgcon.html#_cgcon_isis-maven-plugin_swagger">swagger goal</a> which allows the spec file(s) to be generated at build time (eg so that client-side stubs can then be generated in turn).</p>
 </div></div></td>
 </tr>
 <tr>
@@ -4894,7 +4905,7 @@ implementation of <code>SwaggerService</code> service is automatically registere
 <p>A <code>SwaggerServiceMenu</code> domain service provides a prototype action that enables the swagger spec to be downloaded from the Wicket viewer&#8217;s UI.</p>
 </div>
 <div class="paragraph">
-<p>Apache Isis' <a href="cg.html#_cg_isis-maven-plugin">Maven plugin</a> also provides a <a href="cg.html#_cg_isis-maven-plugin_swagger">swagger goal</a> which allows the spec file(s) to be generated at build time.  this then allows client-side stubs can then be generated in turn as part of a build pipeline.</p>
+<p>Apache Isis' <a href="cgcon.html#_cgcon_isis-maven-plugin">Maven plugin</a> also provides a <a href="cgcon.html#_cgcon_isis-maven-plugin_swagger">swagger goal</a> which allows the spec file(s) to be generated at build time.  this then allows client-side stubs can then be generated in turn as part of a build pipeline.</p>
 </div>
 </div>
 </div>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/simpleapp-archetype.html
----------------------------------------------------------------------
diff --git a/content/guides/simpleapp-archetype.html b/content/guides/simpleapp-archetype.html
index 3924bae..3a3e00d 100644
--- a/content/guides/simpleapp-archetype.html
+++ b/content/guides/simpleapp-archetype.html
@@ -706,7 +706,7 @@ script to be run.</p>
 <p>Once you are familiar with the generated app, you&#8217;ll want to start modifying it.  Check out our the <a href=".guides/ug.html">Users' Guide</a>, which has how-tos and a complete reference guide (as well as some background concepts and discussion of more advanced techniques).</p>
 </div>
 <div class="paragraph">
-<p>If you use IntelliJ or Eclipse, you&#8217;ll also want to set up your IDE; this is also described in the <a href="cg.adoc#_cg_ide">Contributors' Guide</a>.</p>
+<p>If you use IntelliJ or Eclipse, you&#8217;ll also want to set up your IDE; this is also described in the <a href="cgcon.adoc#_cgcon_ide">Contributors' Guide</a>.</p>
 </div>
 </div>
 </div>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/tg.html
----------------------------------------------------------------------
diff --git a/content/guides/tg.html b/content/guides/tg.html
index 0cbb436..87de0d2 100644
--- a/content/guides/tg.html
+++ b/content/guides/tg.html
@@ -743,7 +743,7 @@ rmdir petclinic</code></pre>
 <div class="sect2">
 <h3 id="_dev_environment">2.5. Dev environment</h3>
 <div class="paragraph">
-<p>Set up <a href="cg.html#_cg_ide">an IDE</a> and import the project to be able to run and debug the app.</p>
+<p>Set up <a href="cgcon.html#_cgcon_ide">an IDE</a> and import the project to be able to run and debug the app.</p>
 </div>
 <div class="paragraph">
 <p>Then set up a launch configuration so that you can run the app from within the IDE. To save having to run the fixtures
@@ -1553,7 +1553,7 @@ mvn clean install</code></pre>
 <div class="sect2">
 <h3 id="_dev_environment_2">4.5. Dev environment</h3>
 <div class="paragraph">
-<p>Set up <a href="cg.html#_cg_ide">an IDE</a> and import the project to be able to run and debug the app.</p>
+<p>Set up <a href="cgcon.html#_cgcon_ide">an IDE</a> and import the project to be able to run and debug the app.</p>
 </div>
 <div class="paragraph">
 <p>Then set up a launch configuration and check that you can:</p>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/ug.html
----------------------------------------------------------------------
diff --git a/content/guides/ug.html b/content/guides/ug.html
index 81a4c23..1153027 100644
--- a/content/guides/ug.html
+++ b/content/guides/ug.html
@@ -503,7 +503,7 @@ table.CodeRay td.code>pre{padding:0}
 
         <div id="doc-content">
           <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -550,7 +550,18 @@ table.CodeRay td.code>pre{padding:0}
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
         </div>
 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/ugbtb.html
----------------------------------------------------------------------
diff --git a/content/guides/ugbtb.html b/content/guides/ugbtb.html
index cc6818b..c5ef1fa 100644
--- a/content/guides/ugbtb.html
+++ b/content/guides/ugbtb.html
@@ -515,7 +515,7 @@ applications.</p>
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -562,7 +562,18 @@ applications.</p>
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 </div>
@@ -1160,7 +1171,7 @@ on the server).</p>
 <div class="sect3">
 <h4 id="_generating_xsds_and_dtos">2.3.5. Generating XSDs and DTOs</h4>
 <div class="paragraph">
-<p>The <a href="cg.html#_cg_isis-maven-plugin">Apache Isis maven plugin</a> provides the <a href="cg.html#_cg_isis-maven-plugin_xsd">xsd</a> goal that allows the XSDs to be generated from any JAXB-annotated view models.
+<p>The <a href="cgcon.html#_cgcon_isis-maven-plugin">Apache Isis maven plugin</a> provides the <a href="cgcon.html#_cgcon_isis-maven-plugin_xsd">xsd</a> goal that allows the XSDs to be generated from any JAXB-annotated view models.
 These use the <a href="rgsvc.html#_rgsvc_api_JaxbService"><code>JaxbService</code></a> to generate the schemas; using the
 standard <code>schemagen</code> command line will not correctly interpret any references to domain entities as OIDs.</p>
 </div>
@@ -3239,7 +3250,7 @@ build up its metamodel.</p>
 </td>
 <td class="content">
 <div class="paragraph">
-<p>Isis' <a href="cg.html#_cg_isis-maven-plugin">Maven plugin</a> will also validate the domain object model during build time.</p>
+<p>Isis' <a href="cgcon.html#_cgcon_isis-maven-plugin">Maven plugin</a> will also validate the domain object model during build time.</p>
 </div>
 </td>
 </tr>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/ugfun.html
----------------------------------------------------------------------
diff --git a/content/guides/ugfun.html b/content/guides/ugfun.html
index 557b13c..50e9dfa 100644
--- a/content/guides/ugfun.html
+++ b/content/guides/ugfun.html
@@ -517,7 +517,7 @@ and tells you how to <a href="#_ugfun_getting-started">get started</a> with a Ma
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -564,7 +564,18 @@ and tells you how to <a href="#_ugfun_getting-started">get started</a> with a Ma
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 </div>
@@ -2021,7 +2032,7 @@ So, if you have used Apache Isis for prototyping (discussed above), then note th
 </ul>
 </div>
 <div class="paragraph">
-<p>You&#8217;ll probably also want to use an IDE; the Apache Isis committers use either IntelliJ or Eclipse; in the <a href="cg.html#_cg_ide">Contributors' Guide</a> we have detailed setup instructions for using these two IDEs.  If you&#8217;re a NetBeans user you should have no problems as it too has strong support for Maven.</p>
+<p>You&#8217;ll probably also want to use an IDE; the Apache Isis committers use either IntelliJ or Eclipse; in the <a href="cgcon.html#_cgcon_ide">Contributors' Guide</a> we have detailed setup instructions for using these two IDEs.  If you&#8217;re a NetBeans user you should have no problems as it too has strong support for Maven.</p>
 </div>
 <div class="paragraph">
 <p>When building and running within an IDE, you&#8217;ll also need to configure the Datanucleus enhancer.  This is implemented as a Maven plugin, so in the case of IntelliJ, it&#8217;s easy enough to run the enhancer as required. It should be just as straightforward for NetBeans too.</p>
@@ -2207,7 +2218,7 @@ mvn jetty:run -D jetty.port=9090</code></pre>
 <div class="sect4">
 <h5 id="_from_within_the_ide">From within the IDE</h5>
 <div class="paragraph">
-<p>Most of the time, though, you&#8217;ll probably want to run the app from within your IDE.  The mechanics of doing this will vary by IDE; see the <a href="cg.html#_cg_ide">Contributors' Guide</a> for details of setting up Eclipse or IntelliJ IDEA.  Basically, though, it amounts to running <code>org.apache.isis.WebServer</code>, and ensuring that the <a href="#_ugfun_getting-started_datanucleus-enhancer">DataNucleus enhancer</a> has properly processed all domain entities.</p>
+<p>Most of the time, though, you&#8217;ll probably want to run the app from within your IDE.  The mechanics of doing this will vary by IDE; see the <a href="cgcon.html#_cgcon_ide">Contributors' Guide</a> for details of setting up Eclipse or IntelliJ IDEA.  Basically, though, it amounts to running <code>org.apache.isis.WebServer</code>, and ensuring that the <a href="#_ugfun_getting-started_datanucleus-enhancer">DataNucleus enhancer</a> has properly processed all domain entities.</p>
 </div>
 <div class="paragraph">
 <p>Here&#8217;s what the setup looks like in IntelliJ IDEA:</p>
@@ -2414,7 +2425,7 @@ script to be run.</p>
 <p>Once you are familiar with the generated app, you&#8217;ll want to start modifying it.  There is plenty of guidance on this site; check out the 'programming model how-tos' section on the main <a href="../documentation.html">documentation</a> page first).</p>
 </div>
 <div class="paragraph">
-<p>If you use Eclipse or IntelliJ IDEA, do also install the <a href="cg.html#_cg_ide-templates">IDE templates</a>; these will help you follow the Apache Isis naming conventions.</p>
+<p>If you use Eclipse or IntelliJ IDEA, do also install the <a href="cgcon.html#_cgcon_ide-templates">IDE templates</a>; these will help you follow the Apache Isis naming conventions.</p>
 </div>
 </div>
 <div class="sect3">
@@ -2599,7 +2610,7 @@ script to be run.</p>
 <p>If running on Windows, then there&#8217;s a good chance you&#8217;ll hit the <a href="http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath">maximum path length limit</a>.   In this case the <code>persistence.xml</code> file is mandatory rather than optional.</p>
 </div>
 <div class="paragraph">
-<p>This file is also required if you are using developing in Eclipse and relying on the DataNucleus plugin for Eclipse rather than the DataNucleus plugin for Maven.  More information can be found <a href="cg.html#_cg_ide_eclipse">here</a>.</p>
+<p>This file is also required if you are using developing in Eclipse and relying on the DataNucleus plugin for Eclipse rather than the DataNucleus plugin for Maven.  More information can be found <a href="cgcon.html#_cgcon_ide_eclipse">here</a>.</p>
 </div>
 </td>
 </tr>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/ugsec.html
----------------------------------------------------------------------
diff --git a/content/guides/ugsec.html b/content/guides/ugsec.html
index 585b40f..c488f27 100644
--- a/content/guides/ugsec.html
+++ b/content/guides/ugsec.html
@@ -511,7 +511,7 @@ table.CodeRay td.code>pre{padding:0}
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -558,7 +558,18 @@ table.CodeRay td.code>pre{padding:0}
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 <div class="sect2">

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/ugtst.html
----------------------------------------------------------------------
diff --git a/content/guides/ugtst.html b/content/guides/ugtst.html
index 600fe79..a6d0d97 100644
--- a/content/guides/ugtst.html
+++ b/content/guides/ugtst.html
@@ -517,7 +517,7 @@ application frameworks.</p>
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -564,7 +564,18 @@ application frameworks.</p>
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 </div>
@@ -887,7 +898,7 @@ CustomerRepository customers;</code></pre>
 </td>
 <td class="content">
 <div class="paragraph">
-<p>(If using the JDO objectstore, then) there is generally no need to programmatically maintain 1:m relationships (indeed it may introduce subtle errors). For more details, see <a href="ugfun.html#_ugfun_how-tos_entity-relationships_managed-1-to-m-bidirectional-relationships">here</a>.  Also check out the <a href="cg.html#_cg_ide-templates">IDE templates</a> for further guidance.</p>
+<p>(If using the JDO objectstore, then) there is generally no need to programmatically maintain 1:m relationships (indeed it may introduce subtle errors). For more details, see <a href="ugfun.html#_ugfun_how-tos_entity-relationships_managed-1-to-m-bidirectional-relationships">here</a>.  Also check out the <a href="cgcon.html#_cgcon_ide-templates">IDE templates</a> for further guidance.</p>
 </div>
 </td>
 </tr>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/ugvro.html
----------------------------------------------------------------------
diff --git a/content/guides/ugvro.html b/content/guides/ugvro.html
index ebd06cc..545f8ad 100644
--- a/content/guides/ugvro.html
+++ b/content/guides/ugvro.html
@@ -522,7 +522,7 @@ standard third-party configurations.</p>
 <div class="sect2">
 <h3 id="_other_guides">1.1. Other Guides</h3>
 <div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
 </div>
 <div class="paragraph">
 <p>The user guides available are:</p>
@@ -569,7 +569,18 @@ standard third-party configurations.</p>
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment
+for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
 </div>
 </div>
 </div>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/ugvw.html
----------------------------------------------------------------------
diff --git a/content/guides/ugvw.html b/content/guides/ugvw.html
index 4e1b681..b1020ef 100644
--- a/content/guides/ugvw.html
+++ b/content/guides/ugvw.html
@@ -565,7 +565,9 @@ implemented using <a href="http://wicket.apache.org">Apache Wicket</a>.</p>
 </ul>
 </div>
 <div class="paragraph">
-<p>In addition, there is a <a href="cg.html#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
+<p>In addition, there is a <a href="cgcon.html">Contributors' Guide</a> (that describes how to set up a development environment
+for Apache Isis and contribute back to the project), and a <a href="cgcon.html">Committers' Guide</a> (that describes release
+procedures and related practices).</p>
 </div>
 </div>
 </div>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/help.html
----------------------------------------------------------------------
diff --git a/content/help.html b/content/help.html
index 34a5ce4..0a48d3d 100644
--- a/content/help.html
+++ b/content/help.html
@@ -530,7 +530,7 @@ table.CodeRay td.code>pre{padding:0}
 <p><a href="http://stackoverflow.com/questions/tagged/isis">Stack Overflow</a> (tagged=isis)</p>
 </li>
 <li>
-<p><a href="guides/cg.html#_cg_contributing">How to contribute</a></p>
+<p><a href="guides/cgcon.html#_cgcon_contributing">How to contribute</a></p>
 </li>
 </ul>
 </div>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/migration-notes.html
----------------------------------------------------------------------
diff --git a/content/migration-notes.html b/content/migration-notes.html
index c32c06f..9e121df 100644
--- a/content/migration-notes.html
+++ b/content/migration-notes.html
@@ -763,7 +763,7 @@ internally to sequence the internal list of services being initialized.</p>
 <h3 id="_isis_maven_plugin">isis-maven-plugin</h3>
 <div class="paragraph">
 <p>The way that the Isis Maven plugin is configured has changed slightly; check out its
-<a href="cg.html#_cg_isis-maven-plugin">documentation</a> for full details.</p>
+<a href="cgcon.html#_cgcon_isis-maven-plugin">documentation</a> for full details.</p>
 </div>
 </div>
 </div>

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/resources/templates/isis-asciidoc-templates-idea.xml
----------------------------------------------------------------------
diff --git a/content/resources/templates/isis-asciidoc-templates-idea.xml b/content/resources/templates/isis-asciidoc-templates-idea.xml
index 2363d75..0a2c9f9 100644
--- a/content/resources/templates/isis-asciidoc-templates-idea.xml
+++ b/content/resources/templates/isis-asciidoc-templates-idea.xml
@@ -1,328 +1,342 @@
-<templateSet group="Isis-AsciiDoc">
-  <template name="adtbl3" value=".$tableCaption$&#10;[cols=&quot;1a,1a,1a&quot;, options=&quot;header&quot;]&#10;|===&#10;&#10;| $cell1header$ &#10;| $cell2header$&#10;| $cell3header$&#10;&#10;&#10;| $cell1row1$&#10;| $cell2row1$&#10;| $cell3row1$&#10;&#10;&#10;|&#10;|&#10;|&#10;&#10;|===" description="Table with three columns" toReformat="false" toShortenFQNames="true">
-    <variable name="tableCaption" expression="" defaultValue="&quot;Table caption&quot;" alwaysStopAt="true" />
-    <variable name="cell1header" expression="" defaultValue="&quot;Header Cell 1&quot;" alwaysStopAt="true" />
-    <variable name="cell2header" expression="" defaultValue="&quot;Header Cell 2&quot;" alwaysStopAt="true" />
-    <variable name="cell3header" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="cell1row1" expression="" defaultValue="&quot;Row 1 Cell 1&quot;" alwaysStopAt="true" />
-    <variable name="cell2row1" expression="" defaultValue="&quot;Row 1 Cell 2&quot;" alwaysStopAt="true" />
-    <variable name="cell3row1" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adadmtip" value="[TIP]&#10;====&#10;$END$&#10;====&#10;" description="Tip admonition" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adadmnote" value="[NOTE]&#10;====&#10;$END$&#10;====&#10;" description="Note admonition" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adadmimportant" value="[IMPORTANT]&#10;====&#10;$END$&#10;====&#10;" description="Important admonition" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adadmwarning" value="[WARNING]&#10;====&#10;$END$&#10;====&#10;" description="Warning admonition" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adimgfile" value="image::{_imagesdir}$INCLUDED$/$FILE$.png[width=&quot;$END$$WIDTH$px&quot;,link=&quot;{_imagesdir}$INCLUDED$/$FILE$.png&quot;]" description="Image link to file" toReformat="false" toShortenFQNames="true">
-    <variable name="INCLUDED" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="FILE" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adimgurl" value="image::$URL$[width=&quot;$END$$WIDTH$px&quot;,link=&quot;$URL$&quot;]" description="Image link to URL" toReformat="false" toShortenFQNames="true">
-    <variable name="URL" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adlink" value="link:$URL$[$TEXT$]" description="Link to URL" toReformat="false" toShortenFQNames="true">
-    <variable name="URL" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="TEXT" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adsrcjava" value="[source,java]&#10;----&#10;$END$&#10;----&#10;" description="Source code (java)" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adsrcxml" value="[source,xml]&#10;----&#10;$END$&#10;----&#10;" description="Source code (XML)" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adsrcother" value="[source,$LANG$]&#10;----&#10;$END$&#10;----&#10;" description="Source code (None)" toReformat="false" toShortenFQNames="true">
-    <variable name="LANG" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adinclude" value="include::$INCLUDED$.adoc[leveloffset=+1]&#10;" description="Include" toReformat="false" toShortenFQNames="true">
-    <variable name="INCLUDED" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adlinkaddons" value="(non-ASF) link:http://isisaddons.org[Isis Addons]" description="Link to Isis Addons" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adlinkaddonsmodule" value="(non-ASF) http://github.com/isisaddons/isis-module-$MODULE$[Isis addons' $MODULE$] module" description="Link to specific Isis Addons module" toReformat="false" toShortenFQNames="true">
-    <variable name="MODULE" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adtodo" value="NOTE: TODO" description="TODO note" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adfootnote" value=".footnote:[$END$]" description="Footnote" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adlinkaddonswicket" value="(non-ASF) http://github.com/isisaddons/isis-wicket-$WICKET$[Isis addons' $WICKET$ ] wicket extension" description="Link to specific Isis Addons wicket cpt" toReformat="false" toShortenFQNames="true">
-    <variable name="WICKET" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adlinkaddonsapp" value="(non-ASF) http://github.com/isisaddons/isis-app-$APP$[Isis addons' $APP$]" description="Link to specific Isis Addons app" toReformat="false" toShortenFQNames="true">
-    <variable name="APP" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adugsimpleapp" value="xref:ug.adoc#_ug_getting-started_simpleapp-archetype[SimpleApp archetype]" description="xref to the user guide simpleapp archetype" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adyoutube" value="video::$REFERENCE$[youtube,width=&quot;$WIDTH$px&quot;,height=&quot;$END$$HEIGHT$px&quot;]" description="Link to youtube" toReformat="false" toShortenFQNames="true">
-    <variable name="REFERENCE" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="HEIGHT" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adimgfilec" value=".$CAPTION$&#10;image::{_imagesdir}$INCLUDED$/$FILE$.png[width=&quot;$END$$WIDTH$px&quot;,link=&quot;{_imagesdir}$INCLUDED$/$FILE$.png&quot;]" description="Image link to file with caption" toReformat="false" toShortenFQNames="true">
-    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="INCLUDED" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="FILE" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adimgurlc" value=".$CAPTION$&#10;image::$URL$[width=&quot;$END$$WIDTH$px&quot;,link=&quot;$URL$&quot;]" description="Image link to URL with caption" toReformat="false" toShortenFQNames="true">
-    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="URL" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adsrcjavac" value="[source,java]&#10;.$CAPTION$&#10;----&#10;$END$&#10;----&#10;" description="Source code (java) with caption" toReformat="false" toShortenFQNames="true">
-    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adsrcotherc" value="[source,$LANG$]&#10;----&#10;$END$&#10;----&#10;" description="Source code (None) with caption" toReformat="false" toShortenFQNames="true">
-    <variable name="LANG" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adsrcxmlc" value="[source,xml]&#10;.$CAPTION$&#10;----&#10;$END$&#10;----&#10;" description="Source code (XML) with caption" toReformat="false" toShortenFQNames="true">
-    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adsrcjavascript" value="[source,javascript]&#10;----&#10;$END$&#10;----&#10;" description="Source code (Javascript)" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adsrcjavascriptc" value="[source,javascript]&#10;.$CAPTION$&#10;----&#10;$END$&#10;----&#10;" description="Source code (javascript) with caption" toReformat="false" toShortenFQNames="true">
-    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgmp" value="xref:rgcsm.adoc#_rgcsm_methods_prefixes_$methodName$[`$methodName$...()`]" description="x-ref to ref guide manpage for method prefix" toReformat="false" toShortenFQNames="true">
-    <variable name="methodName" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgsa" value="xref:rgsvc.adoc#_rgsvc_api_$ServiceType$[`$ServiceType$`]" description="x-ref to ref guide manpage for service api" toReformat="false" toShortenFQNames="true">
-    <variable name="ServiceType" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgmr" value="xref:rgcsm.adoc#_rgcsm_methods_reserved_$methodName$[`$methodName$()`]" description="x-ref to ref guide manpage for reserved method" toReformat="false" toShortenFQNames="true">
-    <variable name="methodName" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgss" value="xref:rgsvc.adoc#_rgsvc_spi_$ServiceType$[`$ServiceType$`]" description="x-ref to ref guide manpage for service spi" toReformat="false" toShortenFQNames="true">
-    <variable name="ServiceType" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgcv" value="xref:rgcsm.adoc#_rgcsm_classes_value-types_$Type$[`$Type$`]" description="x-ref to ref guide manpage for class value type" toReformat="false" toShortenFQNames="true">
-    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgcs" value="xref:rgcsm.adoc#_rgcsm_classes_super_$Type$[`$Type$`]" description="x-ref to ref guide manpage for class superclass" toReformat="false" toShortenFQNames="true">
-    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgcu" value="xref:rgcsm.adoc#_rgcsm_classes_utility_$Type$[`$Type$`]" description="x-ref to ref guide manpage for class utility" toReformat="false" toShortenFQNames="true">
-    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adanchany" value="= anchor:$prefix$[]" description="anchor to any" toReformat="false" toShortenFQNames="true">
-    <variable name="prefix" expression="" defaultValue="chapter" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgna" value="xref:rgant.adoc#_rgant_$Type$[`@$Type$`]" description="x-ref to ref guide manpage for annotation" toReformat="false" toShortenFQNames="true">
-    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adxrefany" value="xref:$chapter$[$DisplayText$]" description="x-ref to any" toReformat="false" toShortenFQNames="true">
-    <variable name="chapter" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgnt" value="xref:rgant.adoc#_rgant_$Type$_$attribute$[`@$Type$#$attribute$()`]" description="x-ref to ref guide manpage for annotation's attribute" toReformat="false" toShortenFQNames="true">
-    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="attribute" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adugvw" value="xref:ugvw.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide wicket viewer" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Wicket viewer" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgntx" value="xref:rgant.adoc#_rgant_$Type$_$attribute$[$linkText$]" description="x-ref to ref guide manpage for annotation's attribute, overriding the link text" toReformat="false" toShortenFQNames="true">
-    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="attribute" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="linkText" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adwip" value="NOTE: WIP - " description="WIP note" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adyoutubec" value=".$CAPTION$&#10;video::$REFERENCE$[youtube,width=&quot;$WIDTH$px&quot;,height=&quot;$END$$HEIGHT$px&quot;]" description="Link to youtube with caption" toReformat="false" toShortenFQNames="true">
-    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="REFERENCE" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="HEIGHT" expression="" defaultValue="" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgcfg" value="xref:rgcfg.adoc#$bookmark$[$DisplayText$]" description="x-ref to ref guide configuration properties guide" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Configuration Properties guide" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adrgsvc" value="xref:rgsvc.adoc#$bookmark$[$DisplayText$]" description="xref to domain services guide" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Domain Services guide" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adugfun" value="xref:ugfun.adoc#$bookmark$[$DisplayText$]" description="xref to fundamentals guide" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Fundamentals Guide" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adai" value="Apache Isis " description="Apache Isis" toReformat="false" toShortenFQNames="true">
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adcg" value="xref:cg.adoc#$bookmark$[$DisplayText$]" description="x-ref to contributors guide" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Contributors guide" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adtg" value="xref:tg.adoc#$bookmark$[$DisplayText$]" description="x-ref to tutorials guide" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Tutorials" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adugtst" value="xref:ugtst.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide testing guide" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Testing guide" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adugbtb" value="xref:ugbtb.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide beyond the basics" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Beyond the Basics guide" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
-  <template name="adugsec" value="xref:ugsec.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide security guide" toReformat="false" toShortenFQNames="true">
-    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
-    <variable name="DisplayText" expression="" defaultValue="Security guide" alwaysStopAt="true" />
-    <context>
-      <option name="AsciiDoc" value="true" />
-    </context>
-  </template>
+<templateSet group="Isis-AsciiDoc">
+  <template name="adtbl3" value=".$tableCaption$&#10;[cols=&quot;1a,1a,1a&quot;, options=&quot;header&quot;]&#10;|===&#10;&#10;| $cell1header$ &#10;| $cell2header$&#10;| $cell3header$&#10;&#10;&#10;| $cell1row1$&#10;| $cell2row1$&#10;| $cell3row1$&#10;&#10;&#10;|&#10;|&#10;|&#10;&#10;|===" description="Table with three columns" toReformat="false" toShortenFQNames="true">
+    <variable name="tableCaption" expression="" defaultValue="&quot;Table caption&quot;" alwaysStopAt="true" />
+    <variable name="cell1header" expression="" defaultValue="&quot;Header Cell 1&quot;" alwaysStopAt="true" />
+    <variable name="cell2header" expression="" defaultValue="&quot;Header Cell 2&quot;" alwaysStopAt="true" />
+    <variable name="cell3header" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="cell1row1" expression="" defaultValue="&quot;Row 1 Cell 1&quot;" alwaysStopAt="true" />
+    <variable name="cell2row1" expression="" defaultValue="&quot;Row 1 Cell 2&quot;" alwaysStopAt="true" />
+    <variable name="cell3row1" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adadmtip" value="[TIP]&#10;====&#10;$END$&#10;====&#10;" description="Tip admonition" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adadmnote" value="[NOTE]&#10;====&#10;$END$&#10;====&#10;" description="Note admonition" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adadmimportant" value="[IMPORTANT]&#10;====&#10;$END$&#10;====&#10;" description="Important admonition" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adadmwarning" value="[WARNING]&#10;====&#10;$END$&#10;====&#10;" description="Warning admonition" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adimgfile" value="image::{_imagesdir}$INCLUDED$/$FILE$.png[width=&quot;$END$$WIDTH$px&quot;,link=&quot;{_imagesdir}$INCLUDED$/$FILE$.png&quot;]" description="Image link to file" toReformat="false" toShortenFQNames="true">
+    <variable name="INCLUDED" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="FILE" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adimgurl" value="image::$URL$[width=&quot;$END$$WIDTH$px&quot;,link=&quot;$URL$&quot;]" description="Image link to URL" toReformat="false" toShortenFQNames="true">
+    <variable name="URL" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adlink" value="link:$URL$[$TEXT$]" description="Link to URL" toReformat="false" toShortenFQNames="true">
+    <variable name="URL" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="TEXT" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adsrcjava" value="[source,java]&#10;----&#10;$END$&#10;----&#10;" description="Source code (java)" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adsrcxml" value="[source,xml]&#10;----&#10;$END$&#10;----&#10;" description="Source code (XML)" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adsrcother" value="[source,$LANG$]&#10;----&#10;$END$&#10;----&#10;" description="Source code (None)" toReformat="false" toShortenFQNames="true">
+    <variable name="LANG" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adinclude" value="include::$INCLUDED$.adoc[leveloffset=+1]&#10;" description="Include" toReformat="false" toShortenFQNames="true">
+    <variable name="INCLUDED" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adlinkaddons" value="(non-ASF) link:http://isisaddons.org[Isis Addons]" description="Link to Isis Addons" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adlinkaddonsmodule" value="(non-ASF) http://github.com/isisaddons/isis-module-$MODULE$[Isis addons' $MODULE$] module" description="Link to specific Isis Addons module" toReformat="false" toShortenFQNames="true">
+    <variable name="MODULE" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adtodo" value="NOTE: TODO" description="TODO note" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adfootnote" value=".footnote:[$END$]" description="Footnote" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adlinkaddonswicket" value="(non-ASF) http://github.com/isisaddons/isis-wicket-$WICKET$[Isis addons' $WICKET$ ] wicket extension" description="Link to specific Isis Addons wicket cpt" toReformat="false" toShortenFQNames="true">
+    <variable name="WICKET" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adlinkaddonsapp" value="(non-ASF) http://github.com/isisaddons/isis-app-$APP$[Isis addons' $APP$]" description="Link to specific Isis Addons app" toReformat="false" toShortenFQNames="true">
+    <variable name="APP" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adugsimpleapp" value="xref:ug.adoc#_ug_getting-started_simpleapp-archetype[SimpleApp archetype]" description="xref to the user guide simpleapp archetype" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adyoutube" value="video::$REFERENCE$[youtube,width=&quot;$WIDTH$px&quot;,height=&quot;$END$$HEIGHT$px&quot;]" description="Link to youtube" toReformat="false" toShortenFQNames="true">
+    <variable name="REFERENCE" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="HEIGHT" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adimgfilec" value=".$CAPTION$&#10;image::{_imagesdir}$INCLUDED$/$FILE$.png[width=&quot;$END$$WIDTH$px&quot;,link=&quot;{_imagesdir}$INCLUDED$/$FILE$.png&quot;]" description="Image link to file with caption" toReformat="false" toShortenFQNames="true">
+    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="INCLUDED" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="FILE" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adimgurlc" value=".$CAPTION$&#10;image::$URL$[width=&quot;$END$$WIDTH$px&quot;,link=&quot;$URL$&quot;]" description="Image link to URL with caption" toReformat="false" toShortenFQNames="true">
+    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="URL" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adsrcjavac" value="[source,java]&#10;.$CAPTION$&#10;----&#10;$END$&#10;----&#10;" description="Source code (java) with caption" toReformat="false" toShortenFQNames="true">
+    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adsrcotherc" value="[source,$LANG$]&#10;----&#10;$END$&#10;----&#10;" description="Source code (None) with caption" toReformat="false" toShortenFQNames="true">
+    <variable name="LANG" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adsrcxmlc" value="[source,xml]&#10;.$CAPTION$&#10;----&#10;$END$&#10;----&#10;" description="Source code (XML) with caption" toReformat="false" toShortenFQNames="true">
+    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adsrcjavascript" value="[source,javascript]&#10;----&#10;$END$&#10;----&#10;" description="Source code (Javascript)" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adsrcjavascriptc" value="[source,javascript]&#10;.$CAPTION$&#10;----&#10;$END$&#10;----&#10;" description="Source code (javascript) with caption" toReformat="false" toShortenFQNames="true">
+    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgmp" value="xref:rgcsm.adoc#_rgcsm_methods_prefixes_$methodName$[`$methodName$...()`]" description="x-ref to ref guide manpage for method prefix" toReformat="false" toShortenFQNames="true">
+    <variable name="methodName" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgsa" value="xref:rgsvc.adoc#_rgsvc_api_$ServiceType$[`$ServiceType$`]" description="x-ref to ref guide manpage for service api" toReformat="false" toShortenFQNames="true">
+    <variable name="ServiceType" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgmr" value="xref:rgcsm.adoc#_rgcsm_methods_reserved_$methodName$[`$methodName$()`]" description="x-ref to ref guide manpage for reserved method" toReformat="false" toShortenFQNames="true">
+    <variable name="methodName" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgss" value="xref:rgsvc.adoc#_rgsvc_spi_$ServiceType$[`$ServiceType$`]" description="x-ref to ref guide manpage for service spi" toReformat="false" toShortenFQNames="true">
+    <variable name="ServiceType" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgcv" value="xref:rgcsm.adoc#_rgcsm_classes_value-types_$Type$[`$Type$`]" description="x-ref to ref guide manpage for class value type" toReformat="false" toShortenFQNames="true">
+    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgcs" value="xref:rgcsm.adoc#_rgcsm_classes_super_$Type$[`$Type$`]" description="x-ref to ref guide manpage for class superclass" toReformat="false" toShortenFQNames="true">
+    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgcu" value="xref:rgcsm.adoc#_rgcsm_classes_utility_$Type$[`$Type$`]" description="x-ref to ref guide manpage for class utility" toReformat="false" toShortenFQNames="true">
+    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adanchany" value="= anchor:$prefix$[]" description="anchor to any" toReformat="false" toShortenFQNames="true">
+    <variable name="prefix" expression="" defaultValue="chapter" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgna" value="xref:rgant.adoc#_rgant_$Type$[`@$Type$`]" description="x-ref to ref guide manpage for annotation" toReformat="false" toShortenFQNames="true">
+    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adxrefany" value="xref:$chapter$[$DisplayText$]" description="x-ref to any" toReformat="false" toShortenFQNames="true">
+    <variable name="chapter" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgnt" value="xref:rgant.adoc#_rgant_$Type$_$attribute$[`@$Type$#$attribute$()`]" description="x-ref to ref guide manpage for annotation's attribute" toReformat="false" toShortenFQNames="true">
+    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="attribute" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adugvw" value="xref:ugvw.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide wicket viewer" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Wicket viewer" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgntx" value="xref:rgant.adoc#_rgant_$Type$_$attribute$[$linkText$]" description="x-ref to ref guide manpage for annotation's attribute, overriding the link text" toReformat="false" toShortenFQNames="true">
+    <variable name="Type" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="attribute" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="linkText" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adwip" value="NOTE: WIP - " description="WIP note" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adyoutubec" value=".$CAPTION$&#10;video::$REFERENCE$[youtube,width=&quot;$WIDTH$px&quot;,height=&quot;$END$$HEIGHT$px&quot;]" description="Link to youtube with caption" toReformat="false" toShortenFQNames="true">
+    <variable name="CAPTION" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="REFERENCE" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="WIDTH" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="HEIGHT" expression="" defaultValue="" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgcfg" value="xref:rgcfg.adoc#$bookmark$[$DisplayText$]" description="x-ref to ref guide configuration properties guide" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Configuration Properties guide" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adrgsvc" value="xref:rgsvc.adoc#$bookmark$[$DisplayText$]" description="xref to domain services guide" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Domain Services guide" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adugfun" value="xref:ugfun.adoc#$bookmark$[$DisplayText$]" description="xref to fundamentals guide" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Fundamentals Guide" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adai" value="Apache Isis " description="Apache Isis" toReformat="false" toShortenFQNames="true">
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adcgcon" value="xref:cgcon.adoc#$bookmark$[$DisplayText$]" description="x-ref to contributors guide" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Contributors guide" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adtg" value="xref:tg.adoc#$bookmark$[$DisplayText$]" description="x-ref to tutorials guide" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Tutorials" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adugtst" value="xref:ugtst.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide testing guide" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Testing guide" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adugbtb" value="xref:ugbtb.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide beyond the basics" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Beyond the Basics guide" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adugsec" value="xref:ugsec.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide security guide" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Security guide" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adugvro" value="xref:ugvro.adoc#$bookmark$[$DisplayText$]" description="x-ref to user guide restful objects viewer" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Wicket viewer" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
+  <template name="adcgcom" value="xref:cgcom.adoc#$bookmark$[$DisplayText$]" description="x-ref to committers guide" toReformat="false" toShortenFQNames="true">
+    <variable name="bookmark" expression="" defaultValue="" alwaysStopAt="true" />
+    <variable name="DisplayText" expression="" defaultValue="Contributors guide" alwaysStopAt="true" />
+    <context>
+      <option name="AsciiDoc" value="true" />
+    </context>
+  </template>
 </templateSet>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/screencasts.html
----------------------------------------------------------------------
diff --git a/content/screencasts.html b/content/screencasts.html
index 6ca9c5d..0e9e335 100644
--- a/content/screencasts.html
+++ b/content/screencasts.html
@@ -577,7 +577,7 @@ table.CodeRay td.code>pre{padding:0}
 <p>NB: when configuring DataNucleus for the <strong>dom</strong> project, make sure you are in the 'Java perspective', not the 'Java EE perspective').<br></p>
 </div>
 <div class="paragraph">
-<p>Learn more <a href="./guides/cg.html#_cg_ide_eclipse">here</a></p>
+<p>Learn more <a href="./guides/cgcon.html#_cgcon_ide_eclipse">here</a></p>
 </div></div></td>
 <td class="tableblock halign-left valign-top"><div><div class="videoblock">
 <div class="content">
@@ -593,7 +593,7 @@ table.CodeRay td.code>pre{padding:0}
 <p><em>How to import an Apache Isis maven-based application into IntelliJ and run the app.</em><br></p>
 </div>
 <div class="paragraph">
-<p>Learn more <a href="./guides/cg.html#_cg_ide_intellij">here</a></p>
+<p>Learn more <a href="./guides/cgcon.html#_cgcon_ide_intellij">here</a></p>
 </div></div></td>
 <td class="tableblock halign-left valign-top"><div><div class="videoblock">
 <div class="content">


[5/5] isis-site git commit: ISIS-1287: splitting out contributors vs committers guides

Posted by da...@apache.org.
ISIS-1287: splitting out contributors vs committers guides


Project: http://git-wip-us.apache.org/repos/asf/isis-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis-site/commit/029a63bf
Tree: http://git-wip-us.apache.org/repos/asf/isis-site/tree/029a63bf
Diff: http://git-wip-us.apache.org/repos/asf/isis-site/diff/029a63bf

Branch: refs/heads/asf-site
Commit: 029a63bfb643db2fa4d2fa839ef7b3f8e33b3f5a
Parents: a1ff148
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Jan 4 12:55:59 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jan 4 12:55:59 2016 +0000

----------------------------------------------------------------------
 content/documentation.html                      |   91 +-
 content/guides/cg.html                          | 9017 ------------------
 content/guides/cgcom.html                       | 3926 ++++++++
 content/guides/cgcon.html                       | 5768 +++++++++++
 content/guides/rg.html                          |    4 +-
 content/guides/rgant.html                       |   17 +-
 content/guides/rgcfg.html                       |   15 +-
 content/guides/rgcms.html                       |   15 +-
 content/guides/rgsvc.html                       |   19 +-
 content/guides/simpleapp-archetype.html         |    2 +-
 content/guides/tg.html                          |    4 +-
 content/guides/ug.html                          |   15 +-
 content/guides/ugbtb.html                       |   19 +-
 content/guides/ugfun.html                       |   23 +-
 content/guides/ugsec.html                       |   15 +-
 content/guides/ugtst.html                       |   17 +-
 content/guides/ugvro.html                       |   15 +-
 content/guides/ugvw.html                        |    4 +-
 content/help.html                               |    2 +-
 content/migration-notes.html                    |    2 +-
 .../templates/isis-asciidoc-templates-idea.xml  |  668 +-
 content/screencasts.html                        |    4 +-
 22 files changed, 10237 insertions(+), 9425 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/documentation.html
----------------------------------------------------------------------
diff --git a/content/documentation.html b/content/documentation.html
index 1013fa3..23f8240 100644
--- a/content/documentation.html
+++ b/content/documentation.html
@@ -532,16 +532,16 @@ table.CodeRay td.code>pre{padding:0}
 <div class="ulist">
 <ul>
 <li>
-<p><strong><a href="./isis-in-pictures.html">What is Apache Isis?</a> &#8230;&#8203; in pictures</strong></p>
+<p><strong><a href="./isis-in-pictures.html" target="_blank">What is Apache Isis?</a> &#8230;&#8203; in pictures</strong></p>
 </li>
 <li>
-<p><a href="./powered-by.html">Powered by Apache Isis</a></p>
+<p><a href="./powered-by.html" target="_blank">Powered by Apache Isis</a></p>
 </li>
 <li>
-<p><a href="./how-isis-works.html">How Apache Isis Works</a> <span class="image"><a class="image" href="how-isis-works.html"><img src="images/tv_show-25.png" alt="tv_show-25" width="25px"></a></span></p>
+<p><a href="./how-isis-works.html" target="_blank">How Apache Isis Works</a> <span class="image"><a class="image" href="how-isis-works.html"><img src="images/tv_show-25.png" alt="tv_show-25" width="25px"></a></span></p>
 </li>
 <li>
-<p><a href="./common-use-cases.html">Common Use Cases</a></p>
+<p><a href="./common-use-cases.html" target="_blank">Common Use Cases</a></p>
 </li>
 </ul>
 </div></div></td>
@@ -551,13 +551,13 @@ table.CodeRay td.code>pre{padding:0}
 <div class="ulist">
 <ul>
 <li>
-<p><a href="./screencasts.html">Screencasts</a> <span class="image"><a class="image" href="screencasts.html"><img src="images/tv_show-25.png" alt="tv_show-25" width="25px"></a></span></p>
+<p><a href="./screencasts.html" target="_blank">Screencasts</a> <span class="image"><a class="image" href="screencasts.html"><img src="images/tv_show-25.png" alt="tv_show-25" width="25px"></a></span></p>
 </li>
 <li>
-<p><a href="./guides/tg.html">Tutorials</a></p>
+<p><a href="./guides/tg.html" target="_blank">Tutorials</a></p>
 </li>
 <li>
-<p><a href="http://www.javadoc.io/doc/org.apache.isis.core/isis-core-applib/1.10.0">Javadoc (for Applib)</a> (not ASF)</p>
+<p><a href="http://www.javadoc.io/doc/org.apache.isis.core/isis-core-applib/1.11.0" target="_blank">Javadoc (for Applib)</a> (not ASF)</p>
 </li>
 </ul>
 </div></div></td>
@@ -567,10 +567,10 @@ table.CodeRay td.code>pre{padding:0}
 <div class="ulist">
 <ul>
 <li>
-<p><strong><a href="./cheat-sheet.html">Cheat Sheet</a></strong></p>
+<p><strong><a href="./cheat-sheet.html" target="_blank">Cheat Sheet</a></strong></p>
 </li>
 <li>
-<p><a href="./icons.html">Icons</a></p>
+<p><a href="./icons.html" target="_blank">Icons</a></p>
 </li>
 </ul>
 </div>
@@ -580,10 +580,10 @@ table.CodeRay td.code>pre{padding:0}
 <div class="ulist">
 <ul>
 <li>
-<p><a href="http://isisaddons.org">Isis addons</a></p>
+<p><a href="http://isisaddons.org" target="_blank">Isis addons</a></p>
 </li>
 <li>
-<p><a href="http://catalog.incode.org">Incode Catalog</a></p>
+<p><a href="http://catalog.incode.org" target="_blank">Incode Catalog</a></p>
 </li>
 </ul>
 </div></div></td>
@@ -643,28 +643,35 @@ table.CodeRay td.code>pre{padding:0}
 </ul>
 </div></div></td>
 <td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><strong>Contributors' Guide</strong></p>
+<p><strong>"Supporting" Guides:</strong></p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><strong><a href="./guides/cg.html" target="_blank">Contributors' Guide</a></strong></p>
+<p><strong><a href="./guides/cgcon.html" target="_blank">Contributors' Guide</a></strong></p>
+<div class="ulist">
+<ul>
+<li>
+<p>Setting up <a href="./guides/cgcon.html#_cgcon_ide_intellij" target="_blank">IntelliJ</a> or <a href="./guides/cgcon.html#_cgcon_ide_eclipse" target="_blank">Eclipse</a></p>
+</li>
+<li>
+<p><a href="./guides/cgcon.html#_cgcon_contributing" target="_blank">Contributing patches</a> (pull requests)</p>
 </li>
 </ul>
 </div>
-<div class="paragraph">
-<p>including:</p>
-</div>
+</li>
+<li>
+<p><a href="./guides/cgcom.html" target="_blank">Committers' Guide</a></p>
 <div class="ulist">
 <ul>
 <li>
-<p>Setting up <a href="./guides/cg.html#_cg_ide_intellij">IntelliJ</a> or <a href="./guides/cg.html#_cg_ide_eclipse">Eclipse</a></p>
+<p><a href="./guides/cgcom.html#_cgcom_cutting-a-release" target="_blank">Cutting a release</a></p>
 </li>
 <li>
-<p><a href="./guides/cg.html#_cg_contributing">Contributing patches</a> (pull requests)</p>
+<p><a href="./guides/cgcom.html#_cgcom_verifying-releases" target="_blank">Verifying a release</a></p>
 </li>
-<li>
-<p><a href="./guides/cg.html#_cg_committers_cutting-a-release">Cutting a release</a> ; <a href="./guides/cg.html#_cg_committers_verifying-releases">Verifying a release</a></p>
+</ul>
+</div>
 </li>
 </ul>
 </div></div></td>
@@ -680,34 +687,25 @@ table.CodeRay td.code>pre{padding:0}
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><strong>Example Apps (not ASF):</strong></p>
+<p><strong>Releases:</strong></p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><a href="http://github.com/estatio/estatio">Estatio</a></p>
-</li>
-<li>
-<p><a href="http://github.com/isisaddons/isis-app-todoapp">TodoApp</a></p>
+<p><a href="release-notes.html" target="_blank">Release Notes</a></p>
 </li>
 <li>
-<p><a href="http://github.com/isisaddons/isis-app-kitchensink">Kitchensink</a> (<a href="http://mmyco.co.uk:8180/kitchensink/">online demo, v1.10.0</a>)</p>
-</li>
-<li>
-<p><a href="http://github.com/isisaddons/isis-app-neoapp">Neo4J Example</a></p>
-</li>
-<li>
-<p><a href="http://github.com/isisaddons/isis-app-quickstart">Quickstart</a></p>
+<p><a href="migration-notes.html" target="_blank">Migration Notes</a></p>
 </li>
 </ul>
 </div>
 <div class="paragraph">
-<p>tools (not ASF):</p>
+<p><strong>Get involved!</strong></p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><a href="http://github.com/isisaddons/isis-app-simpledsl">Isis DSL Example</a></p>
+<p>Our <strong><a href="https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=87" target="_blank">Kanban board</a></strong> maps out the JIRA issues we are looking to tackle in the next few releases</p>
 </li>
 </ul>
 </div></div></td>
@@ -717,36 +715,45 @@ table.CodeRay td.code>pre{padding:0}
 <div class="ulist">
 <ul>
 <li>
-<p><a href="./articles-and-presentations.html">Articles, Conferences, Podcasts</a></p>
+<p><a href="./articles-and-presentations.html" target="_blank">Articles, Conferences, Podcasts</a></p>
 </li>
 <li>
-<p><a href="./books.html">Books</a></p>
+<p><a href="./books.html" target="_blank">Books</a></p>
 </li>
 <li>
-<p><a href="./resources/thesis/Pawson-Naked-Objects-thesis.pdf">Naked Objects PhD thesis</a> (Pawson)</p>
+<p><a href="./resources/thesis/Pawson-Naked-Objects-thesis.pdf" target="_blank">Naked Objects PhD thesis</a> (Pawson)</p>
 </li>
 </ul>
 </div></div></td>
 <td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><strong>Releases:</strong></p>
+<p><strong>Example Apps (not ASF):</strong></p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p><a href="release-notes.html">Release Notes</a></p>
+<p><a href="http://github.com/estatio/estatio" target="_blank">Estatio</a></p>
 </li>
 <li>
-<p><a href="migration-notes.html">Migration Notes</a></p>
+<p><a href="http://github.com/isisaddons/isis-app-todoapp" target="_blank">TodoApp</a></p>
+</li>
+<li>
+<p><a href="http://github.com/isisaddons/isis-app-kitchensink" target="_blank">Kitchensink</a> (<a href="http://mmyco.co.uk:8180/kitchensink/">online demo, v1.10.0</a>)</p>
+</li>
+<li>
+<p><a href="http://github.com/isisaddons/isis-app-neoapp" target="_blank">Neo4J Example</a></p>
+</li>
+<li>
+<p><a href="http://github.com/isisaddons/isis-app-quickstart" target="_blank">Quickstart</a></p>
 </li>
 </ul>
 </div>
 <div class="paragraph">
-<p><strong>Get involved!</strong></p>
+<p>tools (not ASF):</p>
 </div>
 <div class="ulist">
 <ul>
 <li>
-<p>Our <a href="https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=87"><strong>Kanban board</strong></a> maps out the JIRA issues we are looking to tackle in the next few releases</p>
+<p><a href="http://github.com/isisaddons/isis-app-simpledsl" target="_blank">Isis DSL Example</a></p>
 </li>
 </ul>
 </div></div></td>


[4/5] isis-site git commit: ISIS-1287: splitting out contributors vs committers guides

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/cg.html
----------------------------------------------------------------------
diff --git a/content/guides/cg.html b/content/guides/cg.html
deleted file mode 100644
index 249c54b..0000000
--- a/content/guides/cg.html
+++ /dev/null
@@ -1,9017 +0,0 @@
-<!doctype html>
-<html class="no-js" lang="en">
-<head>
-    <meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
-
-    <title>Contributors Guide</title>
-
-    <!--
-        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.
-    -->
-
-    <!-- No caching headers -->
-    <meta http-equiv="cache-control" content="no-cache" />
-    <meta http-equiv="pragma" content="no-cache" />
-    <meta http-equiv="expires" content="-1" />
-
-
-    <!-- TODO: need to (re)instate CDN in the future (not using for now just so can develop off-line -->
-    <link href="../css/foundation/5.5.1/foundation.css" rel="stylesheet" />
-    <script src="../js/foundation/5.5.1/vendor/modernizr.js"></script>
-    <link href="../css/asciidoctor/colony.css" rel="stylesheet">
-    <link href="../css/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
-
-
-
-
-    <link href="../css/github-fork-ribbon-css/0.1.1/gh-fork-ribbon.css" rel="stylesheet" />
-    <!--[if lt IE 9]>
-      <link href="../css/github-fork-ribbon-css/0.1.1/gh-fork-ribbon.ie.css" rel="stylesheet" />
-    <![endif]-->
-
-
-
-    <style type="text/css">
-        pre code {
-            background-color: inherit;
-            border-style: none;
-        }
-
-        pre code > span:first-child {
-            margin-left: -5px;
-        }
-
-    <style>
-
-    <!--
-    <style type="text/css">
-        /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
-/*pre.CodeRay {background-color:#f7f7f8;}*/
-.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
-.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
-.CodeRay .line-numbers strong{font-weight: normal}
-table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
-table.CodeRay td{vertical-align: top}
-table.CodeRay td.line-numbers{text-align:right}
-table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
-table.CodeRay td.code{padding:0 0 0 .5em}
-table.CodeRay td.code>pre{padding:0}
-.CodeRay .debug{color:#fff !important;background:#000080 !important}
-.CodeRay .annotation{color:#007}
-.CodeRay .attribute-name{color:#000080}
-.CodeRay .attribute-value{color:#700}
-.CodeRay .binary{color:#509}
-.CodeRay .comment{color:#998;font-style:italic}
-.CodeRay .char{color:#04d}
-.CodeRay .char .content{color:#04d}
-.CodeRay .char .delimiter{color:#039}
-.CodeRay .class{color:#458;font-weight:bold}
-.CodeRay .complex{color:#a08}
-.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
-.CodeRay .color{color:#099}
-.CodeRay .class-variable{color:#369}
-.CodeRay .decorator{color:#b0b}
-.CodeRay .definition{color:#099}
-.CodeRay .delimiter{color:#000}
-.CodeRay .doc{color:#970}
-.CodeRay .doctype{color:#34b}
-.CodeRay .doc-string{color:#d42}
-.CodeRay .escape{color:#666}
-.CodeRay .entity{color:#800}
-.CodeRay .error{color:#808}
-.CodeRay .exception{color:inherit}
-.CodeRay .filename{color:#099}
-.CodeRay .function{color:#900;font-weight:bold}
-.CodeRay .global-variable{color:#008080}
-.CodeRay .hex{color:#058}
-.CodeRay .integer,.CodeRay .float{color:#099}
-.CodeRay .include{color:#555}
-.CodeRay .inline{color:#00}
-.CodeRay .inline .inline{background:#ccc}
-.CodeRay .inline .inline .inline{background:#bbb}
-.CodeRay .inline .inline-delimiter{color:#d14}
-.CodeRay .inline-delimiter{color:#d14}
-.CodeRay .important{color:#555;font-weight:bold}
-.CodeRay .interpreted{color:#b2b}
-.CodeRay .instance-variable{color:#008080}
-.CodeRay .label{color:#970}
-.CodeRay .local-variable{color:#963}
-.CodeRay .octal{color:#40e}
-.CodeRay .predefined{color:#369}
-.CodeRay .preprocessor{color:#579}
-.CodeRay .pseudo-class{color:#555}
-.CodeRay .directive{font-weight:bold}
-.CodeRay .type{font-weight:bold}
-.CodeRay .predefined-type{color:inherit}
-.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
-.CodeRay .key{color:#808}
-.CodeRay .key .delimiter{color:#606}
-.CodeRay .key .char{color:#80f}
-.CodeRay .value{color:#088}
-.CodeRay .regexp .delimiter{color:#808}
-.CodeRay .regexp .content{color:#808}
-.CodeRay .regexp .modifier{color:#808}
-.CodeRay .regexp .char{color:#d14}
-.CodeRay .regexp .function{color:#404;font-weight:bold}
-.CodeRay .string{color:#d20}
-.CodeRay .string .string .string{background:#ffd0d0}
-.CodeRay .string .content{color:#d14}
-.CodeRay .string .char{color:#d14}
-.CodeRay .string .delimiter{color:#d14}
-.CodeRay .shell{color:#d14}
-.CodeRay .shell .delimiter{color:#d14}
-.CodeRay .symbol{color:#990073}
-.CodeRay .symbol .content{color:#a60}
-.CodeRay .symbol .delimiter{color:#630}
-.CodeRay .tag{color:#008080}
-.CodeRay .tag-special{color:#d70}
-.CodeRay .variable{color:#036}
-.CodeRay .insert{background:#afa}
-.CodeRay .delete{background:#faa}
-.CodeRay .change{color:#aaf;background:#007}
-.CodeRay .head{color:#f8f;background:#505}
-.CodeRay .insert .insert{color:#080}
-.CodeRay .delete .delete{color:#800}
-.CodeRay .change .change{color:#66f}
-.CodeRay .head .head{color:#f4f}
-
-        pre.CodeRay code {
-            background-color: inherit;
-            border-style: none;
-        }
-
-        pre.CodeRay code > span:first-child {
-            margin-left: -5px;
-        }
-
-        .literalblock pre,
-        .listingblock pre:not(.highlight),
-        .listingblock pre[class="highlight"],
-        .listingblock pre[class^="highlight "],
-        .listingblock pre.CodeRay,
-        .listingblock pre.prettyprint {
-            background: rgb(253, 250, 246);
-         }
-        .sidebarblock .literalblock pre,
-        .sidebarblock .listingblock pre:not(.highlight),
-        .sidebarblock .listingblock pre[class="highlight"],
-        .sidebarblock .listingblock pre[class^="highlight "],
-        .sidebarblock .listingblock pre.CodeRay,
-        .sidebarblock .listingblock pre.prettyprint {
-            background: rgb(253, 250, 246);
-         }
-
-    <style>
-    -->
-
-    <style>
-    .github-fork-ribbon-wrapper.right {
-        position: fixed;
-    }
-    .github-fork-ribbon {
-        background: #090;
-    }
-    .github-fork-ribbon a:hover {
-        background:#0D0;
-        color:#fff;
-        font-size: 1.1em;
-    }
-    </style>
-
-    <style>
-        @media only screen and (min-width: 40.063em) {
-          .top-bar {
-            .contain-to-grid .top-bar {
-                max-width: 80rem;
-            }
-          }
-        }
-        .row {
-            max-width: 80rem;
-        }
-    </style>
-
-    <style>
-        .extended-quote,
-        .extended-quote-first {
-            margin-left: 40px;
-            margin-right: 40px;
-            font-style: italic;
-        }
-        .extended-quote-attribution {
-            text-align: right;
-            margin-right: 100px;
-            color: #10B061;
-        }
-
-        .extended-quote-first:before {
-            content: "\201c";
-            float: left;
-            font-size: 2.75em;
-            font-weight: bold;
-            line-height: 0.6em;
-            margin-left: -0.6em;
-            color: #003b6b;
-            text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
-        }
-        
-    </style>
-
-    <style>
-        body {
-          position: relative;
-        }
-
-        *:not(pre) a > code {
-            color: #210DDC;
-        }
-
-        *:not(pre) > code {
-            background-color: inherit;
-            border: none;
-            font-weight: normal;
-        }
-
-        body div#toc li,
-        body div#toc2 li {
-            list-style-type: none;
-        }
-
-        div#doc-content {
-            margin-top: 30px;
-        }
-
-        div.documentation-page table.frame-all {
-            border-left: none;
-            border-right: none;
-        }
-
-        body div#toc li.active-region:before,
-        body div#toc2 li.active-region:before {
-            content: "\00BB \0020";
-            margin-left: -12px;
-        }
-
-        body div#toc li a.active,
-        body div#toc2 li a.active {
-            color: red;
-        }
-
-        body div#toc.toc,
-        body div#toc.toc2 {
-            position: fixed;
-            left: auto;
-            padding-top: 60px;
-            z-index: auto;
-            background-color: white;
-            border-left-color: #eee;
-            border-left-style: solid;
-            border-right: none;
-            min-height: 2000px;
-        }
-
-    </style>
-
-    <style>
-
-        @media only screen and (min-width: 768px) {
-          #toc.toc2 ul ul { margin-left: -10px; }
-        }
-
-
-        body div#toc .tocify-subheader ul {
-            margin-bottom: 0px;
-        }
-
-        body div#toc .tocify-subheader li {
-            font-size: 14px;
-        }
-        .tocify li.tocify-item, .tocify ul.tocify-item {
-            line-height: 24px;
-        }
-
-        body div#toc li.tocify-item.active:before,
-        body div#toc2 li.tocify-item.active:before {
-            content: "\00BB \0020";
-            margin-left: -12px;
-        }
-
-        body div#toc li.tocify-item.active a,
-        body div#toc2 li.tocify-item.active a {
-            color: red;
-        }
-    </style>
-
-    <style>
-        footer {
-            margin-top: 1000px;
-        }
-    </style>
-
-    <style>
-        /* overriding colony.css stylesheet */
-        .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] {
-           /*padding: 1.25em 1.5625em 1.125em 1.5625em;*/
-           padding: 0.3em 0.6em 0.25em 0.6em;
-        }
-        @media only screen and (min-width: 1280px)
-        #toc.toc2 {
-          /*width: 20em;*/
-          width: 25em;
-        }
-
-        #doc-content a {
-          color: #210DDC;
-        }
-
-        .top-bar h1 {
-            border-bottom: inherit;
-        }
-
-        h2 {
-          margin-top: 80px;
-        }
-        h3 {
-          margin-top: 40px;
-        }
-        h4,h5 {
-          margin-top: 30px;
-        }
-
-        .admonitionblock.tip > table td.content {
-            color: #10B061;
-        }
-        .admonitionblock.note > table td.content {
-            color: #B509AB;
-        }
-        .admonitionblock.important > table td.content {
-            color: #D5810A;
-        }
-
-        .admonitionblock .title {
-            font-size: larger;
-            font-style: italic;
-        }
-
-        .imageblock img {
-            margin-bottom: 10px;
-        }
-    </style>
-
-    <style>
-        /* from http://ben.balter.com/2014/03/13/pages-anchor-links/ */
-        .header-link {
-          position: absolute;
-          left: -0.5em;
-          opacity: 0;
-
-          /*
-          -webkit-transition: opacity 0.2s ease-in-out 0.1s;
-          -moz-transition: opacity 0.2s ease-in-out 0.1s;
-          -ms-transition: opacity 0.2s ease-in-out 0.1s;
-          */
-        }
-
-        h2:hover .header-link,
-        h3:hover .header-link,
-        h4:hover .header-link,
-        h5:hover .header-link,
-        h6:hover .header-link {
-          opacity: 1;
-        }
-    </style>
-
-    <style>
-        .top-bar
-        {
-            -webkit-transition-duration: .5s;
-            transition-duration: .5s;
-
-            -webkit-transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
-            transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
-
-            -webkit-transition-property: -webkit-transform;
-            transition-property: transform;
-        }
-
-        /*
-        http://osvaldas.info/auto-hide-sticky-header
-        MIT license
-        */
-        .header--hidden
-        {
-            -webkit-transform: translateY( -100% );
-            -ms-transform: translateY( -100% );
-            transform: translateY( -100% );
-
-            transition-duration: .5s;
-            transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
-            -webkit-transition-property: -webkit-transform;
-            transition-property: transform;
-        }
-    </style>
-
-    <style>
-        #doc-content a.guide {
-            color: white;
-        }
-    </style>
-
-    <style>
-        .tocify {
-            margin-top: 80px;
-        }
-    </style>
-
-
-</script>
-
-</head>
-<body>
-
-<<div class="github-fork-ribbon-wrapper right" style="position: fixed;">
-    <div class="github-fork-ribbon">
-        <a href="https://github.com/apache/isis/fork">Fork me on GitHub</a>
-    </div>
-</div>
-
-
-<div class="row">
-
-    <div class="fixed contain-to-grid header">
-        <nav class="top-bar" data-topbar role="navigation" style="max-width: 80rem">
-            <ul class="title-area">
-                <li class="name">
-                    <h1>
-                        <a href="/index.html">Apache Isis&trade;</a>
-                    </h1>
-                </li>
-                <!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
-                <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
-            </ul>
-
-            <section class="top-bar-section">
-                <ul class="right">
-
-                    <li class="has-form">
-                       <FORM class="searchbox navbar-form navbar-right" id="searchbox_012614087480249044419:dn-q5gtwxya" action="http://www.google.com/cse">
-                        <div class="row collapse">
-                            <input type="hidden" name="cx" value="012614087480249044419:dn-q5gtwxya">
-                            <INPUT type="hidden" name="cof" value="FORID:0">
-                            <INPUT class="form-control" name="q" type="text" placeholder="Search">
-                        </div>
-                    </FORM>
-                     </li>
-
-                </ul>
-
-                <!-- Left Nav Section -->
-                <ul class="left">
-
-                    <li><a href="/documentation.html">Documentation</a></li>
-                    <li><a href="/downloads.html">Downloads</a></li>
-                    <li><a href="/help.html">Help</a></li>
-                    <li><a href="/asf.html">@ASF</a></li>
-
-                </ul>
-
-            </section>
-        </nav>
-    </div>
-</div>
-
-<div class="row">
-
-    <div id="doc-content-left" class="large-9 medium-9 columns">
-
-
-        <div id="doc-content">
-          <div class="sect1">
-<h2 id="_cg">1. Contributors' Guide</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>This contributors' guide has three related audiences:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>programmers who want to just use Apache Isis to build applications, and want help setting up their development
-environment or to build their code from the command line (eg to execute within a continuous integration server such
-as Jenkins)</p>
-</li>
-<li>
-<p>programmers who want to contribute back patches (bug fixes, new features) either to the codebase or the framework&#8217;s documentation</p>
-</li>
-<li>
-<p>committers of Apache Isis itself who want guidance on release process, publishing documents and other related procedures.</p>
-</li>
-</ul>
-</div>
-<div class="sect2">
-<h3 id="_other_guides">1.1. Other Guides</h3>
-<div class="paragraph">
-<p>Apache Isis documentation is broken out into a number of user and reference guides.</p>
-</div>
-<div class="paragraph">
-<p>The user guides available are:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><a href="ugfun.html">Fundamentals</a></p>
-</li>
-<li>
-<p><a href="ugvw.html">Wicket viewer</a></p>
-</li>
-<li>
-<p><a href="ugvro.html">Restful Objects viewer</a></p>
-</li>
-<li>
-<p><a href="ugsec.html">Security</a></p>
-</li>
-<li>
-<p><a href="ugtst.html">Testing</a></p>
-</li>
-<li>
-<p><a href="ugbtb.html">Beyond the Basics</a></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>The reference guides are:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><a href="rgant.html">Annotations</a></p>
-</li>
-<li>
-<p><a href="rgsvc.html">Domain Services</a></p>
-</li>
-<li>
-<p><a href="rgcfg.html">Configuration Properties</a></p>
-</li>
-<li>
-<p><a href="rgcms.html">Classes, Methods and Schema</a></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>In addition, there is (this) <a href="#_cg">Contributors' Guide</a> describing development practices for contributors and committers alike.</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_cg_ide">2. Using an IDE</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>The vast majority of Java developers use an IDE to assist with developing their code, and we highly recommend that you do like wise as you develop your Apache Isis applications using an IDE.  Apache Isis is built with Maven, and all modern IDEs can import Maven projects.</p>
-</div>
-<div class="paragraph">
-<p>This chapter shows how to setup and use two of the most popular IDEs, IntelliJ IDEA and Eclipse.</p>
-</div>
-<div class="sect2">
-<h3 id="_cg_ide_intellij">2.1. Developing using IntelliJ IDEA</h3>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>This material does not constitute an endorsement; JetBrains is not affiliated to Apache Software Foundation in any way.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>This section describes how to install and setup JetBrains' IntelliJ IDEA, then how to import an application into IntelliJ and run it.</p>
-</div>
-<div class="sect3">
-<h4 id="_installing_and_setting_up">2.1.1. Installing and Setting up</h4>
-<div class="paragraph">
-<p>This section covers installation and setup. These notes relates to IntelliJ Community Edition 14.1.x, with
-screenshots taken for Windows.</p>
-</div>
-<div class="sect4">
-<h5 id="_download_and_install">Download and Install</h5>
-<div class="paragraph">
-<p><a href="https://www.jetbrains.com/idea/download/">Download</a> latest version of IntelliJ Community Edition, and install:</p>
-</div>
-<div class="paragraph">
-<p>Start the wizard, click through the welcome page:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/010-installing/010-welcome-page.png" alt="010 welcome page" width="400px">
-</div>
-<div class="title">Figure 1. IntelliJ Installation Wizard - Welcome page</div>
-</div>
-<div class="paragraph">
-<p>Choose the location to install the IDE:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/010-installing/020-choose-location.png" alt="020 choose location" width="400px">
-</div>
-<div class="title">Figure 2. IntelliJ Installation Wizard - Choose Location</div>
-</div>
-<div class="paragraph">
-<p>Adjust any installation options as you prefer:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/010-installing/030-installation-options.png" alt="030 installation options" width="400px">
-</div>
-<div class="title">Figure 3. IntelliJ Installation Wizard - Installation Options</div>
-</div>
-<div class="paragraph">
-<p>and the start menu:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/010-installing/040-start-menu-folder.png" alt="040 start menu folder" width="400px">
-</div>
-<div class="title">Figure 4. IntelliJ Installation Wizard - Start Menu Folder</div>
-</div>
-<div class="paragraph">
-<p>and finish up the wizard:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/010-installing/050-completing.png" alt="050 completing" width="400px">
-</div>
-<div class="title">Figure 5. IntelliJ Installation Wizard - Completing the Wizard</div>
-</div>
-<div class="paragraph">
-<p>Later on we&#8217;ll specify the Apache Isis/ASF code style settings, so for now select <code>I do not want to import settings</code>:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/010-installing/060-import-settings-or-not.png" alt="060 import settings or not" width="400px">
-</div>
-<div class="title">Figure 6. IntelliJ Installation Wizard - Import Settings</div>
-</div>
-<div class="paragraph">
-<p>Finally, if you are young and trendy, set the UI theme to Darcula:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/010-installing/070-set-ui-theme.png" alt="070 set ui theme" width="600px">
-</div>
-<div class="title">Figure 7. IntelliJ Installation Wizard Set UI Theme</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_new_project">New Project</h5>
-<div class="paragraph">
-<p>In IntelliJ a project can contain multiple modules; these need not be physically located together.  (If you are previously an Eclipse user, you can think of it as similar to an Eclipse workspace).</p>
-</div>
-<div class="paragraph">
-<p>Start off by creating a new project:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/010-new-project-create.png" alt="010 new project create" width="400px">
-</div>
-<div class="title">Figure 8. IntelliJ Create New Project</div>
-</div>
-<div class="paragraph">
-<p>We want to create a new <strong>Java</strong> project:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/020-java-project-setup-jdk.png" alt="020 java project setup jdk" width="600px">
-</div>
-<div class="title">Figure 9. IntelliJ Create New Project - Create a Java project</div>
-</div>
-<div class="paragraph">
-<p>We therefore need to specify the JDK.</p>
-</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for support in Apache Isis v1.9.0
-</td>
-</tr>
-</table>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/030-java-project-select-jdk.png" alt="030 java project select jdk" width="300px">
-</div>
-<div class="title">Figure 10. IntelliJ Create New Java Project - Select the JDK</div>
-</div>
-<div class="paragraph">
-<p>Specify the directory containing the JDK:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/050-name-and-location.png" alt="050 name and location" width="400px">
-</div>
-<div class="title">Figure 11. IntelliJ Create New Project - Select the JDK location</div>
-</div>
-<div class="paragraph">
-<p>Finally allow IntelliJ to create the directory for the new project:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/060-create-dir.png" alt="060 create dir" width="200px">
-</div>
-<div class="title">Figure 12. IntelliJ Create New Project</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_import_settings">Import Settings</h5>
-<div class="paragraph">
-<p>Next we need to configure IntelliJ with ASF/Apache Isis' standard templates and coding conventions.  These are bundled as the <code>settings.jar</code> JAR file <a href="resources/appendices/dev-env/intellij/isis-settings.jar">download from the Apache Isis website</a>).</p>
-</div>
-<div class="paragraph">
-<p>Import using: <code>File &gt; Import Settings</code>, and specify the directory that you have downloaded the file to:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/030-import-settings/010-settings-import-jar.png" alt="010 settings import jar" width="400px">
-</div>
-<div class="title">Figure 13. IntelliJ Import Settings - Specify JAR file</div>
-</div>
-<div class="paragraph">
-<p>Select all the (two) categories of settings available in the JAR file:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/030-import-settings/020-select-all.png" alt="020 select all" width="300px">
-</div>
-<div class="title">Figure 14. IntelliJ Import Settings - Select all categories</div>
-</div>
-<div class="paragraph">
-<p>And then restart:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/030-import-settings/030-restart.png" alt="030 restart" width="200px">
-</div>
-<div class="title">Figure 15. IntelliJ Import Settings - Restart</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_cg_ide_intellij_other-settings-compiler">Other Settings (Compiler)</h5>
-<div class="paragraph">
-<p>There are also some other settings that influence the compiler.  We highly recommend you set these.</p>
-</div>
-<div class="paragraph">
-<p>On the <strong>Compiler</strong> Settings page, ensure that <code>build automatically</code> is enabled (and optionally <code>compile independent modules in parallel</code>):</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png" alt="010 build automatically" width="600px">
-</div>
-<div class="title">Figure 16. IntelliJ Compiler Settings</div>
-</div>
-<div class="paragraph">
-<p>On the <strong>Annotation Processors</strong> page, enable and adjust for the 'default' setting:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png" alt="020 annotation processor" width="600px">
-</div>
-<div class="title">Figure 17. IntelliJ Annotation Processor Settings</div>
-</div>
-<div class="paragraph">
-<p>This setting enables the generation of the <code>Q*</code> classes for DataNucleus type-safe queries, as well as being required
-for frameworks such as <a href="#_cg_ide_project-lombok">Project Lombok</a>.</p>
-</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>IntelliJ may also have inferred these settings for specific projects/modules when importing; review the list on the left to see if the default is overridden and fix/delete as required.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_cg_ide_intellij_other-settings-maven">Other Settings (Maven)</h5>
-<div class="paragraph">
-<p>There are also some other settings for Maven that we recommend you adjust (though these are less critical):</p>
-</div>
-<div class="paragraph">
-<p>First, specify an up-to-date Maven installation, using <code>File &gt; Settings</code> (or <code>IntelliJ &gt; Preferences</code> if on MacOS):</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png" alt="010 maven installation" width="600px">
-</div>
-<div class="title">Figure 18. IntelliJ Maven Settings - Installation</div>
-</div>
-<div class="paragraph">
-<p>Still on the Maven settings page, configure as follows:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png" alt="020 maven configuration" width="600px">
-</div>
-<div class="title">Figure 19. IntelliJ Maven Settings - Configuration</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_other_settings_misc">Other Settings (Misc)</h5>
-<div class="paragraph">
-<p>These settings are optional but also recommended.</p>
-</div>
-<div class="paragraph">
-<p>On the <strong>auto import</strong> page, check the <code>optimize imports on the fly</code> and <code>add unambiguous imports on the fly</code></p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png" alt="010 auto import" width="600px">
-</div>
-<div class="title">Figure 20. IntelliJ Maven Settings - Auto Import</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_importing_maven_modules">2.1.2. Importing Maven Modules</h4>
-<div class="paragraph">
-<p>Let&#8217;s load in some actual code!  We do this by importing the Maven modules.</p>
-</div>
-<div class="paragraph">
-<p>First up, open up the Maven tool window (<code>View &gt; Tool Windows &gt; Maven Projects</code>).  You can then use the 'plus' button to add Maven modules.  In the screenshot you can see we&#8217;ve loaded in Apache Isis core; the modules are listed in the <em>Maven Projects</em> window and corresponding (IntelliJ) modules are shown in the <em>Projects</em> window:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/010-maven-modules-view.png" alt="010 maven modules view" width="730px">
-</div>
-<div class="title">Figure 21. IntelliJ Maven Module Management - Importing Maven modules</div>
-</div>
-<div class="paragraph">
-<p>We can then import another module (from some other directory).  For example, here we are importing the Isis Addons' todoapp example:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/020-adding-another-module.png" alt="020 adding another module" width="400px">
-</div>
-<div class="title">Figure 22. IntelliJ Maven Module Management - Importing another Module</div>
-</div>
-<div class="paragraph">
-<p>You should then see the new Maven module loaded in the <em>Projects</em> window and also the <em>Maven Projects</em> window:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/030-other-module-added.png" alt="030 other module added" width="730px">
-</div>
-<div class="title">Figure 23. IntelliJ Maven Module Management -</div>
-</div>
-<div class="paragraph">
-<p>If any dependencies are already loaded in the project, then IntelliJ will automatically update the CLASSPATH to resolve to locally held modules (rather from <code>.m2/repository</code> folder).  So, for example (assuming that the <code>&lt;version&gt;</code> is correct, of course), the Isis todoapp will have local dependencies on the Apache Isis core.</p>
-</div>
-<div class="paragraph">
-<p>You can press F4 (or use <code>File &gt; Project Structure</code>) to see the resolved classpath for any of the modules loaded into the project.</p>
-</div>
-<div class="paragraph">
-<p>If you want to focus on one set of code (eg the Isis todoapp but not Apache Isis core) then you <em>could</em> remove the module; but better is to ignore those modules.  This will remove from the the <em>Projects</em> window but keep them available in the <em>Maven Projects</em> window for when you next want to work on them:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/040-ignoring-modules.png" alt="040 ignoring modules" width="730px">
-</div>
-<div class="title">Figure 24. IntelliJ Maven Module Management - Ignoring Modules</div>
-</div>
-<div class="paragraph">
-<p>Confirm that it&#8217;s ok to ignore these modules:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/050-ignoring-modules-2.png" alt="050 ignoring modules 2" width="300px">
-</div>
-<div class="title">Figure 25. IntelliJ Maven Module Management - Ignoring Modules (ctd)</div>
-</div>
-<div class="paragraph">
-<p>All being well you should see that the <em>Projects</em> window now only contains the code you are working on.  Its classpath dependencies will be adjusted (eg to resolve to Apache Isis core from <code>.m2/repository</code>):</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/060-ignored-modules.png" alt="060 ignored modules" width="730px">
-</div>
-<div class="title">Figure 26. IntelliJ Maven Module Management - Updated Projects Window</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_running">2.1.3. Running</h4>
-<div class="paragraph">
-<p>Let&#8217;s see how to run both the app and the tests.</p>
-</div>
-<div class="sect4">
-<h5 id="_running_the_app">Running the App</h5>
-<div class="paragraph">
-<p>Once you&#8217;ve imported your Isis application, we should run it.  We do this by creating a Run configuration, using <code>Run &gt; Edit Configurations</code>.</p>
-</div>
-<div class="paragraph">
-<p>Set up the details as follows:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/010-run-configuration.png" alt="010 run configuration" width="600px">
-</div>
-<div class="title">Figure 27. IntelliJ Running the App - Run Configuration</div>
-</div>
-<div class="paragraph">
-<p>We specify the <code>Main class</code> to be <code>org.apache.isis.WebServer</code>; this is a wrapper around Jetty.  It&#8217;s possible to pass program arguments to this (eg to automatically install fixtures), but for now leave this blank.</p>
-</div>
-<div class="paragraph">
-<p>Also note that <code>Use classpath of module</code> is the webapp module for your app, and that the <code>working directory</code> is <code>$MODULE_DIR$</code>.</p>
-</div>
-<div class="paragraph">
-<p>Next, and most importantly, configure the DataNucleus enhancer to run for your <code>dom</code> goal.  This can be done by defining a Maven goal to run before the app:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/020-datanucleus-enhancer-goal.png" alt="020 datanucleus enhancer goal" width="400px">
-</div>
-<div class="title">Figure 28. IntelliJ Running the App - Datanucleus Enhancer Goal</div>
-</div>
-<div class="paragraph">
-<p>The <code>-o</code> flag in the goal means run off-line; this will run faster.</p>
-</div>
-<div class="admonitionblock warning">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-warning" title="Warning"></i>
-</td>
-<td class="content">
-if you forget to set up the enhancer goal, or don&#8217;t run it on the correct (dom) module, then you will get all sorts of errors when you startup.  These usually manifest themselves as class cast exception in DataNucleus.
-</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>You should now be able to run the app using <code>Run &gt; Run Configuration</code>.  The same configuration can also be used to debug the app if you so need.</p>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_running_the_unit_tests">Running the Unit Tests</h5>
-<div class="paragraph">
-<p>The easiest way to run the unit tests is just to right click on the <code>dom</code> module in the <em>Project Window</em>, and choose run unit tests.  Hopefully your tests will pass (!).</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/030-running-unit-tests.png" alt="030 running unit tests" width="600px">
-</div>
-<div class="title">Figure 29. IntelliJ Running the App - Unit Tests Run Configuration</div>
-</div>
-<div class="paragraph">
-<p>As a side-effect, this will create a run configuration, very similar to the one we manually created for the main app:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/040-running-unit-tests-run-configuration.png" alt="040 running unit tests run configuration" width="600px">
-</div>
-<div class="title">Figure 30. IntelliJ Running the App - Unit Tests Run Configuration</div>
-</div>
-<div class="paragraph">
-<p>Thereafter, you should run units by selecting this configuration (if you use the right click approach you&#8217;ll end up with lots of run configurations, all similar).</p>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_running_the_integration_tests">Running the Integration Tests</h5>
-<div class="paragraph">
-<p>Integration tests can be run in the same way as unit tests, however the <code>dom</code> module must also have been enhanced.</p>
-</div>
-<div class="paragraph">
-<p>One approach is to initially run the tests use the right click on the <code>integtests</code> module; the tests will fail because the code won&#8217;t have been enhanced, but we can then go and update the run configuration to run the datanucleus enhancer goal (same as when running the application):</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/050-running-integration-tests-run-configuration.png" alt="050 running integration tests run configuration" width="600px">
-</div>
-<div class="title">Figure 31. IntelliJ Running the App - Integration Tests Run Configuration</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_hints_and_tips">2.1.4. Hints and Tips</h4>
-<div class="sect4">
-<h5 id="_keyboard_cheat_sheets">Keyboard Cheat Sheets</h5>
-<div class="paragraph">
-<p>You can download 1-page PDFs cheat sheets for IntelliJ&#8217;s keyboard shortcuts:
-* for <a href="https://www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard.pdf">Windows</a>
-* for <a href="https://www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard_Mac.pdf">MacOS</a></p>
-</div>
-<div class="paragraph">
-<p>Probably the most important shortcut on them is for <code>Find Action</code>:
-- <code>ctrl-shift-A</code> on Windows
-- <code>cmd-shift-A</code> on MacOS.</p>
-</div>
-<div class="paragraph">
-<p>This will let you search for any action just by typing its name.</p>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_switch_between_tools_editors">Switch between Tools &amp; Editors</h5>
-<div class="paragraph">
-<p>The Tool Windows are the views around the editor (to left, bottom and right).  It&#8217;s possible to move these around to your preferred locations.</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>Use <code>alt-1</code> through <code>alt-9</code> (or <code>cmd-1</code> through <code>alt-9</code>) to select the tool windows</p>
-<div class="ulist">
-<ul>
-<li>
-<p>Press it twice and the tool window will hide itself; so can use to toggle</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>If in the <em>Project Window</em> (say) and hit enter on a file, then it will be shown in the editor, but (conveniently) the focus remains in the tool window.  To switch to the editor, just press <code>Esc</code>.</p>
-<div class="ulist">
-<ul>
-<li>
-<p>If in the <em>Terminal Window</em>, you&#8217;ll need to press <code>Shift-Esc</code>.</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>If on the editor and want to locate the file in (say) the <em>Project Window</em>, use <code>alt-F1</code>.</p>
-</li>
-<li>
-<p>To change the size of any tool window, use <code>ctrl-shift-arrow</code></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Using these shortcuts you can easily toggle between the tool windows and the editor, without using the mouse.  Peachy!</p>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_navigating_around">Navigating Around</h5>
-<div class="paragraph">
-<p>For all of the following, you don&#8217;t need to type every letter, typing "ab" will actually search for ".<strong>a.*b.</strong>".</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>to open classes or files or methods that you know the name of:</p>
-<div class="ulist">
-<ul>
-<li>
-<p><code>ctrl-N</code> to open class</p>
-</li>
-<li>
-<p><code>ctrl-shift-N</code> to open a file</p>
-</li>
-<li>
-<p>(bit fiddly this) <code>ctrl-shift-alt-N</code> to search for any symbol.</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>open up dialog of recent files: <code>ctrl-E</code></p>
-</li>
-<li>
-<p>search for any file: <code>shift-shift</code></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Navigating around:
-* find callers of a method (the call hierarchy): <code>ctrl-alt-H</code>
-* find subclasses or overrides: <code>ctrl-alt-B</code>
-* find superclasses/interface/declaration: <code>ctrl-B</code></p>
-</div>
-<div class="paragraph">
-<p>Viewing the structure (ie outline) of a class
-* <code>ctrl-F12</code> will pop-up a dialog showing all members
-** hit <code>ctrl-F12</code> again to also see inherited members</p>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_editing">Editing</h5>
-<div class="ulist">
-<ul>
-<li>
-<p>Extend selection using <code>ctrl-W</code></p>
-<div class="ulist">
-<ul>
-<li>
-<p>and contract it down again using <code>ctrl-shift-W</code></p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>to duplicate a line, it&#8217;s <code>ctrl-D</code></p>
-<div class="ulist">
-<ul>
-<li>
-<p>if you have some text selected (or even some lines), it&#8217;ll actually duplicate the entire selection</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>to delete a line, it&#8217;s <code>ctrl-X</code></p>
-</li>
-<li>
-<p>to move a line up or down: <code>shift-alt-up</code> and <code>shift-alt-down</code></p>
-<div class="ulist">
-<ul>
-<li>
-<p>if you have selected several lines, it&#8217;ll move them all togethe</p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p><code>ctrl-shift-J</code> can be handy for joining lines together</p>
-<div class="ulist">
-<ul>
-<li>
-<p>just hit enter to split them apart (even in string quotes; IntelliJ will "do the right thing")</p>
-</li>
-</ul>
-</div>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_intentions_and_code_completion">Intentions and Code Completion</h5>
-<div class="paragraph">
-<p>Massively useful is the "Intentions" popup; IntelliJ tries to guess what you might want to do.  You can activate this using`alt-enter`, whenever you see a lightbulb/tooltip in the margin of the current line.</p>
-</div>
-<div class="paragraph">
-<p>Code completion usually happens whenever you type '.'.  You can also use <code>ctrl-space</code> to bring these up.</p>
-</div>
-<div class="paragraph">
-<p>In certain circumstances (eg in methods0) you can also type <code>ctrl-shift-space</code> to get a smart list of methods etc that you might want to call.  Can be useful.</p>
-</div>
-<div class="paragraph">
-<p>Last, when invoking a method, use <code>ctrl-P</code> to see the parameter types.</p>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_refactoring">Refactoring</h5>
-<div class="paragraph">
-<p>Loads of good stuff on the <code>Refactor</code> menu; most used are:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>Rename (<code>shift-F6</code>)</p>
-</li>
-<li>
-<p>Extract</p>
-<div class="ulist">
-<ul>
-<li>
-<p>method: <code>ctrl-alt-M</code></p>
-</li>
-<li>
-<p>variable: <code>ctrl-alt-V</code></p>
-</li>
-</ul>
-</div>
-</li>
-<li>
-<p>Inline method/variable: <code>ctrl-alt-N</code></p>
-</li>
-<li>
-<p>Change signature</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>If you can&#8217;t remember all those shortcuts, just use <code>ctrl-shift-alt-T</code> (might want to rebind that to something else!) and get a context-sensitive list of refactorings available for the currently selected object</p>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_plugins">Plugins</h5>
-<div class="paragraph">
-<p>You might want to set up some additional plugins.  You can do this using <code>File &gt; Settings &gt; Plugins</code> (or equivalently <code>File &gt; Other Settings &gt; Configure Plugins</code>).</p>
-</div>
-<div class="paragraph">
-<p>Recommended are:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><a href="https://plugins.jetbrains.com/plugin/7179?pr=idea">Maven Helper</a> plugin</p>
-<div class="paragraph">
-<p>More on this below.</p>
-</div>
-</li>
-<li>
-<p><a href="https://github.com/asciidoctor/asciidoctor-intellij-plugin">AsciiDoctor</a> plugin</p>
-<div class="paragraph">
-<p>Useful if you are doing any authoring of documents.</p>
-</div>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>Some others you might like to explore are:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<img src="images/appendices/dev-env/intellij-idea/050-some-plugins/020-some-plugins-confirmation.png" alt="020 some plugins confirmation" width="600px">
-</div>
-<div class="title">Figure 32. IntelliJ Plugins</div>
-</div>
-<div class="sect5">
-<h6 id="_maven_helper_plugin">Maven Helper Plugin</h6>
-<div class="paragraph">
-<p>This plugin provides a couple of great features.  One is better visualization of dependency trees (similar to Eclipse).</p>
-</div>
-<div class="paragraph">
-<p>If you open a <code>pom.xml</code> file, you&#8217;ll see an additional "Dependencies" tab:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/010-dependency-tab.png"><img src="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/010-dependency-tab.png" alt="010 dependency tab" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>Clicking on this gives a graphical tree representation of the dependencies, similar to that obtained by <code>mvn dependency:tree</code>, but filterable.</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/020-dependency-as-tree.png"><img src="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/020-dependency-as-tree.png" alt="020 dependency as tree" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>The plugin also provides the ability to easily run a Maven goal on a project:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/030-maven-run-goal.png"><img src="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/030-maven-run-goal.png" alt="030 maven run goal" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>This menu can also be bound to a keystroke so that it is available as a pop-up:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/040-maven-quick-run.png"><img src="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/040-maven-quick-run.png" alt="040 maven quick run" width="600px"></a>
-</div>
-</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_troubleshooting">Troubleshooting</h5>
-<div class="paragraph">
-<p>When a Maven module is imported, IntelliJ generates its own project files (suffix <code>.ipr</code>), and the application is actually built from that.</p>
-</div>
-<div class="paragraph">
-<p>Occasionally these don&#8217;t keep in sync (even if auto-import of Maven modules has been enabled).</p>
-</div>
-<div class="paragraph">
-<p>To fix the issue, try:
-* reimport module
-* rebuild selected modules/entire project
-* remove and then re-add the project
-* restart, invalidating caches
-* hit StackOverflow (!)</p>
-</div>
-<div class="paragraph">
-<p>One thing worth knowing; IntelliJ actively scans the filesystem all the time.  It&#8217;s therefore (almost always) fine to build the app from the Maven command line; IntelliJ will detect the changes and keep in sync.  If you want to force that, use <code>File &gt; Synchronize</code>, <code>ctrl-alt-Y</code>.</p>
-</div>
-<div class="paragraph">
-<p>If you hit an error of "duplicate classes":</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png"><img src="images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png" alt="010 duplicate classes" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>then make sure you have correctly configured the <a href="#_cg_ide_intellij_other-settings-compiler">annotation processor</a>
-settings.  Pay attention in particular to the "Production sources directory" and "Test sources directory", that these
-are set up correctly.</p>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_running_integration_tests">2.1.5. Running Integration Tests</h4>
-<div class="paragraph">
-<p>When running integration tests from within IntelliJ, make sure that the <code>search for tests</code> radio button is set to <code>In single module</code>:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png"><img src="images/appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png" alt="run debug configuration single module" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>If this radio button is set to one of the other options then you may obtain class loading issues; these result from IntelliJ attempting to run unit tests of the <code>dom</code> project that depend on test classes in that module, but using the classpath of the <code>integtests</code> module whereby the <code>dom</code> test-classes (<code>test-jar</code> artifact) are not exposed on the Maven classpath.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_cg_ide_intellij_advanced">2.1.6. Advanced</h4>
-<div class="paragraph">
-<p>In this section are a couple of options that will reduce the length of the change code/build/deploy/review feedback loop.</p>
-</div>
-<div class="sect4">
-<h5 id="_cg_ide_intellij_advanced_dcevm">Setting up Dynamic Reloading</h5>
-<div class="paragraph">
-<p><a href="github.com/dcevm/dcevm">DCEVM</a> enhances the JVM with true hot-swap adding/removing of methods as well as more
-reliable hot swapping of the implementation of existing methods.</p>
-</div>
-<div class="paragraph">
-<p>In the context of Apache Isis, this is very useful for contributed actions and mixins and also view models; you should
-then be able to write these actions and have them be picked up without restarting the application.</p>
-</div>
-<div class="paragraph">
-<p>Changing persisting domain entities is more problematic, for two reasons: the JDO/DataNucleus enhancer needs to run on
-domain entities, and also at runtime JDO/DataNucleus would need to rebuild its own metamodel.  You may find that adding
-actions will work, but adding new properties or collections is much less likely to.</p>
-</div>
-<div class="paragraph">
-<p>To set up DCEVM, download the appropriate JAR from the <a href="https://dcevm.github.io/">github page</a>, and run the
-installer.  For example:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="bash">java -jar DCEVM-light-8u51-installer.jar</code></pre>
-</div>
-</div>
-<div class="admonitionblock tip">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-tip" title="Tip"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>Be sure to run with appropriate privileges to be able to write to the installation directories of the JDK.  If running
-on Windows, that means running as <code>Administrator</code>.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>After a few seconds this will display a dialog listing all installations of JDK that have been found:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/070-advanced/010-dcevm-list-of-found-jdk-installations.png"><img src="images/appendices/dev-env/intellij-idea/070-advanced/010-dcevm-list-of-found-jdk-installations.png" alt="010 dcevm list of found jdk installations" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>Select the corresponding installation, and select <code>Replace by DCEVM</code>.</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/070-advanced/020-dcevm-once-installed.png"><img src="images/appendices/dev-env/intellij-idea/070-advanced/020-dcevm-once-installed.png" alt="020 dcevm once installed" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>In IntelliJ, register the JDK in <code>File &gt; Project Structure</code> dialog:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/070-advanced/030-dcevm-intellij-project-structure.png"><img src="images/appendices/dev-env/intellij-idea/070-advanced/030-dcevm-intellij-project-structure.png" alt="030 dcevm intellij project structure" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>Finally, in the run configuration, select the patched JDK:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/intellij-idea/070-advanced/040-dcevm-run-configuration.png"><img src="images/appendices/dev-env/intellij-idea/070-advanced/040-dcevm-run-configuration.png" alt="040 dcevm run configuration" width="600px"></a>
-</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_setting_up_jrebel">Setting up JRebel</h5>
-<div class="paragraph">
-<p>See the repo for the (non-ASF) <a href="https://github.com/isisaddons/isis-jrebel-plugin">Isis JRebel</a> plugin.  With some
-modification, this should work for IntelliJ too.</p>
-</div>
-<div class="paragraph">
-<p>Note that JRebel is a commercial product, requiring a license.  At the time of writing there is also currently a
-non-commercial free license (though note this comes with some usage conditions).</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_cg_ide_eclipse">2.2. Developing using Eclipse</h3>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>This material does not constitute an endorsement; Eclipse foundation is not affiliated to Apache Software Foundation in any way.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>If you are an <a href="http://www.eclipse.org">Eclipse</a> user, then we recommend you download the "Eclipse JEE package" configuration.</p>
-</div>
-<div class="paragraph">
-<p>When running an Apache Isis application, it&#8217;s necessary to setup the development environment so that the Java bytecode can be enhanced by the <a href="http://www.datanucleus.org">DataNucleus</a> enhancer.  If working in Eclipse, then JDO enhancement is most easily done by installing the <a href="http://www.datanucleus.org/products/datanucleus/jdo/guides/eclipse.html">DataNucleus' Eclipse plugin</a>.  This hooks the bytecode enhancement of your domain objects into Eclipse&#8217;s normal incremental compilation.</p>
-</div>
-<div class="paragraph">
-<p>This plugin needs to be configured for each of your domain modules (usually just one in any given app).  The steps are therefore:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>import the project into Eclipse</p>
-</li>
-<li>
-<p>configure the DataNucleus enhancer</p>
-</li>
-<li>
-<p>run the app from the <code>.launch</code> file</p>
-</li>
-</ul>
-</div>
-<div class="sect3">
-<h4 id="_screencast">2.2.1. Screencast</h4>
-<div class="paragraph">
-<p>The following screencast shows how to import an Apache Isis maven-based application into Eclipse and configure to use with the JDO Objectstore</p>
-</div>
-<div class="videoblock">
-<div class="content">
-<iframe width="640px" height="480px" src="//www.youtube.com/embed/RgcYfjQ8yJA?rel=0" frameborder="0" allowfullscreen></iframe>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_importing_the_project">2.2.2. Importing the Project</h4>
-<div class="paragraph">
-<p>Use File &gt; Import, then Maven &gt; Existing Maven Projects.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_add_datanucleus_support">2.2.3. Add DataNucleus support</h4>
-<div class="admonitionblock tip">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-tip" title="Tip"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>Make sure you are in the 'Java' Perspective, not the 'Java EE' Perspective.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>In Eclipse, for the <em>domain object model</em> project, first add DataNucleus support:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/eclipse/eclipse-100-project-support.png"><img src="images/appendices/dev-env/eclipse/eclipse-100-project-support.png" alt="eclipse 100 project support" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>Then turn on Auto-Enhancement:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images/appendices/dev-env/eclipse/eclipse-110-project-support.png"><img src="images/appendices/dev-env/eclipse/eclipse-110-project-support.png" alt="eclipse 110 project support" width="600px"></a>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_update_the_classpath">Update the classpath</h5>
-<div class="paragraph">
-<p>DataNucleus' enhancer uses the domain object model&#8217;s own classpath to reference DataNucleus JARs. So, even though your domain objects are unlikely to depend on DataNucleus, these references must still be present.</p>
-</div>
-<div class="paragraph">
-<p>See the earlier section on <a href="ugfun.html#_ugfun_getting-started_datanucleus-enhancer">DataNucleus enhancer</a> for details of the contents of the <code>pom.xml</code>.  Chances are it is already set up from running the <a href="ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a>.</p>
-</div>
-<div class="paragraph">
-<p>Then, tell DataNucleus to use the project classpath:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images//appendices/dev-env/eclipse/eclipse-010-windows-preferences.png"><img src="images//appendices/dev-env/eclipse/eclipse-010-windows-preferences.png" alt="eclipse 010 windows preferences" width="750px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>When the enhancer runs, it will print out to the console:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images//appendices/dev-env/eclipse/eclipse-120-console.png"><img src="images//appendices/dev-env/eclipse/eclipse-120-console.png" alt="eclipse 120 console" width="500px"></a>
-</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_workaround_for_path_limits_the_dn_plugin_to_use_the_persistence_xml">Workaround for path limits (the DN plugin to use the persistence.xml)</h5>
-<div class="paragraph">
-<p>If running on Windows then the DataNucleus plugin is very likely to hit the Windows path limit.</p>
-</div>
-<div class="paragraph">
-<p>To fix this, we configure the enhancer to read from the <code>persistence.xml</code> file.</p>
-</div>
-<div class="paragraph">
-<p>As a prerequisite, first make sure that your domain object model has a <code>persistence.xml</code> file.  Then specify the <code>persistence-unit</code> in the project properties:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images//appendices/dev-env/eclipse/eclipse-025-project-properties.png"><img src="images//appendices/dev-env/eclipse/eclipse-025-project-properties.png" alt="eclipse 025 project properties" width="750px"></a>
-</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_workaround_if_the_enhancer_fails">Workaround: If the enhancer fails</h5>
-<div class="paragraph">
-<p>On occasion it appears that Eclipse can attempt to run two instances of the DataNucleus enhancer. This is probably due to multiple Eclipse builders being defined; we&#8217;ve noticed multiple entries in the Eclipse&#8217;s <code>Debug</code> view:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images//appendices/dev-env/eclipse/eclipse-210-enhancer-fails-duplicates.png"><img src="images//appendices/dev-env/eclipse/eclipse-210-enhancer-fails-duplicates.png" alt="eclipse 210 enhancer fails duplicates" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>At any rate, you&#8217;ll know you&#8217;ve encountered this error if you see the following in the console:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images//appendices/dev-env/eclipse/eclipse-200-enhancer-fails-duplicates.png"><img src="images//appendices/dev-env/eclipse/eclipse-200-enhancer-fails-duplicates.png" alt="eclipse 200 enhancer fails duplicates" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>The best solution is to remove DataNucleus support and then to re-add it:</p>
-</div>
-<div class="imageblock">
-<div class="content">
-<a class="image" href="images//appendices/dev-env/eclipse/eclipse-220-enhancer-fails-duplicates.png"><img src="images//appendices/dev-env/eclipse/eclipse-220-enhancer-fails-duplicates.png" alt="eclipse 220 enhancer fails duplicates" width="600px"></a>
-</div>
-</div>
-<div class="paragraph">
-<p>If you consistently hit problems, then the final recourse is to disable the automatic enhancement and to remember to manually enhance your domain object model before each run.</p>
-</div>
-<div class="paragraph">
-<p>Not ideal, we know. Please feel free to contribute a better solution :-)</p>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_running_the_app_2">2.2.4. Running the App</h4>
-<div class="paragraph">
-<p>The simpleapp archetype automatically provides a <code>.launch</code> configurations in the <code>webapp</code> module. You can therefore very simply run the application by right-clicking on one of these files, and choosing "Run As…" or "Debug As…".</p>
-</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>The screencast above shows this in action.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_other_domain_projects">2.2.5. Other domain projects.</h4>
-<div class="paragraph">
-<p>There is nothing to prevent you having multiple domain projects. You might want to do such that each domain project corresponds to a <a href="http://www.methodsandtools.com/archive/archive.php?id=97p2">DDD module</a>, thus guaranteeing that there are no cyclic dependencies between your modules.</p>
-</div>
-<div class="paragraph">
-<p>If you do this, make sure that each project has its own <code>persistence.xml</code> file.</p>
-</div>
-<div class="paragraph">
-<p>And, remember also to configure Eclipse&#8217;s DataNucleus plugin for these other domain projects.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_advanced">2.2.6. Advanced</h4>
-<div class="paragraph">
-<p>In this section are a couple of options that will reduce the length of the change code/build/deploy/review feedback loop.</p>
-</div>
-<div class="sect4">
-<h5 id="_setting_up_dynamic_reloading">Setting up Dynamic Reloading</h5>
-<div class="paragraph">
-<p><a href="github.com/dcevm/dcevm">DCEVM</a> enhances the JVM with true hot-swap adding/removing of methods as well as more
-reliable hot swapping of the implementation of existing methods.</p>
-</div>
-<div class="paragraph">
-<p>In the context of Apache Isis, this is very useful for contributed actions and mixins and also view models; you should
-then be able to write these actions and have them be picked up without restarting the application.</p>
-</div>
-<div class="paragraph">
-<p>Changing persisting domain entities is more problematic, for two reasons: the JDO/DataNucleus enhancer needs to run on
-domain entities, and also at runtime JDO/DataNucleus would need to rebuild its own metamodel.  You may find that adding
-actions will work, but adding new properties or collections is much less likely to.</p>
-</div>
-<div class="paragraph">
-<p>For details of setting up DCEVM, see the <a href="#_cg_ide_intellij_advanced_dcevm">corresponding section</a> in the IntelliJ documentation.</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_cg_ide_project-lombok">2.3. Project Lombok</h3>
-<div class="paragraph">
-<p><a href="https://projectlombok.org/">Project Lombok</a> is an open source project to reduce the amount of boilerplate in
-your code.</p>
-</div>
-<div class="paragraph">
-<p>For example, rather than write:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">private</span> <span class="predefined-type">String</span> name;
-<span class="directive">public</span> <span class="predefined-type">String</span> getName() {
-    <span class="keyword">return</span> name;
-}
-<span class="directive">public</span> <span class="type">void</span> setName(<span class="predefined-type">String</span> name) {
-    <span class="local-variable">this</span>.name = name;
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>you can instead write simply:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Getter</span> <span class="annotation">@Setter</span>
-<span class="directive">private</span> <span class="predefined-type">String</span> name;</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Under the covers it is implemented as an annotation processor; it basically hooks into the Java compiler
-so that it can emit additional bytecode (eg for the getter and setter).  See <a href="#_cg_ide_intellij_other-settings-compiler">here</a> for details of setting up in IntelliJ (Eclipse has very similar support).</p>
-</div>
-<div class="paragraph">
-<p>Apache Isis supports <a href="https://projectlombok.org/">Project Lombok</a>, in that the annotations that would normally be placed on the getter (namely <a href="rgant.html#_rgant-Property"><code>Property</code></a>, <a href="rgant.html#_rgant-PropertyLayout"><code>@PropertyLayout</code></a>, <a href="rgant.html#_rgant-Collection"><code>@Collection</code></a>, <a href="rgant.html#_rgant-CollectionLayout"><code>@CollectionLayout</code></a> and <a href="rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a>) can be placed on the field instead.</p>
-</div>
-<div class="paragraph">
-<p>There are plugins for Lombok for maven; it&#8217;s just a matter of adding the required dependency.  To compile the code
-within your IDE (eg so that its compiler "knows" that there is, actually, a getter and setter) will require an
-Lombok plugin appropriate to that IDE.  See the <a href="https://projectlombok.org/download.html">Lombok download page</a> for more information.</p>
-</div>
-<div class="sect3">
-<h4 id="_future_thoughts">2.3.1. Future thoughts</h4>
-<div class="paragraph">
-<p>In the future we might extend/fork Lombok so that it understands Isis' own annotations (ie <a href="rgant.html#_rgant-Property"><code>@Property</code></a> and <a href="rgant.html#_rgant-Collection"><code>@Collection</code></a>)
-rather than Lombok&#8217;s own <code>@Getter</code> and `@Setter.</p>
-</div>
-<div class="paragraph">
-<p>It might also be possible to use Lombok to generate the domain event classes for each member.</p>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_cg_ide_agilej">2.4. AgileJ</h3>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>This material does not constitute an endorsement; AgileJ Structure Views is not affiliated to Apache Software Foundation in any way.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p><a href="http://www.agilej.com/">AgileJ Structure Views</a> is a commercial product to reverse engineer and visualize Java classes from source code.</p>
-</div>
-<div class="paragraph">
-<p>The key to using the tool is in developing a suitable filter script, a DSL.  You can use the following script as a starting point for visualizing Apache Isis domain models:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="AgileJ">// use CTRL+SPACE for completion suggestions
-hide all fields
-hide setter methods
-hide private methods
-hide methods named compareTo
-hide methods named toString
-hide methods named inject*
-hide methods named disable*
-hide methods named default*
-hide methods named hide*
-hide methods named autoComplete*
-hide methods named choices*
-hide methods named title
-hide methods named iconName
-hide methods named validate*
-hide methods named modify*
-hide protected methods
-hide types annotated as DomainService
-hide types named Constants
-hide types named InvoicingInterval
-hide enums
-hide constructors
-hide inner types named *Event
-hide inner types named *Functions
-hide inner types named *Predicates
-show getter methods in green
-show methods annotated as Programmatic in orange
-show methods annotated as Action in largest
-hide dependency lines
-hide call lines
-hide method lines</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>For more information on AgileJ, see Paul Wells' 8-part tutorial series on Youtube; the first can be found <a href="https://www.youtube.com/watch?v=YrZQ7lMSsH0">here</a> (view the "show more" comments to click through to other parts).</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_cg_ide-templates">3. Code and File Templates</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>We provide parameterized templates, for both IntelliJ and Eclipse, to help you write your domain applications.</p>
-</div>
-<div class="paragraph">
-<p>On IntelliJ we provide both file templates (<code>File &gt; Settings &gt; Editor &gt; File and Code Templates</code>) and also live templates (<code>File &gt; Settings &gt; Editor &gt; Live Templates</code>).  The former are used to create new classes or files (eg a new domain entity), while the latter are intended to modify an existing file (eg create a new property or add a <code>toString()</code> method etc).</p>
-</div>
-<div class="paragraph">
-<p>On Eclipse we provide only the latter sort of template (Windows &gt; Preferences &gt; Java &gt; Editor &gt; Templates).</p>
-</div>
-<div class="paragraph">
-<p>There are templates for writing Apache Isis domain objects, for writing unit tests (JUnit and JMock), and also for writing Asciidoc documentation (see also the <a href="#_cg_asciidoc-templates">appendix</a>).</p>
-</div>
-<div class="sect2">
-<h3 id="_download">3.1. Download</h3>
-<div class="paragraph">
-<p>The following table lists the templates available to download:</p>
-</div>
-<table class="tableblock frame-all grid-all spread">
-<colgroup>
-<col style="width: 22%;">
-<col style="width: 22%;">
-<col style="width: 11%;">
-<col style="width: 22%;">
-<col style="width: 22%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Purpose</th>
-<th class="tableblock halign-left valign-top">IntelliJ<br>
-file template</th>
-<th class="tableblock halign-left valign-top">Prefix</th>
-<th class="tableblock halign-left valign-top">IntelliJ<br>
-live template</th>
-<th class="tableblock halign-left valign-top">Eclipse<br>
-template</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>Domain Objects</p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><a href="../resources/templates/intellij-settings-file-templates-for-apache-isis.jar">Download</a></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><code>is</code></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><a href="../resources/templates/isis-templates-idea.xml">Download</a></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><a href="../resources/templates/isis-templates.xml">Download</a></p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>JUnit tests</p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>(none)</p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><code>ju</code></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><a href="../resources/templates/junit4-templates-idea.xml">Download</a></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><a href="../resources/templates/junit4-templates.xml">Download</a></p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>JMock tests</p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>(none)</p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><code>jm</code></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><a href="../resources/templates/jmock2-templates-idea.xml">Download</a></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><a href="../resources/templates/jmock2-templates.xml">Download</a></p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>Asciidoc</p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>(none)</p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><code>ad</code></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p><a href="../resources/templates/isis-asciidoc-templates-idea.xml">Download</a></p>
-</div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
-<p>(none)</p>
-</div></div></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>The most commonly used domain objects (live) templates are also listed on the <a href="../cheat-sheet.html">Apache Isis cheat sheet</a>.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_installation">3.2. Installation</h3>
-<div class="sect3">
-<h4 id="_intellij">3.2.1. IntelliJ</h4>
-<div class="paragraph">
-<p>To install in the live templates IntelliJ (Community edition 15), copy to the relevant <code>config/templates</code> directory, eg:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>Windows <code>&lt;User home&gt;\.IdeaIC15\config\templates</code></p>
-</li>
-<li>
-<p>Linux <code>~/.IdeaIC14/config/templates</code></p>
-</li>
-<li>
-<p>Mac OS <code>~/Library/Preferences/IdeaIC15/templates</code></p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>If using the Ultimate edition, the directory is <code>.IntelliJIdea15</code> rather than <code>IdeaIC15</code>.</p>
-</div>
-<div class="paragraph">
-<p>To install the file templates, use <code>File &gt; Import Settings</code>.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_eclipse">3.2.2. Eclipse</h4>
-<div class="paragraph">
-<p>To install in Eclipse, go to <code>Windows &gt; Preferences &gt; Java &gt; Editor &gt; Templates</code> and choose <code>Import</code>.</p>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_usage">3.3. Usage</h3>
-<div class="paragraph">
-<p>For the live templates, enter the prefix in the editor (<code>is</code>, <code>ju</code>, <code>jm</code>) and the IDE will list all available templates
-in that category.</p>
-</div>
-<div class="paragraph">
-<p>For the file templates (IntelliJ only), these are available from <code>File &gt; New</code>.</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_cg_cmd-line">4. Command Line and CI</h2>
-<div class="sectionbody">
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-TODO
-</td>
-</tr>
-</table>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_cg_isis-maven-plugin">5. Apache Isis Maven Plugin</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>The Apache Isis Maven plugin defines three goals:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><code>validate</code><br></p>
-<div class="paragraph">
-<p>Use to verify at build time that the metamodel of an application is valid.  This runs the <code>MetaModelValidator</code> that is also run when the application is started up.</p>
-</div>
-</li>
-<li>
-<p><code>swagger</code><br></p>
-<div class="paragraph">
-<p>Uses the <a href="rgsvc.html#_rgsvc_api_SwaggerService"><code>SwaggerService</code></a> to generate <a href="http://swagger.io">Swagger</a> spec files that describe the public and/or private RESTful APIs exposed by the <a href="ugvro.html">RestfulObjects viewer</a>.</p>
-</div>
-</li>
-<li>
-<p><code>xsd</code><br></p>
-<div class="paragraph">
-<p>Uses the <a href="rgsvc.html#_rgsvc_api_JaxbService"><code>JaxbService</code></a> to generate XSD schemas from any JAXB-annotated view models/DTOs.<br></p>
-</div>
-<div class="paragraph">
-<p>This is instead of and preferable to using the JAXB <a href="https://jaxb.java.net/2.2.4/docs/schemagen.html">schemagen</a> tool, because it uses the framework&#8217;s support (via <a href="rgant.html#_rgant-XmlJavaValueType"><code>@XmlJavaValueType</code></a>) to translate any references to domain objects into <code>OidDto</code>s (as defined by the Apache Isis <a href="rgcms.html#_rgcms_schema-common">common schema</a>).</p>
-</div>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>The <code>validate</code> goal is by default bound to the <code>test</code> phase, and the <code>swagger</code> goal is by default bound to the <code>package</code> phase; both are typically of your application&#8217;s <code>dom</code> sub-module.  The <code>xsd</code> goal meanwhile defaults to the <code>generate-resources</code> phase, and this is generally used in a completely separate sub-module.  An example can be found in the (non-ASF) <a href="http://github.com/isisaddons/isis-app-todoapp">Isis addons' todoapp</a> example app; the separate submodule that uses the <code>xsd</code> goal is (also) called <code>todoapp-xsd</code>.</p>
-</div>
-<div class="paragraph">
-<p>All of these goals require an <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping"><code>AppManifest</code></a> to point the plugin at, so that
-it knows how to bootstrap an Isis runtime.  This is discussed below, followed by sections on configuring the two goals.</p>
-</div>
-<div class="sect2">
-<h3 id="__code_appmanifest_code">5.1. <code>AppManifest</code></h3>
-<div class="paragraph">
-<p>As noted in the introduction, all the goals require an <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping"><code>AppManifest</code></a>
-to point the plugin at, so that it knows how to bootstrap an Isis runtime.</p>
-</div>
-<div class="paragraph">
-<p>This can be extremely minimal.  For example, the <a href="ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp</a>'s
-manifest is:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="keyword">package</span> <span class="namespace">domainapp.dom</span>;
-...
-public <span class="type">class</span> <span class="class">DomainAppDomManifest</span> <span class="directive">implements</span> AppManifest {
-    <span class="annotation">@Override</span>
-    <span class="directive">public</span> <span class="predefined-type">List</span>&lt;<span class="predefined-type">Class</span>&lt;?&gt;&gt; getModules() {
-        <span class="keyword">return</span> <span class="predefined-type">Arrays</span>.asList(
-                DomainAppDomainModule.class  <span class="comment">// domain (entities and repositories)</span>
-        );
-    }
-    <span class="annotation">@Override</span>
-    <span class="directive">public</span> <span class="predefined-type">List</span>&lt;<span class="predefined-type">Class</span>&lt;?&gt;&gt; getAdditionalServices() { <span class="keyword">return</span> <span class="predefined-type">Collections</span>.emptyList(); }
-    <span class="annotation">@Override</span>
-    <span class="directive">public</span> <span class="predefined-type">String</span> getAuthenticationMechanism() { <span class="keyword">return</span> <span class="predefined-constant">null</span>; }
-    <span class="annotation">@Override</span>
-    <span class="directive">public</span> <span class="predefined-type">String</span> getAuthorizationMechanism() { <span class="keyword">return</span> <span class="predefined-constant">null</span>; }
-    <span class="annotation">@Override</span>
-    <span class="directive">public</span> <span class="predefined-type">List</span>&lt;<span class="predefined-type">Class</span>&lt;? <span class="directive">extends</span> FixtureScript&gt;&gt; getFixtures() { <span class="keyword">return</span> <span class="predefined-constant">null</span>; }
-    <span class="annotation">@Override</span>
-    <span class="directive">public</span> <span class="predefined-type">Map</span>&lt;<span class="predefined-type">String</span>, <span class="predefined-type">String</span>&gt; getConfigurationProperties() { <span class="keyword">return</span> <span class="predefined-constant">null</span>; }
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>where <code>DomainAppDomainModule</code> simply identifies the package for the manifest to search under:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="java"><span class="keyword">package</span> <span class="namespace">domainapp.dom</span>;
-<span class="directive">public</span> <span class="directive">final</span> <span class="type">class</span> <span class="class">DomainAppDomainModule</span> { }</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>As you&#8217;ll see below, the configuration for each of the goals both refer to this app manifest.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_cg_isis-maven-plugin_validate">5.2. <code>validate</code> goal</h3>
-<div class="paragraph">
-<p>The Apache Isis programming model requires that a number of naming conventions are followed.</p>
-</div>
-<div class="paragraph">
-<p>For example, the validator will detect any orphaned supporting methods (eg <code>hideXxx()</code>) if the corresponding property
-or action has been renamed or deleted but the supporting method was not also updated.  Another example is that a class
-cannot have a title specified both using <code>title()</code> method and also using <code>@Title</code> annotation.</p>
-</div>
-<div class="paragraph">
-<p>When running the application these are enforced by the <code>MetaModelValidator</code> component that detects these errors, failing fast.</p>
-</div>
-<div class="paragraph">
-<p>The purpose of the <code>validate</code> goal of the <code>isis-maven-plugin</code> is to enforce these naming conventions at build time,
-typically enforced by way of a continuous integration server.</p>
-</div>
-<div class="paragraph">
-<p>The <code>validate</code> goal defines a single property:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><code>appManifest</code> - fully qualified class name for the app manifest used to bootstrap the application (see discussion above)</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>The sections below explain how to configure the plugin within an app.</p>
-</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>The instructions given here relate to <code>1.10.0</code>.   This goal was also released for <code>1.9.0</code>, but with a slightly
-different configuration; see the final section for differences.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div class="sect3">
-<h4 id="__code_dom_code_submodule">5.2.1. <code>dom</code> submodule</h4>
-<div class="paragraph">
-<p>Update the <code>pom.xml</code> (in your project&#8217;s <code>dom</code> module):</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;profile&gt;</span>
-    <span class="tag">&lt;id&gt;</span>isis-validate<span class="tag">&lt;/id&gt;</span>
-    <span class="tag">&lt;activation&gt;</span>
-        <span class="tag">&lt;property&gt;</span>
-            <span class="tag">&lt;name&gt;</span>!skip.isis-validate<span class="tag">&lt;/name&gt;</span>                                            <i class="conum" data-value="1"></i><b>(1)</b>
-        <span class="tag">&lt;/property&gt;</span>
-    <span class="tag">&lt;/activation&gt;</span>
-    <span class="tag">&lt;build&gt;</span>
-        <span class="tag">&lt;plugins&gt;</span>
-            <span class="tag">&lt;plugin&gt;</span>
-                <span class="tag">&lt;groupId&gt;</span>org.apache.isis.tool<span class="tag">&lt;/groupId&gt;</span>
-                <span class="tag">&lt;artifactId&gt;</span>isis-maven-plugin<span class="tag">&lt;/artifactId&gt;</span>
-                <span class="tag">&lt;version&gt;</span>${isis.version}<span class="tag">&lt;/version&gt;</span>                                      <i class="conum" data-value="2"></i><b>(2)</b>
-                <span class="tag">&lt;configuration&gt;</span>
-                    <span class="tag">&lt;appManifest&gt;</span>domainapp.dom.DomainAppDomManifest<span class="tag">&lt;/appManifest&gt;</span>       <i class="conum" data-value="3"></i><b>(3)</b>
-                <span class="tag">&lt;/configuration&gt;</span>
-                <span class="tag">&lt;dependencies&gt;</span>
-                    <span class="tag">&lt;dependency&gt;</span>
-                        <span class="tag">&lt;groupId&gt;</span>${project.groupId}<span class="tag">&lt;/groupId&gt;</span>
-                        <span class="tag">&lt;artifactId&gt;</span>simpleapp-dom<span class="tag">&lt;/artifactId&gt;</span>                          <i class="conum" data-value="4"></i><b>(4)</b>
-                        <span class="tag">&lt;version&gt;</span>${project.version}<span class="tag">&lt;/version&gt;</span>
-                    <span class="tag">&lt;/dependency&gt;</span>
-                    <span class="comment">&lt;!-- workaround to avoid conflict with plexus-default --&gt;</span>
-                    <span class="tag">&lt;dependency&gt;</span>
-                        <span class="tag">&lt;groupId&gt;</span>com.google.guava<span class="tag">&lt;/groupId&gt;</span>
-                        <span class="tag">&lt;artifactId&gt;</span>guava<span class="tag">&lt;/artifactId&gt;</span>
-                        <span class="tag">&lt;version&gt;</span>16.0.1<span class="tag">&lt;/version&gt;</span>
-                    <span class="tag">&lt;/dependency&gt;</span>
-                <span class="tag">&lt;/dependencies&gt;</span>
-                <span class="tag">&lt;executions&gt;</span>
-                    <span class="tag">&lt;execution&gt;</span>
-                        <span class="tag">&lt;phase&gt;</span>test<span class="tag">&lt;/phase&gt;</span>
-                        <span class="tag">&lt;goals&gt;</span>
-                            <span class="tag">&lt;goal&gt;</span>validate<span class="tag">&lt;/goal&gt;</span>                                       <i class="conum" data-value="5"></i><b>(5)</b>
-                        <span class="tag">&lt;/goals&gt;</span>
-                    <span class="tag">&lt;/execution&gt;</span>
-                <span class="tag">&lt;/ex

<TRUNCATED>

[3/5] isis-site git commit: ISIS-1287: splitting out contributors vs committers guides

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/cgcom.html
----------------------------------------------------------------------
diff --git a/content/guides/cgcom.html b/content/guides/cgcom.html
new file mode 100644
index 0000000..dda7b12
--- /dev/null
+++ b/content/guides/cgcom.html
@@ -0,0 +1,3926 @@
+<!doctype html>
+<html class="no-js" lang="en">
+<head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+
+    <title>Committers' Guide</title>
+
+    <!--
+        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.
+    -->
+
+    <!-- No caching headers -->
+    <meta http-equiv="cache-control" content="no-cache" />
+    <meta http-equiv="pragma" content="no-cache" />
+    <meta http-equiv="expires" content="-1" />
+
+
+    <!-- TODO: need to (re)instate CDN in the future (not using for now just so can develop off-line -->
+    <link href="../css/foundation/5.5.1/foundation.css" rel="stylesheet" />
+    <script src="../js/foundation/5.5.1/vendor/modernizr.js"></script>
+    <link href="../css/asciidoctor/colony.css" rel="stylesheet">
+    <link href="../css/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
+
+
+
+
+    <link href="../css/github-fork-ribbon-css/0.1.1/gh-fork-ribbon.css" rel="stylesheet" />
+    <!--[if lt IE 9]>
+      <link href="../css/github-fork-ribbon-css/0.1.1/gh-fork-ribbon.ie.css" rel="stylesheet" />
+    <![endif]-->
+
+
+
+    <style type="text/css">
+        pre code {
+            background-color: inherit;
+            border-style: none;
+        }
+
+        pre code > span:first-child {
+            margin-left: -5px;
+        }
+
+    <style>
+
+    <!--
+    <style type="text/css">
+        /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{font-weight: normal}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#00}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+
+        pre.CodeRay code {
+            background-color: inherit;
+            border-style: none;
+        }
+
+        pre.CodeRay code > span:first-child {
+            margin-left: -5px;
+        }
+
+        .literalblock pre,
+        .listingblock pre:not(.highlight),
+        .listingblock pre[class="highlight"],
+        .listingblock pre[class^="highlight "],
+        .listingblock pre.CodeRay,
+        .listingblock pre.prettyprint {
+            background: rgb(253, 250, 246);
+         }
+        .sidebarblock .literalblock pre,
+        .sidebarblock .listingblock pre:not(.highlight),
+        .sidebarblock .listingblock pre[class="highlight"],
+        .sidebarblock .listingblock pre[class^="highlight "],
+        .sidebarblock .listingblock pre.CodeRay,
+        .sidebarblock .listingblock pre.prettyprint {
+            background: rgb(253, 250, 246);
+         }
+
+    <style>
+    -->
+
+    <style>
+    .github-fork-ribbon-wrapper.right {
+        position: fixed;
+    }
+    .github-fork-ribbon {
+        background: #090;
+    }
+    .github-fork-ribbon a:hover {
+        background:#0D0;
+        color:#fff;
+        font-size: 1.1em;
+    }
+    </style>
+
+    <style>
+        @media only screen and (min-width: 40.063em) {
+          .top-bar {
+            .contain-to-grid .top-bar {
+                max-width: 80rem;
+            }
+          }
+        }
+        .row {
+            max-width: 80rem;
+        }
+    </style>
+
+    <style>
+        .extended-quote,
+        .extended-quote-first {
+            margin-left: 40px;
+            margin-right: 40px;
+            font-style: italic;
+        }
+        .extended-quote-attribution {
+            text-align: right;
+            margin-right: 100px;
+            color: #10B061;
+        }
+
+        .extended-quote-first:before {
+            content: "\201c";
+            float: left;
+            font-size: 2.75em;
+            font-weight: bold;
+            line-height: 0.6em;
+            margin-left: -0.6em;
+            color: #003b6b;
+            text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+        }
+        
+    </style>
+
+    <style>
+        body {
+          position: relative;
+        }
+
+        *:not(pre) a > code {
+            color: #210DDC;
+        }
+
+        *:not(pre) > code {
+            background-color: inherit;
+            border: none;
+            font-weight: normal;
+        }
+
+        body div#toc li,
+        body div#toc2 li {
+            list-style-type: none;
+        }
+
+        div#doc-content {
+            margin-top: 30px;
+        }
+
+        div.documentation-page table.frame-all {
+            border-left: none;
+            border-right: none;
+        }
+
+        body div#toc li.active-region:before,
+        body div#toc2 li.active-region:before {
+            content: "\00BB \0020";
+            margin-left: -12px;
+        }
+
+        body div#toc li a.active,
+        body div#toc2 li a.active {
+            color: red;
+        }
+
+        body div#toc.toc,
+        body div#toc.toc2 {
+            position: fixed;
+            left: auto;
+            padding-top: 60px;
+            z-index: auto;
+            background-color: white;
+            border-left-color: #eee;
+            border-left-style: solid;
+            border-right: none;
+            min-height: 2000px;
+        }
+
+    </style>
+
+    <style>
+
+        @media only screen and (min-width: 768px) {
+          #toc.toc2 ul ul { margin-left: -10px; }
+        }
+
+
+        body div#toc .tocify-subheader ul {
+            margin-bottom: 0px;
+        }
+
+        body div#toc .tocify-subheader li {
+            font-size: 14px;
+        }
+        .tocify li.tocify-item, .tocify ul.tocify-item {
+            line-height: 24px;
+        }
+
+        body div#toc li.tocify-item.active:before,
+        body div#toc2 li.tocify-item.active:before {
+            content: "\00BB \0020";
+            margin-left: -12px;
+        }
+
+        body div#toc li.tocify-item.active a,
+        body div#toc2 li.tocify-item.active a {
+            color: red;
+        }
+    </style>
+
+    <style>
+        footer {
+            margin-top: 1000px;
+        }
+    </style>
+
+    <style>
+        /* overriding colony.css stylesheet */
+        .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] {
+           /*padding: 1.25em 1.5625em 1.125em 1.5625em;*/
+           padding: 0.3em 0.6em 0.25em 0.6em;
+        }
+        @media only screen and (min-width: 1280px)
+        #toc.toc2 {
+          /*width: 20em;*/
+          width: 25em;
+        }
+
+        #doc-content a {
+          color: #210DDC;
+        }
+
+        .top-bar h1 {
+            border-bottom: inherit;
+        }
+
+        h2 {
+          margin-top: 80px;
+        }
+        h3 {
+          margin-top: 40px;
+        }
+        h4,h5 {
+          margin-top: 30px;
+        }
+
+        .admonitionblock.tip > table td.content {
+            color: #10B061;
+        }
+        .admonitionblock.note > table td.content {
+            color: #B509AB;
+        }
+        .admonitionblock.important > table td.content {
+            color: #D5810A;
+        }
+
+        .admonitionblock .title {
+            font-size: larger;
+            font-style: italic;
+        }
+
+        .imageblock img {
+            margin-bottom: 10px;
+        }
+    </style>
+
+    <style>
+        /* from http://ben.balter.com/2014/03/13/pages-anchor-links/ */
+        .header-link {
+          position: absolute;
+          left: -0.5em;
+          opacity: 0;
+
+          /*
+          -webkit-transition: opacity 0.2s ease-in-out 0.1s;
+          -moz-transition: opacity 0.2s ease-in-out 0.1s;
+          -ms-transition: opacity 0.2s ease-in-out 0.1s;
+          */
+        }
+
+        h2:hover .header-link,
+        h3:hover .header-link,
+        h4:hover .header-link,
+        h5:hover .header-link,
+        h6:hover .header-link {
+          opacity: 1;
+        }
+    </style>
+
+    <style>
+        .top-bar
+        {
+            -webkit-transition-duration: .5s;
+            transition-duration: .5s;
+
+            -webkit-transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+            transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+
+            -webkit-transition-property: -webkit-transform;
+            transition-property: transform;
+        }
+
+        /*
+        http://osvaldas.info/auto-hide-sticky-header
+        MIT license
+        */
+        .header--hidden
+        {
+            -webkit-transform: translateY( -100% );
+            -ms-transform: translateY( -100% );
+            transform: translateY( -100% );
+
+            transition-duration: .5s;
+            transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+            -webkit-transition-property: -webkit-transform;
+            transition-property: transform;
+        }
+    </style>
+
+    <style>
+        #doc-content a.guide {
+            color: white;
+        }
+    </style>
+
+    <style>
+        .tocify {
+            margin-top: 80px;
+        }
+    </style>
+
+
+</script>
+
+</head>
+<body>
+
+<<div class="github-fork-ribbon-wrapper right" style="position: fixed;">
+    <div class="github-fork-ribbon">
+        <a href="https://github.com/apache/isis/fork">Fork me on GitHub</a>
+    </div>
+</div>
+
+
+<div class="row">
+
+    <div class="fixed contain-to-grid header">
+        <nav class="top-bar" data-topbar role="navigation" style="max-width: 80rem">
+            <ul class="title-area">
+                <li class="name">
+                    <h1>
+                        <a href="/index.html">Apache Isis&trade;</a>
+                    </h1>
+                </li>
+                <!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
+                <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
+            </ul>
+
+            <section class="top-bar-section">
+                <ul class="right">
+
+                    <li class="has-form">
+                       <FORM class="searchbox navbar-form navbar-right" id="searchbox_012614087480249044419:dn-q5gtwxya" action="http://www.google.com/cse">
+                        <div class="row collapse">
+                            <input type="hidden" name="cx" value="012614087480249044419:dn-q5gtwxya">
+                            <INPUT type="hidden" name="cof" value="FORID:0">
+                            <INPUT class="form-control" name="q" type="text" placeholder="Search">
+                        </div>
+                    </FORM>
+                     </li>
+
+                </ul>
+
+                <!-- Left Nav Section -->
+                <ul class="left">
+
+                    <li><a href="/documentation.html">Documentation</a></li>
+                    <li><a href="/downloads.html">Downloads</a></li>
+                    <li><a href="/help.html">Help</a></li>
+                    <li><a href="/asf.html">@ASF</a></li>
+
+                </ul>
+
+            </section>
+        </nav>
+    </div>
+</div>
+
+<div class="row">
+
+    <div id="doc-content-left" class="large-9 medium-9 columns">
+
+
+        <div id="doc-content">
+          <div class="sect1">
+<h2 id="_cgcom">Committers' Guide</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This committers' guide is for committers of Apache Isis itself who want guidance on release process, publishing documents and other related procedures.</p>
+</div>
+<div class="sect2">
+<h3 id="_other_guides">Other Guides</h3>
+<div class="paragraph">
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
+</div>
+<div class="paragraph">
+<p>The user guides available are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="ugfun.html">Fundamentals</a></p>
+</li>
+<li>
+<p><a href="ugvw.html">Wicket viewer</a></p>
+</li>
+<li>
+<p><a href="ugvro.html">Restful Objects viewer</a></p>
+</li>
+<li>
+<p><a href="ugsec.html">Security</a></p>
+</li>
+<li>
+<p><a href="ugtst.html">Testing</a></p>
+</li>
+<li>
+<p><a href="ugbtb.html">Beyond the Basics</a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The reference guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="rgant.html">Annotations</a></p>
+</li>
+<li>
+<p><a href="rgsvc.html">Domain Services</a></p>
+</li>
+<li>
+<p><a href="rgcfg.html">Configuration Properties</a></p>
+</li>
+<li>
+<p><a href="rgcms.html">Classes, Methods and Schema</a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="cgcon.html">Contributors' Guide</a> (how to set up a development environment for Apache Isis and contribute back to the project)</p>
+</li>
+<li>
+<p><a href="cgcon.html">Committers' Guide</a> (this guide)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>This guide provides guidance for Apache Isis' own committers.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cgcom_merging-a-pull-request">Merging a Pull Request</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The process for merging in github pull requests (so that they can be tested locally before committing) has been scripted in the <code>github-pr.sh</code> script.</p>
+</div>
+<div class="paragraph">
+<p>The script will merge the fork into a temporary branch, and then run a build.  Once you are happy, you can commit.</p>
+</div>
+<div class="paragraph">
+<p>The script requires <code>jq</code> to parse JSON; see the section below on installing pre-requisites.</p>
+</div>
+<div class="sect2">
+<h3 id="_process_and_usage">Process and Usage</h3>
+<div class="paragraph">
+<p>The overall process is as follows:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>locate/raise corresponding JIRA ticket, eg ISIS-1162</p>
+</li>
+<li>
+<p>checkout branch from which PR was forked (usually just 'master')</p>
+</li>
+<li>
+<p>merge PR into temporary branch using the <code>github-pr.sh</code> script</p>
+</li>
+<li>
+<p>test the change locally (run the app, rebuild, manual regression tests etc)</p>
+</li>
+<li>
+<p>if required, tidy up/refactor code as required</p>
+</li>
+<li>
+<p>merge temporary branch into mainline, and commit</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>For example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">github-pr.sh isis 1162 31</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>isis</code> is the JIRA project and repo</p>
+</li>
+<li>
+<p><code>1162</code> is the JIRA ticket number</p>
+</li>
+<li>
+<p><code>31</code>   is the gthub PR issue number</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_example_transcript">Example transcript</h3>
+<div class="paragraph">
+<p>The listing below shows the steps taken by the script:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">$ sh github-pr.sh isis 1162 31
+
+Found JIRA ticket
+Found github PR
+branch_name_local: master
+username         : sebadiaz
+repo_full_name   : sebadiaz/isis
+repo_clone_url   : https://github.com/sebadiaz/isis.git
+branch_name_fork : master
+
+merging into: ISIS-1162_pr-31
+
+Deleting branch 'ISIS-1162_pr-31'
+Deleted branch ISIS-1162_pr-31 (was bd2e3c2).
+Creating the branch ISIS-1162_pr-31
+Switched to a new branch 'ISIS-1162_pr-31'
+Pulling the changes from https://github.com/sebadiaz/isis.git master
+From https://github.com/sebadiaz/isis
+ * branch            master     -&gt; FETCH_HEAD
+Auto-merging core/pom.xml
+Merge made by the 'recursive' strategy.
+ core/pom.xml                                       |   3 +-
+ .../apache/isis/security/shiro/IsisLdapRealm.java  | 198 +++++++++++++++++++--
+ 2 files changed, 186 insertions(+), 15 deletions(-)
+
+Merged the PR; hit enter to build</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The build now commences.  Once done, the script continues:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">If build successful and happy to merge, execute:
+
+git checkout master &amp;&amp; git merge --no-ff ISIS-1162_pr-31 &amp;&amp; git branch -d ISIS-1162_pr-31</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The screenshot belows shows the history we end up with:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/committers/github-pr-history.png"><img src="images/committers/github-pr-history.png" alt="github pr history"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>This shows the fork being merged into the temporary branch ("ISIS-1162_pr-31"), then some further tidy-up, and finally the merging of the temporary branch into mainline.</p>
+</div>
+<div class="paragraph">
+<p>Note that there is no rebasing in this model.  This is intentional: when the merged branch is pushed, github will automatically close the original pull request.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_prerequisites">Prerequisites</h3>
+<div class="paragraph">
+<p>The script uses 'jq' to parse JSON.  To install:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>on Linux:<br></p>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">aptitude install jq</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>on MacOS:<br></p>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">brew install jq</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>on Windows:<br></p>
+<div class="paragraph">
+<p>Download exe from <a href="http://stedolan.github.io/jq/download/">website</a></p>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cgcom_cutting-a-release">Cutting a Release</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The release process consists of:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the release manager cutting the release (documented below)</p>
+</li>
+<li>
+<p>Members of the Apache Isis PMC <a href="#_cgcom_verifying-releases">verifying</a> and voting on the release</p>
+</li>
+<li>
+<p>the release manager performing post-release tasks, for either a <a href="#_cgcom_post-release-successful">successful</a> or an <a href="#_cgcom_post-release-unsuccessful">unsuccessful</a> vote.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Apache Isis itself consists of two separately releasable modules; relative to the <a href="https://git-wip-us.apache.org/repos/asf/isis/repo?p=isis.git;a=tree">source code root</a> there are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>core</code></p>
+</li>
+<li>
+<p><code>component/example/archetypes/simpleapp</code></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>This section details the process for formally releasing Isis modules.  It describes the process for both <code>core</code> and then the archetype.  The subsequent sections describe how other committers can <a href="#_cgcom_verifying-releases">verify a release</a> and how the release manager can then perform <a href="#_cgcom_post-release">post-release</a> activities and set up for the next development iteration.</p>
+</div>
+<div class="paragraph">
+<p>If you&#8217;ve not performed a release before, then note that there are some configuration <a href="#_cgcom_release-process-prereqs">prerequisites</a> that must be configured first.  In particular, you&#8217;ll need signed public/private keys, and the ASF Nexus staging repo inlocal <code>~/.m2/settings.xml</code> file.</p>
+</div>
+<div class="paragraph">
+<p>These release notes using bash command line tools.  They should work on Linux and MacOS; for Windows, use mSysGit.</p>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_cutting-a-release_obtain-consensus">Obtain Consensus</h3>
+<div class="paragraph">
+<p>Before releasing <code>core</code>, ensure there is consensus on the <a href="../support.html">dev mailing list</a> that this is the right time for a release. The discussion should include confirming the version number to be used, and to confirm content.</p>
+</div>
+<div class="paragraph">
+<p>These discussions should also confirm the version number of the module being released. This should be in line with our <a href="#_cgcom_versioning-policy">semantic versioning policy</a>.</p>
+</div>
+<div class="paragraph">
+<p>Make sure you have a JIRA ticket open against which to perform all commits.  In most cases a JIRA ticket will have been created at the beginning of the previous release cycle.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_cutting-a-release_set-environment-variables">Set environment variables</h3>
+<div class="paragraph">
+<p>We use environment variables to parameterize as many of the steps as possible.  For example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">cd core
+export ISISTMP=/c/tmp              <i class="conum" data-value="1"></i><b>(1)</b>
+export ISISDEV=1.13.0-SNAPSHOT
+export ISISREL=1.12.0
+export ISISRC=RC1
+export ISISBRANCH=release-$ISISREL-$ISISRC
+export ISISJIRA=ISIS-9999          <i class="conum" data-value="2"></i><b>(2)</b>
+
+env | grep ISIS | sort</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>adjust by platform</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>set to an "umbrella" ticket for all release activities.  (One should exist already, <a href="#_cgcom_post-release-successful_update-jira_create-new-jira">created at</a> the beginning of the development cycle now completing).</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Obviously, alter <code>$ISISDEV</code> and <code>$ISISREL</code> as required, and bump <code>$ISISRC</code> for re-releasing following an <a href="#_cgcom_post-release-unsuccessful">unsuccessful</a> releases.</p>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Note that the branch name is <strong>not</strong> the same any of the eventual tag names (eg <code>isis-1.12.0</code> or <code>simpleapp-archetype-1.12.0</code>).</p>
+</div>
+<div class="paragraph">
+<p>If they did have the same name, then what would happen is that the <code>maven-release-plugin</code> would checkout the (HEAD of the) branch and thus upload a SNAPSHOT to the snapshot repository.  What it should of course do is checkout the tag and then upload that to the release staging repository.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_cutting-a-release_pull-down-code-to-release">Pull down code to release</h3>
+<div class="paragraph">
+<p>Set the HEAD of your local git repo to the commit to be released.  This will usually be the tip of the origin&#8217;s <code>master</code> branch.  Then, create a release branch for the version number being released; eg:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">git checkout master
+git pull --ff-only
+git checkout -b $ISISBRANCH</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>All release preparation is done locally; if we are successful, this branch will be merged back into master.</p>
+</div>
+<div class="paragraph">
+<p>Double check that the version number of the parent pom should reflect the branch name that you are now on (with a <code>-SNAPSHOT</code> suffix).  his will normally have been done already during earlier development; but confirm that it has been updated. If it has not, make the change.</p>
+</div>
+<div class="paragraph">
+<p>Double check that the version number of the core POM (<code>core/pom.xml</code>) should reflect the branch name that you are now on.  For example, if releasing version <code>1.12.0</code>, the POM should read:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;groupId&gt;</span>org.apache.isis.core<span class="tag">&lt;/groupId&gt;</span>
+<span class="tag">&lt;artifactId&gt;</span>isis<span class="tag">&lt;/artifactId&gt;</span>
+<span class="tag">&lt;version&gt;</span>1.12.0-SNAPSHOT<span class="tag">&lt;/version&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Also, check that there are no snapshot dependencies:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">grep SNAPSHOT `/bin/find . -name pom.xml | grep -v target | grep -v mothball | sort`</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The only mention of <code>SNAPSHOT</code> should be for the Isis modules about to be released.</p>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Obviously, don&#8217;t update Apache Isis' <code>SNAPSHOT</code> references; these get updated by the <code>mvn release:prepare</code> command we run later.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_cutting-a-release_releasing-core">Releasing Core</h3>
+<div class="paragraph">
+<p>First, we release <code>core</code>.  Switch to the appropriate directory:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">cd core</code></pre>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_set-environment-variables">Set environment variables</h4>
+<div class="paragraph">
+<p>Set additional environment variables for the core "artefact":</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">export ISISART=isis
+export ISISCOR=&quot;Y&quot;
+
+env | grep ISIS | sort</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_license-headers">License headers</h4>
+<div class="paragraph">
+<p>The Apache Release Audit Tool <code>RAT</code> (from the <a href="http://creadur.apache.org">Apache Creadur</a> project) checks for missing license header files. The parent <code>pom.xml</code> of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions.</p>
+</div>
+<div class="paragraph">
+<p>To run the RAT tool, use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn org.apache.rat:apache-rat-plugin:check -D rat.numUnapprovedLicenses=50 -o &amp;&amp; \
+for a in `/bin/find . -name rat.txt -print`; do grep '!???' $a; done || \
+for a in `/bin/find . -name rat.txt -print`; do grep '!AL' $a; done</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where <code>rat.numUnapprovedLicenses</code> property is set to a high figure, temporarily overriding the default value of 0. This will allow the command to run over all submodules, rather than failing after the first one.   The command writes out a <code>target\rat.txt</code> for each submodule.  missing license notes are indicated using the key <code>!???</code>.  The <code>for</code> command collates all the errors.</p>
+</div>
+<div class="paragraph">
+<p>Investigate and fix any reported violations, typically by either:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>adding genuinely missing license headers from Java (or other) source files, or</p>
+</li>
+<li>
+<p>updating the <code>&lt;excludes&gt;</code> element for the <code>apache-rat-plugin</code> plugin to ignore test files, log files and any other non-source code files</p>
+</li>
+<li>
+<p>also look to remove any stale <code>&lt;exclude&gt;</code> entries</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>To add missing headers, use the groovy script <code>addmissinglicenses.groovy</code> (in the <code>scripts</code> directory) to automatically insert missing headers for certain file types. The actual files checked are those with extensions specified in the line <code>def fileEndings = [&quot;.java&quot;, &quot;.htm&quot;]</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">groovy ../scripts/addmissinglicenses.groovy -x</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>(If the <code>-x</code> is omitted then the script is run in "dry run" mode).  Once you&#8217;ve fixed all issues, confirm once more that <code>apache-rat-plugin</code> no longer reports any license violations, this time leaving the <code>rat.numUnapprovedLicenses</code> property to its default, 0:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn org.apache.rat:apache-rat-plugin:check -D rat.numUnapprovedLicenses=0 -o &amp;&amp; \
+for a in `find . -name rat.txt -print`; do grep '!???' $a; done</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_missing-license-check">Missing License Check</h4>
+<div class="paragraph">
+<p>Although Apache Isis has no dependencies on artifacts with incompatible licenses, the POMs for some of these dependencies (in the Maven central repo) do not necessarily contain the required license information. Without appropriate additional configuration, this would result in the generated <code>DEPENDENCIES</code> file and generated Maven site indicating dependencies as having "unknown" licenses.</p>
+</div>
+<div class="paragraph">
+<p>Fortunately, Maven allows the missing information to be provided by configuring the <code>maven-remote-resources-plugin</code>. This is stored in the <code>src/main/appended-resources/supplemental-models.xml</code> file, relative to the root of each releasable module.</p>
+</div>
+<div class="paragraph">
+<p>To capture the missing license information, use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn license:download-licenses &amp;&amp; \
+groovy ../scripts/checkmissinglicenses.groovy</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The Maven plugin creates a <code>license.xml</code> file in the <code>target/generated-resources</code> directory of each module.  The script then searches for these <code>licenses.xml</code> files, and compares them against the contents of the <code>supplemental-models.xml</code> file.</p>
+</div>
+<div class="paragraph">
+<p>For example, the output could be something like:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">licenses to add to supplemental-models.xml:
+
+[org.slf4j, slf4j-api, 1.5.7]
+[org.codehaus.groovy, groovy-all, 1.7.2]
+
+licenses to remove from supplemental-models.xml (are spurious):
+
+[org.slf4j, slf4j-api, 1.5.2]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If any missing entries are listed or are spurious, then update <code>supplemental-models.xml</code> and try again.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_commit-changes">Commit changes</h4>
+<div class="paragraph">
+<p>Commit any changes from the preceding steps:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">git commit -am &quot;$ISISJIRA: updates to pom.xml etc for release&quot;</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_sanity-check">Sanity check</h4>
+<div class="paragraph">
+<p>Perform one last sanity check on the codebase.  Delete all Isis artifacts from your local Maven repo, then build using the <code>-o</code> offline flag:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">rm -rf ~/.m2/repository/org/apache/isis
+mvn clean install -o</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_release-prepare-dry-run">Release prepare "dry run"</h4>
+<div class="paragraph">
+<p>Most of the work is done using the <code>mvn release:prepare</code> goal.  Since this makes a lot of changes, we run it first in "dry run" mode; only if that works do we run the goal for real.</p>
+</div>
+<div class="paragraph">
+<p>Run the dry-run as follows:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn release:prepare -P apache-release -D dryRun=true \
+    -DreleaseVersion=$ISISREL \
+    -Dtag=$ISISART-$ISISREL \
+    -DdevelopmentVersion=$ISISDEV</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You may be prompted for the gpg passphrase.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Experiments in using <code>--batch-mode -Dgpg.passphrase=&quot;&#8230;&#8203;&quot;</code> to fully automate this didn&#8217;t work; for more info, see <a href="http://maven.apache.org/plugins/maven-gpg-plugin/sign-mojo.html">here</a> (maven release plugin docs) and <a href="http://maven.apache.org/maven-release/maven-release-plugin/examples/non-interactive-release.html">here</a> (maven gpg plugin docs).</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_release-prepare-proper">Release prepare "proper"</h4>
+<div class="paragraph">
+<p>Assuming this completes successfully, re-run the command, but without the <code>dryRun</code> flag and specifying <code>resume=false</code> (to ignore the generated <code>release.properties</code> file that gets generated as a side-effect of using <code>git</code>). You can also set the <code>skipTests</code> flag since they would have been run during the previous dry run:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn release:prepare -P apache-release -D resume=false -DskipTests=true \
+        -DreleaseVersion=$ISISREL \
+        -Dtag=$ISISART-$ISISREL \
+        -DdevelopmentVersion=$ISISDEV</code></pre>
+</div>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>If there are any snags at this stage, then explicitly delete the generated <code>release.properties</code> file first before trying again.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_post-prepare-sanity-check">Post-prepare sanity check</h4>
+<div class="paragraph">
+<p>You should end up with artifacts in your local repo with the new version (eg <code>1.12.0</code>).  This is a good time to do some quick sanity checks; nothing has yet been uploaded:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>unzip the source-release ZIP and check it builds.</p>
+</li>
+<li>
+<p>Inspect the <code>DEPENDENCIES</code> file, and check it looks correct.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>These steps can be performed using the following script:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>rm -rf $ISISTMP/$ISISART-$ISISREL
+mkdir $ISISTMP/$ISISART-$ISISREL
+
+if [ "$ISISCOR" == "Y" ]; then
+    ZIPDIR="$M2_REPO/repository/org/apache/isis/core/$ISISART/$ISISREL"
+else
+    ZIPDIR="$M2_REPO/repository/org/apache/isis/$ISISCPT/$ISISART/$ISISREL"
+fi
+echo "cp \"$ZIPDIR/$ISISART-$ISISREL-source-release.zip\" $ISISTMP/$ISISART-$ISISREL/."
+cp "$ZIPDIR/$ISISART-$ISISREL-source-release.zip" $ISISTMP/$ISISART-$ISISREL/.
+
+pushd $ISISTMP/$ISISART-$ISISREL
+unzip $ISISART-$ISISREL-source-release.zip
+
+cd $ISISART-$ISISREL
+mvn clean install
+
+cat DEPENDENCIES
+
+popd</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-core_release-perform-upload">Release perform (Upload)</h4>
+<div class="paragraph">
+<p>Once the release has been built locally, it should be uploaded for voting. This is done by deploying the Maven artifacts to a staging directory (this includes the source release ZIP file which will be voted upon).</p>
+</div>
+<div class="paragraph">
+<p>The Apache staging repository runs on Nexus server, hosted at <a href="https://repository.apache.org">repository.apache.org</a>. The process of uploading will create a staging repository that is associated with the host (IP address) performing the release. Once the repository is staged, the newly created staging repository is "closed" in order to make it available to others.</p>
+</div>
+<div class="paragraph">
+<p>Use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn release:perform -P apache-release \
+    -DworkingDirectory=$ISISTMP/$ISISART-$ISISREL/checkout</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The custom <code>workingDirectory</code> prevents file path issues if releasing on Windows.  The command checks out the codebase from the tag, then builds the artifacts, then uploads them to the Apache staging repository:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">...
+[INFO] --- maven-release-plugin:2.3.2:perform (default-cli) @ isis ---
+[INFO] Performing a LOCAL checkout from scm:git:file:///C:\APACHE\isis-git-rw\co
+re
+[INFO] Checking out the project to perform the release ...
+[INFO] Executing: cmd.exe /X /C &quot;git clone --branch release-1.12.0 file:///C:\APACHE\isis-git-rw\core C:\APACHE\isis-git-rw\core\target\checkout&quot;
+[INFO] Working directory: C:\APACHE\isis-git-rw\core\target
+[INFO] Performing a LOCAL checkout from scm:git:file:///C:\APACHE\isis-git-rw
+[INFO] Checking out the project to perform the release ...
+[INFO] Executing: cmd.exe /X /C &quot;git clone --branch release-1.12.0 file:///C:\APACHE\isis-git-rw C:\APACHE\isis-git-rw\core\target\checkout&quot;
+[INFO] Working directory: C:\APACHE\isis-git-rw\core\target
+[INFO] Executing: cmd.exe /X /C &quot;git ls-remote file:///C:\APACHE\isis-git-rw&quot;
+[INFO] Working directory: C:\Users\ADMINI~1\AppData\Local\Temp
+[INFO] Executing: cmd.exe /X /C &quot;git fetch file:///C:\APACHE\isis-git-rw&quot;
+[INFO] Working directory: C:\APACHE\isis-git-rw\core\target\checkout
+[INFO] Executing: cmd.exe /X /C &quot;git checkout release-1.12.0&quot;
+[INFO] Working directory: C:\APACHE\isis-git-rw\core\target\checkout
+[INFO] Executing: cmd.exe /X /C &quot;git ls-files&quot;
+[INFO] Working directory: C:\APACHE\isis-git-rw\core\target\checkout
+[INFO] Invoking perform goals in directory C:\APACHE\isis-git-rw\core\target\checkout\core
+[INFO] Executing goals 'deploy'...
+...</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You may (again) be prompted for gpg passphrase.  All being well this command will complete successfully. Given that it is uploading code artifacts, it could take a while to complete.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_cutting-a-release_releasing-the-archetype">Releasing the Archetype</h3>
+<div class="paragraph">
+<p>Apache Isis archetypes are reverse engineered from example applications. Once reverse engineered, the source is checked into git (replacing any earlier version of the archetype) and released.</p>
+</div>
+<div class="paragraph">
+<p>Switch to the directory containing the <code>simpleapp</code> example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">cd ../example/application/simpleapp</code></pre>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-the-archetype_setup-environment-variables">Setup environment variables</h4>
+<div class="paragraph">
+<p>Set additional environment variables for the <code>simpleapp-archetype</code> artefact:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">export ISISART=simpleapp-archetype
+export ISISPAR=$ISISREL                 <i class="conum" data-value="1"></i><b>(1)</b>
+
+export ISISCPT=$(echo $ISISART | cut -d- -f2)
+export ISISCPN=$(echo $ISISART | cut -d- -f1)
+
+env | grep ISIS | sort</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td><code>$ISISPAR</code> is the version of the Apache Isis core that will act as the archetype&#8217;s parent. Usually this is the same as <code>$ISISREL</code>.</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-the-archetype_check-the-example-app">Check the example app</h4>
+<div class="paragraph">
+<p>Update the parent <code>pom.xml</code> to reference the <em>released</em> version of Apache Isis core, eg:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;properties&gt;</span>
+    <span class="tag">&lt;isis.version&gt;</span>1.12.0<span class="tag">&lt;/isis.version&gt;</span>
+    ...
+<span class="tag">&lt;/properties&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Check for and fix any missing license header notices:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn org.apache.rat:apache-rat-plugin:check -D rat.numUnapprovedLicenses=50 -o &amp;&amp; \
+for a in `/bin/find . -name rat.txt -print`; do grep '!???' $a; done || \
+for a in `/bin/find . -name rat.txt -print`; do grep '!AL' $a; done</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Finally, double check that the app is running satisfactorily:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>first, as self-hosted webconsole (browse to <a href="http://localhost:8080">http://localhost:8080</a>):<br></p>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn clean install &amp;&amp; \
+mvn antrun:run -P self-host</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>then using mvn jetty plugin (browse to <a href="http://localhost:8080">http://localhost:8080</a>):<br></p>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">cd webapp
+mvn jetty:run</code></pre>
+</div>
+</div>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Check the about page and confirm built against non-SNAPSHOT versions of the Apache Isis jars.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-the-archetype_create-the-archetype">Create the archetype</h4>
+<div class="paragraph">
+<p>Make sure you are in the correct directory and environment variables are correct.</p>
+</div>
+<div class="paragraph">
+<p>To recreate the <strong>simpleapp</strong> archetype:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">cd example/application/simpleapp
+env | grep ISIS | sort</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Then, run the script:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">sh ../../../scripts/recreate-archetype.sh $ISISJIRA</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The script automatically commits changes; if you wish use <code>git log</code> and
+<code>git diff</code> (or a tool such as SourceTree) to review changes made.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-the-archetype_release-prepare">Release prepare</h4>
+<div class="paragraph">
+<p>Switch to the <strong>archetype</strong> directory and execute the <code>release:prepare</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>cd ../../../example/archetype/$ISISCPN
+rm -rf $ISISTMP/checkout
+mvn release:prepare -P apache-release \
+                -DreleaseVersion=$ISISREL \
+                -DdevelopmentVersion=$ISISDEV \
+                -Dtag=$ISISART-$ISISREL</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-the-archetype_post-prepare-sanity-check">Post-prepare sanity check</h4>
+<div class="paragraph">
+<p>This is a good point to test the archetype; nothing has yet been uploaded.</p>
+</div>
+<div class="paragraph">
+<p><em>In a different session</em>, create a new app from the archetype.  First set up environment variables:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">export ISISTMP=/c/tmp    # or as required
+export ISISCPN=simpleapp
+env | grep ISIS | sort</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Then generate a new app from the archetype:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">rm -rf $ISISTMP/test-$ISISCPN
+
+mkdir $ISISTMP/test-$ISISCPN
+cd $ISISTMP/test-$ISISCPN
+mvn archetype:generate  \
+    -D archetypeCatalog=local \
+    -D groupId=com.mycompany \
+    -D artifactId=myapp \
+    -D archetypeGroupId=org.apache.isis.archetype \
+    -D archetypeArtifactId=$ISISCPN-archetype</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Build the newly generated app and test:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">cd myapp
+mvn clean install
+mvn antrun:run -P self-host    # runs as standalone app using webconsole
+cd webapp
+mvn jetty:run                  # runs as mvn jetty plugin</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_releasing-the-archetype_release-perform-upload">Release Perform (upload)</h4>
+<div class="paragraph">
+<p>Back in the original session (in the <strong>archetype</strong> directory, <code>example/archetype/$ISISCPN</code>), execute <code>release:perform</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>mvn release:perform -P apache-release \
+                -DworkingDirectory=$ISISTMP/checkout</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This will upload the artifacts to the ASF Nexus repository.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_cutting-a-release_check-close-staging-repo">Check/Close Staging Repo</h3>
+<div class="paragraph">
+<p>The <code>mvn release:perform</code> commands will have put release artifacts for both <code>core</code> and the <code>simpleapp</code> archetype into a newly created staging repository on the ASF Nexus repository server.</p>
+</div>
+<div class="paragraph">
+<p>Log onto <a href="http://repository.apache.org">repository.apache.org</a> (using your ASF LDAP account):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/release-process/nexus-staging-0.png"><img src="images/release-process/nexus-staging-0.png" alt="nexus staging 0" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>And then check that the release has been staged (select <code>staging repositories</code> from left-hand side):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/release-process/nexus-staging-1.png"><img src="images/release-process/nexus-staging-1.png" alt="nexus staging 1" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>If nothing appears in a staging repo you should stop here and work out why.</p>
+</div>
+<div class="paragraph">
+<p>Assuming that the repo has been populated, make a note of its repo id; this is needed for the voting thread. In the screenshot above the id is <code>org.apache.isis-008</code>.</p>
+</div>
+<div class="paragraph">
+<p>After checking that the staging repository contains the artifacts that you expect you should close the staging repository. This will make it available so that people can check the release.</p>
+</div>
+<div class="paragraph">
+<p>Press the Close button and complete the dialog:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/release-process/nexus-staging-2.png"><img src="images/release-process/nexus-staging-2.png" alt="nexus staging 2" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>Nexus should start the process of closing the repository.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/release-process/nexus-staging-2a.png"><img src="images/release-process/nexus-staging-2a.png" alt="nexus staging 2a" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>All being well, the close should (eventually) complete successfully (keep hitting refresh):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/release-process/nexus-staging-3.png"><img src="images/release-process/nexus-staging-3.png" alt="nexus staging 3" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>The Nexus repository manager will also email you with confirmation of a successful close.</p>
+</div>
+<div class="paragraph">
+<p>If Nexus has problems with the key signature, however, then the close will be aborted:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/release-process/nexus-staging-4.png"><img src="images/release-process/nexus-staging-4.png" alt="nexus staging 4" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>Use <code>gpg --keyserver hkp://pgp.mit.edu --recv-keys nnnnnnnn</code> to confirm that the key is available.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Unfortunately, Nexus does not seem to allow subkeys to be used for signing. See <a href="#_cgcom_key-generation">Key Generation</a> for more details.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_cutting-a-release_push-branches">Push branches</h3>
+<div class="paragraph">
+<p>Push the release branch to origin:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">git push -u origin $ISISBRANCH</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>and also push tags for both core and the archetype:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>git push origin refs/tags/isis-$ISISREL:refs/tags/isis-$ISISREL-$ISISRC
+git push origin refs/tags/simpleapp-archetype-$ISISREL:refs/tags/simpleapp-archetype-$ISISREL-$ISISRC
+git fetch</code></pre>
+</div>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The remote tag isn&#8217;t visible locally but can be seen <a href="https://git-wip-us.apache.org/repos/asf/isis/repo?p=isis.git;a=summary">online</a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_cutting-a-release_voting">Voting</h3>
+<div class="paragraph">
+<p>Once the artifacts have been uploaded, you can call a vote.</p>
+</div>
+<div class="paragraph">
+<p>In all cases, votes last for 72 hours and require a +3 (binding) vote from members.</p>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_cutting-a-release_voting-start-voting-thread">Start voting thread on <a href="mailto:&#100;e&#118;&#x40;&#x69;&#x73;&#x69;&#115;&#x2e;&#x61;p&#97;&#x63;&#104;e&#46;&#111;&#114;g">&#100;e&#118;&#x40;&#x69;&#x73;&#x69;&#115;&#x2e;&#x61;p&#97;&#x63;&#104;e&#46;&#111;&#114;g</a></h4>
+<div class="paragraph">
+<p>The following boilerplate is for a release of the Apache Isis Core. Adapt as required:</p>
+</div>
+<div class="paragraph">
+<p>Use the following subject, eg:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">[VOTE] Apache Isis Core release 1.12.0 RC1</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>And use the following body:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">I've cut a release for Apache Isis Core and the simpleapp archetype:
+
+* Core 1.12.0
+* SimpleApp Archetype 1.12.0
+
+The source code artifacts have been uploaded to staging repositories on repository.apache.org:
+
+* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/core/isis/1.12.0/isis-1.12.0-source-release.zip
+* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/archetype/simpleapp-archetype/1.12.0/simpleapp-archetype-1.12.0-source-release.zip
+
+For each zip there is a corresponding signature file (append .asc to the zip's url).
+
+In the source code repo the code has been tagged as isis-1.12.0-RC1 and simpleapp-archetype-1.12.0-RC1; see https://git-wip-us.apache.org/repos/asf?p=isis.git
+
+For instructions on how to verify the release (build from binaries and/or use in Maven directly), see http://isis.apache.org/guides/cgcom.html#_cgcom_verifying-releases
+
+Please verify the release and cast your vote.  The vote will be open for a minimum of 72 hours.
+
+[ ] +1
+[ ]  0
+[ ] -1</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Remember to update:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the version number (1.12.0 or whatever)</p>
+</li>
+<li>
+<p>the release candidate number (<code>RC1</code> or whatever)</p>
+</li>
+<li>
+<p>the repository id, as provided by Nexus earlier (<code>orgapacheisis-10xx</code> or whatever)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Note that the email also references the procedure for other committers to <a href="#_cgcom_verifying-releases">verify the release</a>.</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cgcom_verifying-releases">Verifying a Release</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The release process consists of:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the release manager <a href="#_cgcom_cutting-a-release">cutting the release</a></p>
+</li>
+<li>
+<p>members of the Apache Isis PMC verifying and voting on the release (documented below)</p>
+</li>
+<li>
+<p>the release manager performing post-release tasks, for either a <a href="#_cgcom_post-release-successful">successful</a> or an <a href="#_cgcom_post-release-unsuccessful">unsuccessful</a> vote.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>This section describes some guidance on what a voter (members of the Apache Isis PMC and anyone else who wishes) is expected to do before casting their vote in order to verify a release.</p>
+</div>
+<div class="sect2">
+<h3 id="_background">Background</h3>
+<div class="paragraph">
+<p>Whenever a release manager announces a vote on a release (as per the <a href="#_cgcom_release-process">release process</a>) on the <a href="../support.html">dev mailing list</a>, it is the responsibility of the project&#8217;s PMC to cast their vote on the release.  Anyone else can also vote, but only members of the Apache Isis PMC&#8217;s vote are binding.</p>
+</div>
+<div class="paragraph">
+<p>Per this <a href="http://www.apache.org/dev/release.html">ASF documentation</a>, the legal requirements for an ASF release are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>a source zip file + corresponding signature (signed by the release manager, which is in the ASF web of trust and in our KEYS file)</p>
+</li>
+<li>
+<p>all source files have the Apache license (this is ensured by the running of the rat plugin prior to release; you could run it on the unzipped source)</p>
+</li>
+<li>
+<p>all dependencies are appropriately licensed; see the <code>DEPENDENCIES</code> file which is automatically generated from the POMs plus the supplemental-models.xml file</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Note that the binaries are <em>not</em> an ASF release, they merely exist on the Maven central repo as a convenience. That said, you might also want to verify the release by pulling the binaries from the Maven staging repository. Details of how to do this are also documented below.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_prerequisites_2">Prerequisites</h3>
+<div class="paragraph">
+<p>To verify the source ZIP files, you will need to have imported the public keys used for signing Apache Isis releases. These can be downloaded from the root of the Apache Isis source tree.</p>
+</div>
+<div class="paragraph">
+<p>Since the Apache Isis source is mirrored on github.com, you can just use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">curl http://www.apache.org/dist/isis/KEYS &gt; /tmp/KEYS
+gpg --import /tmp/KEYS</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Also, we will be rebuilding Isis from source.  Therefore delete all Isis artifacts from your local Maven repo:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">rm -rf ~/.m2/repository/org/apache/isis</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_verifying_source_artifacts">Verifying source artifacts</h3>
+<div class="paragraph">
+<p>You can either verify the source artifacts <a href="#_cgcom_verifying-releases_manual-procedure">manuall</a>, or use a script that <a href="#_cgcom_verifying-releases_automated-procedure">automates</a> the steps.</p>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_verifying-releases_manual-procedure">Manual procedure</h4>
+<div class="paragraph">
+<p>The following section describes the steps to perform to manually verify a release.</p>
+</div>
+<div class="sect4">
+<h5 id="_download_the_artifacts">Download the artifacts</h5>
+<div class="paragraph">
+<p>Download both the ZIP and .ASC files from the location specified in the voting email. To verify that the signature is correct, use:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">gpg --verify isis-x.y.z.zip.asc isis-x.y.z.zip</code></pre>
+</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_building_source_artifacts">Building source artifacts</h5>
+<div class="paragraph">
+<p>Assuming the ZIP file verifies, it should be unpacked, and then the artifact built from source.</p>
+</div>
+<div class="paragraph">
+<p>To build Apache Isis core, first download any dependencies:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>mvn dependency:go-offline</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Check that no Isis artifacts have yet been downloaded, ie there is no <code>~/.m2/org/repository/org/apache/isis</code> directory. If there are, it could indicate that the release being verified incorrectly references previous versions of Apache Isis</p>
+</div>
+<div class="paragraph">
+<p>Assuming all is ok, build using the <code>-o</code> offline flag:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>mvn clean install -o</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Confirm that the versions of the Isis artifacts now cached in your local repository are correct.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_verifying_binary_artifacts">Verifying binary artifacts</h5>
+<div class="paragraph">
+<p>You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the <a href="../intro/getting-started/simpleapp-archetype.html">simpleapp archetype</a> and running the resultant app.</p>
+</div>
+<div class="paragraph">
+<p>Configuring your local Maven install amounts to updating the <code>~/.m2/settings.xml</code> file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;profiles&gt;</span>
+    <span class="tag">&lt;profile&gt;</span>
+        <span class="tag">&lt;id&gt;</span>verify-isis<span class="tag">&lt;/id&gt;</span>
+        <span class="tag">&lt;repositories&gt;</span>
+            <span class="tag">&lt;repository&gt;</span>
+                <span class="tag">&lt;id&gt;</span>isis-core-staging<span class="tag">&lt;/id&gt;</span>
+                <span class="tag">&lt;name&gt;</span>Isis Core Staging<span class="tag">&lt;/name&gt;</span>
+                <span class="tag">&lt;releases&gt;</span>
+                    <span class="tag">&lt;enabled&gt;</span>true<span class="tag">&lt;/enabled&gt;</span>
+                    <span class="tag">&lt;updatePolicy&gt;</span>always<span class="tag">&lt;/updatePolicy&gt;</span>
+                    <span class="tag">&lt;checksumPolicy&gt;</span>warn<span class="tag">&lt;/checksumPolicy&gt;</span>
+                <span class="tag">&lt;/releases&gt;</span>
+                <span class="tag">&lt;url&gt;</span>http://repository.apache.org/content/repositories/orgapacheisis-10xx<span class="tag">&lt;/url&gt;</span>
+                <span class="tag">&lt;layout&gt;</span>default<span class="tag">&lt;/layout&gt;</span>
+            <span class="tag">&lt;/repository&gt;</span>
+            ...
+        <span class="tag">&lt;/repositories&gt;</span>
+    <span class="tag">&lt;/profile&gt;</span>
+    ...
+<span class="tag">&lt;/profiles&gt;</span>
+<span class="tag">&lt;activeProfiles&gt;</span>
+    <span class="tag">&lt;activeProfile&gt;</span>verify-isis<span class="tag">&lt;/activeProfile&gt;</span>
+    ...
+<span class="tag">&lt;/activeProfiles&gt;</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where the repository URL is as provided in the VOTE email. If there is more than one repository (as is sometimes the case if multiple components have been released), then repeat the &lt;repository&gt; section for each.</p>
+</div>
+<div class="paragraph">
+<p>Once the vote has completed, the staging repositories will be removed and so you should deactive the profile (comment out the <code>&lt;activeProfile&gt;</code> element). If you forget to deactive the profile, there should be no adverse effects; Maven will just spend unnecessary cycles attempting to hit a non-existent repo.</p>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcom_verifying-releases_automated-procedure">Automated procedure</h4>
+<div class="paragraph">
+<p>To save some time in verifying an Apache Isis release we&#8217;ve assembled a script to automate the process. The script is tested on Mac OSX and Linux. Windows users can use Cygwin or <a href="http://msysgit.github.io/">msysgit</a>.</p>
+</div>
+<div class="paragraph">
+<p>It&#8217;s <em>recommended</em> that you start this process in an empty directory:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mkdir ~/verify-isis-release
+cd ~/verify-isis-release</code></pre>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_copy_script_to_local_machine">Copy script to local machine</h5>
+<div class="paragraph">
+<p>Copy the following script, save to <code>verify-isis-release.sh</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">#!/bin/bash
+# Instructions:
+# -Create an empty directory
+# -Put a .txt file in it containing a list of all the urls of the zip files
+# -Run this script
+# TODO: enhance this script so it will stop when something is broken
+_download(){
+    for fil in `cat *.txt`
+    do
+       echo 'Downloading '$fil
+       curl  -L -O $fil
+       curl  -L -O $fil.asc
+    done
+}
+_verify(){
+    for zip in *.zip
+    do
+       echo 'Verifying '$zip
+       gpg --verify $zip.asc $zip
+    done
+}
+_unpack(){
+    echo 'Unpacking '
+    unzip -q '*.zip'
+}
+_build(){
+    echo 'Removing Apache Isis from local repo '$module
+    rm -rf ~/.m2/repository/org/apache/isis
+    COUNTER=0
+    for module in ./*/
+    do
+       COUNTER=$[COUNTER+1]
+       if [ $COUNTER -eq 1 ]
+       then
+         cd $module
+         echo 'Building Core '$module
+         mvn clean install -o
+         cd ..
+       else
+         cd $module
+         echo 'Building Module '$module
+         mvn clean install
+         cd ..
+       fi
+    done
+}
+# The work starts here
+_download
+_verify
+_unpack
+_build</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Make sure the script is executable:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>chmod +x verify-isis-release.sh</code></pre>
+</div>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The script could be enhanced in many ways, feel free to contribute improvements!</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_create_an_input_file">Create an input file</h5>
+<div class="paragraph">
+<p>The input file is a plain <code>.txt</code> file containing all urls to the packages to be verified. Here&#8217;s a sample of the release of Apache Isis 1.8.0:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>https://repository.apache.org/content/repositories/orgapacheisis-063/org/apache/isis/core/isis/1.8.0/isis-1.8.0-source-release.zip
+https://repository.apache.org/content/repositories/orgapacheisis-065/org/apache/isis/archetype/simpleapp-archetype/1.8.0/simpleapp-archetype-1.8.0-source-release.zip</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The actual list of packages to be verified will be provided through the mailing list.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_execute_the_script">Execute the script</h5>
+<div class="paragraph">
+<p>Execute&#8230;&#8203;</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">./verify-isis-release.sh</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>... and get yourself a cup of coffee.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcom_verifying-releases_creadur">(Optional) Creadur Tools</h3>
+<div class="paragraph">
+<p>The <a href="http://creadur.apache.org">Apache Creadur</a> project exists to provide a set of tools to ensure compliance with Apache&#8217;s licensing standards.</p>
+</div>
+<div class="paragraph">
+<p>The main release auditing tool, <a href="http://creadur.apache.org/rat">Apache RAT</a> is used in the <a href="#_cgcom_cutting-a-release">release process</a>.</p>
+</div>
+<div class="paragraph">
+<p>Creadur&#8217;s remaining tools - <a href="http://creadur.apache.org/tentacles/">Tentacles</a> and <a href="http://creadur.apache.org/whisker/">Whisker</a> - are to support the verification process.</p>
+</div>
+<div class="paragraph">
+<p>For example, Tentacles generates a report called <code>archives.html</code>. This lists all of the top-level binaires, their <code>LICENSE</code> and <code>NOTICE</code> files and any <code>LICENSE</code> and <code>NOTICE</code> files of any binaries they may contain.</p>
+</div>
+<div class="paragraph">
+<p>Validation of the output at this point is all still manual. Things to check include:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>any binaries that contain no LICENSE and NOTICE files</p>
+</li>
+<li>
+<p>any binaries that contain more than one LICENSE or NOTICE file</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>In this report, each binary will have three links listed after its name '(licenses, notices, contents)'</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_test_the_archetype">Test the archetype</h3>
+<div class="paragraph">
+<p>Assuming that everything builds ok, then test the archetypes (adjust version as necessary):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">mvn archetype:generate  \
+    -D archetypeGroupId=org.apache.isis.archetype \
+    -D archetypeArtifactId=simpleapp-archetype \
+    -D groupId=com.mycompany \
+    -D artifactId=myapp \
+    -D version=1.0-SNAPSHOT \
+    -B \
+    -o \
+    -D archetypeVersion=1.12.0   # adjust version as necessary
+
+cd myapp
+mvn clean install -o
+mvn -P self-host antrun:run</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If it runs up ok, then it&#8217;s time to <a href="#_cgcom_verifying-releases">vote</a>!</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_casting_a_vote">Casting a Vote</h3>
+<div class="paragraph">
+<p>When you have made the above checks (and any other checks you think may be relevant), cast your vote by replying to the email thread on the mailing list.</p>
+</div>
+<div class="paragraph">
+<p>If you are casting <code>-1</code>, please provide details of the problem(s) you have found.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cgcom_post-release-successful">Post Release (Successful)</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The release process consists of:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the release manager <a href="#_cgcom_cutting-a-release">cutting the release</a></p>
+</li>
+<li>
+<p>members of the Apache Isis PMC <a href="#_cgcom_verifying-releases">verifying</a> and voting on the release</p>
+</li>
+<li>
+<p>the release manager performing post-release tasks, for either a successful or an <a href="#_cgcom_post-release-unsuccessful">unsuccessful</a> vote (former documented below)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>For a vote to succeed, there must be +3 votes from PMC members, and the vote must have been open at least 72 hours.  If there are not +3 votes after this time then it is perfectly permissible to keep the vote open longer.</p>
+</div>
+<div class="paragraph">
+<p>This section describes the steps to perform if the vote has been successful.</p>
+</div>
+<div class="sect2">
+<h3 id="_inform_dev_ml">Inform dev ML</h3>
+<div class="paragraph">
+<p>Post the results to the <code>dev@isis.a.o</code> mailing list:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">[RESULT] [VOTE] Apache Isis Core release 1.12.0</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>using the body (alter last line as appropriate):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">The vote has completed with the following result :
+
+  +1 (binding): &lt;i&gt;list of names&lt;/i&gt;
+  +1 (non binding): &lt;i&gt;list of names&lt;/i&gt;
+
+  -1 (binding): &lt;i&gt;list of names&lt;/i&gt;
+  -1 (non binding): &lt;i&gt;list of names&lt;/i&gt;
+
+The vote is SUCCESSFUL.</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_update_tags">Update tags</h3>
+<div class="paragraph">
+<p>Replace the <code>-RCn</code> tag with another without the qualifier.</p>
+</div>
+<div class="paragraph">
+<p>You can do this using the <code>scripts/promoterctag.sh</code> script; for example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">sh scripts/promoterctag.sh isis-1.12.0 RC1
+sh scripts/promoterctag.sh simpleapp-archetype-1.12.0 RC1</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Then, continue onto the next section for the steps to promote and announce the release.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_release_to_maven_central">Release to Maven Central</h3>
+<div class="paragraph">
+<p>From the <a href="http://repository.apache.org">ASF Nexus repository</a>, select the staging repository and select 'release' from the top menu.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/release-process/nexus-release-1.png"><img src="images/release-process/nexus-release-1.png" alt="nexus release 1" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>This moves the release artifacts into an Apache releases repository; from there they will be automatically moved to the Maven repository.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_release_source_zip">Release Source Zip</h3>
+<div class="paragraph">
+<p>As described in the <a href="http://www.apache.org/dev/release-publishing.html#distribution_dist">Apache documentation</a>, each Apache TLP has a <code>release/TLP-name</code> directory in the distribution Subversion repository at <a href="https://dist.apache.org/repos/dist">https://dist.apache.org/repos/dist</a>. Once a release vote passes, the release manager should <code>svn add</code> the artifacts (plus signature and hash files) into this location. The release is then automatically pushed to <a href="http://www.apache.org/dist/">http://www.apache.org/dist/</a> by <code>svnpubsub</code>. Only the most recent release of each supported release line should be contained here, old versions should be deleted.</p>
+</div>
+<div class="paragraph">
+<p>Each project is responsible for the structure of its directory. The directory structure of Apache Isis reflects the directory structure in our git source code repo:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>isis/
+  core/
+  example/
+    archetype/
+      simpleapp/</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If necessary, checkout this directory structure:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">svn co https://dist.apache.org/repos/dist/release/isis isis-dist</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Next, add the new release into the appropriate directory, and delete any previous release.  The <code>upd.sh</code> script can be used to automate this:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">old_ver=$1
+new_ver=$2
+
+
+# constants
+repo_root=https://repository.apache.org/content/repositories/releases/org/apache/isis
+
+zip=&quot;source-release.zip&quot;
+asc=&quot;$zip.asc&quot;
+md5=&quot;$zip.md5&quot;
+
+
+#
+# isis-core
+#
+type=&quot;core&quot;
+fullname=&quot;isis&quot;
+pushd isis-core
+
+curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$asc
+svn add $fullname-$new_ver-$asc
+curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$md5
+svn add $fullname-$new_ver-$md5
+curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$zip
+svn add $fullname-$new_ver-$zip
+
+svn delete $fullname-$old_ver-$asc
+svn delete $fullname-$old_ver-$md5
+svn delete $fullname-$old_ver-$zip
+
+popd
+
+
+#
+# simpleapp-archetype
+#
+type=&quot;archetype&quot;
+fullname=&quot;simpleapp-archetype&quot;
+pushd $type/$fullname
+
+curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$md5
+svn add $fullname-$new_ver-$md5
+curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$asc
+svn add $fullname-$new_ver-$asc
+curl -O $repo_root/$type/$fullname/$new_ver/$fullname-$new_ver-$zip
+svn add $fullname-$new_ver-$zip
+
+svn delete $fullname-$old_ver-$md5
+svn delete $fullname-$old_ver-$asc
+svn delete $fullname-$old_ver-$zip
+
+popd</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">sh upd.sh 1.11.0 1.12.0</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The script downloads the artefacts from the Nexus release repository, adds the artefacts to subsversion and deletes the previous version.</p>
+</div>
+<div class="paragraph">
+<p>At the end, commit the changes:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>svn commit -m "publishing isis source releases to dist.apache.org"</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_update_jira">Update JIRA</h3>
+<div class="sect3">
+<h4 id="_generate_release_notes">Generate Release Notes</h4>
+<div class="paragraph">
+<p>From the root directory, generate the release notes for the current release, in Asciidoc format; eg:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">sh scripts/jira-release-notes.sh ISIS 1.12.0 &gt; /tmp/1</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_close_tickets">Close tickets</h4>
+<div class="paragraph">
+<p>Close all JIRA tickets for the release, or moved to future releases if not yet addressed. Any tickets that were partially implemented should be closed, and new tickets created for the functionality on the ticket not yet implemented.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_mark_the_version_as_released">Mark the version as released</h4>
+<div class="paragraph">
+<p>In JIRA, go to the <a href="https://issues.apache.org/jira/plugins/servlet/project-config/ISIS/versions">administration section</a> for the Apache Isis project and update the version as being released.</p>
+</div>
+<div class="paragraph">
+<p>In the <a href="https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=87">Kanban view</a> this will have the effect of marking all tickets as released (clearing the "done" column).</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_create_new_jira">Create new JIRA</h4>
+<div class="paragraph">
+<p>Create a new JIRA ticket as a catch-all for the <em>next</em> release.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_update_the_asf_reporter_website">Update the ASF Reporter website</h4>
+<div class="paragraph">
+<p>Log the new release in the <a href="https://reporter.apache.org/addrelease.html?isis">ASF Reporter website</a>.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_update_website">Update website</h3>
+<div class="paragraph">
+<p>Update the Apache Isis (asciidoc) website:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Paste in the JIRA-generated release notes generated above, adding to top of <code>adocs/documentation/src/main/asciidoc/release-notes.adoc</code>.  Also add a summary line for the release.</p>
+</li>
+<li>
+<p>Search for any <code>-SNAPSHOT</code> suffices, and remove</p>
+</li>
+<li>
+<p>Search these release procedures, and update any hard-coded reference to the release to the next release (so when they are followed next time the text will be correct).</p>
+</li>
+<li>
+<p>Update the <a href="../downloads.html">downloads page</a> with a link to the source release zip file (under <a href="https://dist.apache.org/repos/dist/release/isis">https://dist.apache.org/repos/dist/release/isis</a>)</p>
+</li>
+<li>
+<p>Update any pages (<code>.adoc</code>, <code>.md</code>, <code>.html</code> etc) that describe how to run the archetype, and ensure they reference the correct version.<br></p>
+<div class="paragraph">
+<p>A search for <code>archetypeGroupId=org.apache.isis.archetype</code> should find these pages.</p>
+</div>
+</li>
+<li>
+<p>update the <a href="../doap_isis.rdf">DOAP RDF</a> file (which provides a machine-parseable description of the project) should also be updated with details of the new release. Validate using the <a href="http://www.w3.org/RDF/Validator/">W3C RDF Validator</a> service.<br></p>
+<div class="paragraph">
+<p>For more information on DOAP files, see these <a href="http://projects.apache.org/doap.html">Apache policy docs</a>.</p>
+</div>
+</li>
+<li>
+<p>Update the <a href="https://git-wip-us.apache.org/repos/asf/isis/repo?p=isis.git;a=blob_plain;f=STATUS;hb=HEAD">STATUS</a> file (in root of Apache Isis' source) should be updated with details of the new release.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Don&#8217;t forget to commit the <code>.adoc</code> changes and publish to the isis-site repo.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_announce_the_release">Announce the release</h3>
+<div class="paragraph">
+<p>Announce the release to <a href="mailto:users@isis.apache.org">users mailing list</a>.</p>
+</div>
+<div class="paragraph">
+<p>For example, for a release of Apache Isis Core, use the following subject:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">[ANN] Apache Isis version 1.12.0 Released</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>And use the following body (summarizing the main points as required):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>The Apache Isis team is pleased to announce the release of Apache Isis v1.12.0.
+
+New features in this release include:
+* ...
+
+Full release notes are available on the Apache Isis website at [1].  Please also read the migration notes [2].
+
+You can access this release directly from the Maven central repo [3], or download the release and build it from
+source [4].
+
+Enjoy!
+
+--The Apache Isis team
+
+[1] http://isis.apache.org/release-notes.html#r1.12.0
+[2] http://isis.apache.org/migration-notes.html#_migration-notes_1.11.0-to-1.12.0
+[3] http://search.maven.org
+[4] http://isis.apache.org/downloads.html</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_blog_post">Blog post</h3>
+<div class="paragraph">
+<p><a href="https://blogs.apache.org/roller-ui/login.rol">Log onto</a> the <a href="http://blogs.apache.org/isis/">Apache blog</a> and create a new post. Copy-n-paste the above mailing list announcement should suffice.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_merge_in_release_branch">Merge in release branch</h3>
+<div class="paragraph">
+<p>Because we release from a branch, the changes made in the branch (changes to <code>pom.xml</code> made by the <code>maven-release-plugin</code>, or any manual edits) should be merged back from the release branch back into the <code>master</code> branch:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">git checkout master                           # update master with latest
+git pull
+git merge release-1.12.0-RC1                  # merge branch onto master
+git branch -d release-1.12.0-RC1              # branch no longer needed
+git push origin --delete release-1.12.0-RC1   # remote branch no longer needed</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Finally, update the simpleapp&#8217;s root <code>pom.xml</code> to reference the next SNAPSHOT release (<code>1.12.0-SNAPSHOT</code>)</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_update_dependencies">Update dependencies</h3>
+<div class="paragraph">
+<p>With the release complete, now is a good time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues).</p>
+</div>
+<div class="paragraph">
+<p>You will probably want to create a new JIRA ticket for these updates (or if minor then use the "catch-all" JIRA ticket raised earlier for the next release).</p>
+</div>
+<div class="sect3">
+<h4 id="_update_parent_of_core">Update parent of Core</h4>
+<div class="paragraph">
+<p>Check (via <a href="http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache%22%20a%3A%22apache%22">search.maven.org</a>) whether there is a newer version of the Apache parent <code>org.apache:apache</code>.</p>
+</div>
+<div class="paragraph">
+<p>If there is, update the <code>&lt;version&gt;</code> in the <code>&lt;parent&gt;</code> element in the parent POM to match the newer version:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;parent&gt;</span>
+    <span class="tag">&lt;groupId&gt;</span>org.apache<span class="tag">&lt;/groupId&gt;</span>
+    <span class="tag">&lt;artifactId&gt;</span>apache<span class="tag">&lt;/artifactId&gt;</span>
+    <span class="tag">&lt;version&gt;</span>NN<span class="tag">&lt;/version&gt;</span>
+    <span class="tag">&lt;relativePath</span> <span class="tag">/&gt

<TRUNCATED>

[2/5] isis-site git commit: ISIS-1287: splitting out contributors vs committers guides

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/029a63bf/content/guides/cgcon.html
----------------------------------------------------------------------
diff --git a/content/guides/cgcon.html b/content/guides/cgcon.html
new file mode 100644
index 0000000..2e420ce
--- /dev/null
+++ b/content/guides/cgcon.html
@@ -0,0 +1,5768 @@
+<!doctype html>
+<html class="no-js" lang="en">
+<head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+
+    <title>Contributors Guide</title>
+
+    <!--
+        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.
+    -->
+
+    <!-- No caching headers -->
+    <meta http-equiv="cache-control" content="no-cache" />
+    <meta http-equiv="pragma" content="no-cache" />
+    <meta http-equiv="expires" content="-1" />
+
+
+    <!-- TODO: need to (re)instate CDN in the future (not using for now just so can develop off-line -->
+    <link href="../css/foundation/5.5.1/foundation.css" rel="stylesheet" />
+    <script src="../js/foundation/5.5.1/vendor/modernizr.js"></script>
+    <link href="../css/asciidoctor/colony.css" rel="stylesheet">
+    <link href="../css/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
+
+
+
+
+    <link href="../css/github-fork-ribbon-css/0.1.1/gh-fork-ribbon.css" rel="stylesheet" />
+    <!--[if lt IE 9]>
+      <link href="../css/github-fork-ribbon-css/0.1.1/gh-fork-ribbon.ie.css" rel="stylesheet" />
+    <![endif]-->
+
+
+
+    <style type="text/css">
+        pre code {
+            background-color: inherit;
+            border-style: none;
+        }
+
+        pre code > span:first-child {
+            margin-left: -5px;
+        }
+
+    <style>
+
+    <!--
+    <style type="text/css">
+        /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
+/*pre.CodeRay {background-color:#f7f7f8;}*/
+.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
+.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
+.CodeRay .line-numbers strong{font-weight: normal}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top}
+table.CodeRay td.line-numbers{text-align:right}
+table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
+table.CodeRay td.code{padding:0 0 0 .5em}
+table.CodeRay td.code>pre{padding:0}
+.CodeRay .debug{color:#fff !important;background:#000080 !important}
+.CodeRay .annotation{color:#007}
+.CodeRay .attribute-name{color:#000080}
+.CodeRay .attribute-value{color:#700}
+.CodeRay .binary{color:#509}
+.CodeRay .comment{color:#998;font-style:italic}
+.CodeRay .char{color:#04d}
+.CodeRay .char .content{color:#04d}
+.CodeRay .char .delimiter{color:#039}
+.CodeRay .class{color:#458;font-weight:bold}
+.CodeRay .complex{color:#a08}
+.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
+.CodeRay .color{color:#099}
+.CodeRay .class-variable{color:#369}
+.CodeRay .decorator{color:#b0b}
+.CodeRay .definition{color:#099}
+.CodeRay .delimiter{color:#000}
+.CodeRay .doc{color:#970}
+.CodeRay .doctype{color:#34b}
+.CodeRay .doc-string{color:#d42}
+.CodeRay .escape{color:#666}
+.CodeRay .entity{color:#800}
+.CodeRay .error{color:#808}
+.CodeRay .exception{color:inherit}
+.CodeRay .filename{color:#099}
+.CodeRay .function{color:#900;font-weight:bold}
+.CodeRay .global-variable{color:#008080}
+.CodeRay .hex{color:#058}
+.CodeRay .integer,.CodeRay .float{color:#099}
+.CodeRay .include{color:#555}
+.CodeRay .inline{color:#00}
+.CodeRay .inline .inline{background:#ccc}
+.CodeRay .inline .inline .inline{background:#bbb}
+.CodeRay .inline .inline-delimiter{color:#d14}
+.CodeRay .inline-delimiter{color:#d14}
+.CodeRay .important{color:#555;font-weight:bold}
+.CodeRay .interpreted{color:#b2b}
+.CodeRay .instance-variable{color:#008080}
+.CodeRay .label{color:#970}
+.CodeRay .local-variable{color:#963}
+.CodeRay .octal{color:#40e}
+.CodeRay .predefined{color:#369}
+.CodeRay .preprocessor{color:#579}
+.CodeRay .pseudo-class{color:#555}
+.CodeRay .directive{font-weight:bold}
+.CodeRay .type{font-weight:bold}
+.CodeRay .predefined-type{color:inherit}
+.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
+.CodeRay .key{color:#808}
+.CodeRay .key .delimiter{color:#606}
+.CodeRay .key .char{color:#80f}
+.CodeRay .value{color:#088}
+.CodeRay .regexp .delimiter{color:#808}
+.CodeRay .regexp .content{color:#808}
+.CodeRay .regexp .modifier{color:#808}
+.CodeRay .regexp .char{color:#d14}
+.CodeRay .regexp .function{color:#404;font-weight:bold}
+.CodeRay .string{color:#d20}
+.CodeRay .string .string .string{background:#ffd0d0}
+.CodeRay .string .content{color:#d14}
+.CodeRay .string .char{color:#d14}
+.CodeRay .string .delimiter{color:#d14}
+.CodeRay .shell{color:#d14}
+.CodeRay .shell .delimiter{color:#d14}
+.CodeRay .symbol{color:#990073}
+.CodeRay .symbol .content{color:#a60}
+.CodeRay .symbol .delimiter{color:#630}
+.CodeRay .tag{color:#008080}
+.CodeRay .tag-special{color:#d70}
+.CodeRay .variable{color:#036}
+.CodeRay .insert{background:#afa}
+.CodeRay .delete{background:#faa}
+.CodeRay .change{color:#aaf;background:#007}
+.CodeRay .head{color:#f8f;background:#505}
+.CodeRay .insert .insert{color:#080}
+.CodeRay .delete .delete{color:#800}
+.CodeRay .change .change{color:#66f}
+.CodeRay .head .head{color:#f4f}
+
+        pre.CodeRay code {
+            background-color: inherit;
+            border-style: none;
+        }
+
+        pre.CodeRay code > span:first-child {
+            margin-left: -5px;
+        }
+
+        .literalblock pre,
+        .listingblock pre:not(.highlight),
+        .listingblock pre[class="highlight"],
+        .listingblock pre[class^="highlight "],
+        .listingblock pre.CodeRay,
+        .listingblock pre.prettyprint {
+            background: rgb(253, 250, 246);
+         }
+        .sidebarblock .literalblock pre,
+        .sidebarblock .listingblock pre:not(.highlight),
+        .sidebarblock .listingblock pre[class="highlight"],
+        .sidebarblock .listingblock pre[class^="highlight "],
+        .sidebarblock .listingblock pre.CodeRay,
+        .sidebarblock .listingblock pre.prettyprint {
+            background: rgb(253, 250, 246);
+         }
+
+    <style>
+    -->
+
+    <style>
+    .github-fork-ribbon-wrapper.right {
+        position: fixed;
+    }
+    .github-fork-ribbon {
+        background: #090;
+    }
+    .github-fork-ribbon a:hover {
+        background:#0D0;
+        color:#fff;
+        font-size: 1.1em;
+    }
+    </style>
+
+    <style>
+        @media only screen and (min-width: 40.063em) {
+          .top-bar {
+            .contain-to-grid .top-bar {
+                max-width: 80rem;
+            }
+          }
+        }
+        .row {
+            max-width: 80rem;
+        }
+    </style>
+
+    <style>
+        .extended-quote,
+        .extended-quote-first {
+            margin-left: 40px;
+            margin-right: 40px;
+            font-style: italic;
+        }
+        .extended-quote-attribution {
+            text-align: right;
+            margin-right: 100px;
+            color: #10B061;
+        }
+
+        .extended-quote-first:before {
+            content: "\201c";
+            float: left;
+            font-size: 2.75em;
+            font-weight: bold;
+            line-height: 0.6em;
+            margin-left: -0.6em;
+            color: #003b6b;
+            text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+        }
+        
+    </style>
+
+    <style>
+        body {
+          position: relative;
+        }
+
+        *:not(pre) a > code {
+            color: #210DDC;
+        }
+
+        *:not(pre) > code {
+            background-color: inherit;
+            border: none;
+            font-weight: normal;
+        }
+
+        body div#toc li,
+        body div#toc2 li {
+            list-style-type: none;
+        }
+
+        div#doc-content {
+            margin-top: 30px;
+        }
+
+        div.documentation-page table.frame-all {
+            border-left: none;
+            border-right: none;
+        }
+
+        body div#toc li.active-region:before,
+        body div#toc2 li.active-region:before {
+            content: "\00BB \0020";
+            margin-left: -12px;
+        }
+
+        body div#toc li a.active,
+        body div#toc2 li a.active {
+            color: red;
+        }
+
+        body div#toc.toc,
+        body div#toc.toc2 {
+            position: fixed;
+            left: auto;
+            padding-top: 60px;
+            z-index: auto;
+            background-color: white;
+            border-left-color: #eee;
+            border-left-style: solid;
+            border-right: none;
+            min-height: 2000px;
+        }
+
+    </style>
+
+    <style>
+
+        @media only screen and (min-width: 768px) {
+          #toc.toc2 ul ul { margin-left: -10px; }
+        }
+
+
+        body div#toc .tocify-subheader ul {
+            margin-bottom: 0px;
+        }
+
+        body div#toc .tocify-subheader li {
+            font-size: 14px;
+        }
+        .tocify li.tocify-item, .tocify ul.tocify-item {
+            line-height: 24px;
+        }
+
+        body div#toc li.tocify-item.active:before,
+        body div#toc2 li.tocify-item.active:before {
+            content: "\00BB \0020";
+            margin-left: -12px;
+        }
+
+        body div#toc li.tocify-item.active a,
+        body div#toc2 li.tocify-item.active a {
+            color: red;
+        }
+    </style>
+
+    <style>
+        footer {
+            margin-top: 1000px;
+        }
+    </style>
+
+    <style>
+        /* overriding colony.css stylesheet */
+        .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] {
+           /*padding: 1.25em 1.5625em 1.125em 1.5625em;*/
+           padding: 0.3em 0.6em 0.25em 0.6em;
+        }
+        @media only screen and (min-width: 1280px)
+        #toc.toc2 {
+          /*width: 20em;*/
+          width: 25em;
+        }
+
+        #doc-content a {
+          color: #210DDC;
+        }
+
+        .top-bar h1 {
+            border-bottom: inherit;
+        }
+
+        h2 {
+          margin-top: 80px;
+        }
+        h3 {
+          margin-top: 40px;
+        }
+        h4,h5 {
+          margin-top: 30px;
+        }
+
+        .admonitionblock.tip > table td.content {
+            color: #10B061;
+        }
+        .admonitionblock.note > table td.content {
+            color: #B509AB;
+        }
+        .admonitionblock.important > table td.content {
+            color: #D5810A;
+        }
+
+        .admonitionblock .title {
+            font-size: larger;
+            font-style: italic;
+        }
+
+        .imageblock img {
+            margin-bottom: 10px;
+        }
+    </style>
+
+    <style>
+        /* from http://ben.balter.com/2014/03/13/pages-anchor-links/ */
+        .header-link {
+          position: absolute;
+          left: -0.5em;
+          opacity: 0;
+
+          /*
+          -webkit-transition: opacity 0.2s ease-in-out 0.1s;
+          -moz-transition: opacity 0.2s ease-in-out 0.1s;
+          -ms-transition: opacity 0.2s ease-in-out 0.1s;
+          */
+        }
+
+        h2:hover .header-link,
+        h3:hover .header-link,
+        h4:hover .header-link,
+        h5:hover .header-link,
+        h6:hover .header-link {
+          opacity: 1;
+        }
+    </style>
+
+    <style>
+        .top-bar
+        {
+            -webkit-transition-duration: .5s;
+            transition-duration: .5s;
+
+            -webkit-transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+            transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+
+            -webkit-transition-property: -webkit-transform;
+            transition-property: transform;
+        }
+
+        /*
+        http://osvaldas.info/auto-hide-sticky-header
+        MIT license
+        */
+        .header--hidden
+        {
+            -webkit-transform: translateY( -100% );
+            -ms-transform: translateY( -100% );
+            transform: translateY( -100% );
+
+            transition-duration: .5s;
+            transition-timing-function: cubic-bezier( 0.215, 0.610, 0.355, 1.000 );
+            -webkit-transition-property: -webkit-transform;
+            transition-property: transform;
+        }
+    </style>
+
+    <style>
+        #doc-content a.guide {
+            color: white;
+        }
+    </style>
+
+    <style>
+        .tocify {
+            margin-top: 80px;
+        }
+    </style>
+
+
+</script>
+
+</head>
+<body>
+
+<<div class="github-fork-ribbon-wrapper right" style="position: fixed;">
+    <div class="github-fork-ribbon">
+        <a href="https://github.com/apache/isis/fork">Fork me on GitHub</a>
+    </div>
+</div>
+
+
+<div class="row">
+
+    <div class="fixed contain-to-grid header">
+        <nav class="top-bar" data-topbar role="navigation" style="max-width: 80rem">
+            <ul class="title-area">
+                <li class="name">
+                    <h1>
+                        <a href="/index.html">Apache Isis&trade;</a>
+                    </h1>
+                </li>
+                <!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
+                <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
+            </ul>
+
+            <section class="top-bar-section">
+                <ul class="right">
+
+                    <li class="has-form">
+                       <FORM class="searchbox navbar-form navbar-right" id="searchbox_012614087480249044419:dn-q5gtwxya" action="http://www.google.com/cse">
+                        <div class="row collapse">
+                            <input type="hidden" name="cx" value="012614087480249044419:dn-q5gtwxya">
+                            <INPUT type="hidden" name="cof" value="FORID:0">
+                            <INPUT class="form-control" name="q" type="text" placeholder="Search">
+                        </div>
+                    </FORM>
+                     </li>
+
+                </ul>
+
+                <!-- Left Nav Section -->
+                <ul class="left">
+
+                    <li><a href="/documentation.html">Documentation</a></li>
+                    <li><a href="/downloads.html">Downloads</a></li>
+                    <li><a href="/help.html">Help</a></li>
+                    <li><a href="/asf.html">@ASF</a></li>
+
+                </ul>
+
+            </section>
+        </nav>
+    </div>
+</div>
+
+<div class="row">
+
+    <div id="doc-content-left" class="large-9 medium-9 columns">
+
+
+        <div id="doc-content">
+          <div class="sect1">
+<h2 id="_cgcon">1. Contributors' Guide</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This contributors' guide is for:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>programmers who want to just use Apache Isis to build applications, and want help setting up their development
+environment or to build their code from the command line (eg to execute within a continuous integration server such
+as Jenkins)</p>
+</li>
+<li>
+<p>programmers who want to contribute back patches (bug fixes, new features) either to the codebase or the framework&#8217;s documentation</p>
+</li>
+<li>
+<p>committers of Apache Isis itself who want guidance on release process, publishing documents and other related procedures.</p>
+</li>
+</ul>
+</div>
+<div class="sect2">
+<h3 id="_other_guides">1.1. Other Guides</h3>
+<div class="paragraph">
+<p>Apache Isis documentation is broken out into a number of user, reference and "supporting procedures" guides.</p>
+</div>
+<div class="paragraph">
+<p>The user guides available are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="ugfun.html">Fundamentals</a></p>
+</li>
+<li>
+<p><a href="ugvw.html">Wicket viewer</a></p>
+</li>
+<li>
+<p><a href="ugvro.html">Restful Objects viewer</a></p>
+</li>
+<li>
+<p><a href="ugsec.html">Security</a></p>
+</li>
+<li>
+<p><a href="ugtst.html">Testing</a></p>
+</li>
+<li>
+<p><a href="ugbtb.html">Beyond the Basics</a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The reference guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="rgant.html">Annotations</a></p>
+</li>
+<li>
+<p><a href="rgsvc.html">Domain Services</a></p>
+</li>
+<li>
+<p><a href="rgcfg.html">Configuration Properties</a></p>
+</li>
+<li>
+<p><a href="rgcms.html">Classes, Methods and Schema</a></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The "supporting procedures" guides are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#">Contributors' Guide</a> (this guide)</p>
+</li>
+<li>
+<p><a href="#">Committers' Guide</a> (release procedures and related practices)</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cgcon_ide">2. Using an IDE</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The vast majority of Java developers use an IDE to assist with developing their code, and we highly recommend that you do like wise as you develop your Apache Isis applications using an IDE.  Apache Isis is built with Maven, and all modern IDEs can import Maven projects.</p>
+</div>
+<div class="paragraph">
+<p>This chapter shows how to setup and use two of the most popular IDEs, IntelliJ IDEA and Eclipse.</p>
+</div>
+<div class="sect2">
+<h3 id="_cgcon_ide_intellij">2.1. Developing using IntelliJ IDEA</h3>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>This material does not constitute an endorsement; JetBrains is not affiliated to Apache Software Foundation in any way.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>This section describes how to install and setup JetBrains' IntelliJ IDEA, then how to import an application into IntelliJ and run it.</p>
+</div>
+<div class="sect3">
+<h4 id="_installing_and_setting_up">2.1.1. Installing and Setting up</h4>
+<div class="paragraph">
+<p>This section covers installation and setup. These notes relates to IntelliJ Community Edition 14.1.x, with
+screenshots taken for Windows.</p>
+</div>
+<div class="sect4">
+<h5 id="_download_and_install">Download and Install</h5>
+<div class="paragraph">
+<p><a href="https://www.jetbrains.com/idea/download/">Download</a> latest version of IntelliJ Community Edition, and install:</p>
+</div>
+<div class="paragraph">
+<p>Start the wizard, click through the welcome page:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/010-installing/010-welcome-page.png" alt="010 welcome page" width="400px">
+</div>
+<div class="title">Figure 1. IntelliJ Installation Wizard - Welcome page</div>
+</div>
+<div class="paragraph">
+<p>Choose the location to install the IDE:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/010-installing/020-choose-location.png" alt="020 choose location" width="400px">
+</div>
+<div class="title">Figure 2. IntelliJ Installation Wizard - Choose Location</div>
+</div>
+<div class="paragraph">
+<p>Adjust any installation options as you prefer:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/010-installing/030-installation-options.png" alt="030 installation options" width="400px">
+</div>
+<div class="title">Figure 3. IntelliJ Installation Wizard - Installation Options</div>
+</div>
+<div class="paragraph">
+<p>and the start menu:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/010-installing/040-start-menu-folder.png" alt="040 start menu folder" width="400px">
+</div>
+<div class="title">Figure 4. IntelliJ Installation Wizard - Start Menu Folder</div>
+</div>
+<div class="paragraph">
+<p>and finish up the wizard:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/010-installing/050-completing.png" alt="050 completing" width="400px">
+</div>
+<div class="title">Figure 5. IntelliJ Installation Wizard - Completing the Wizard</div>
+</div>
+<div class="paragraph">
+<p>Later on we&#8217;ll specify the Apache Isis/ASF code style settings, so for now select <code>I do not want to import settings</code>:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/010-installing/060-import-settings-or-not.png" alt="060 import settings or not" width="400px">
+</div>
+<div class="title">Figure 6. IntelliJ Installation Wizard - Import Settings</div>
+</div>
+<div class="paragraph">
+<p>Finally, if you are young and trendy, set the UI theme to Darcula:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/010-installing/070-set-ui-theme.png" alt="070 set ui theme" width="600px">
+</div>
+<div class="title">Figure 7. IntelliJ Installation Wizard Set UI Theme</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_new_project">New Project</h5>
+<div class="paragraph">
+<p>In IntelliJ a project can contain multiple modules; these need not be physically located together.  (If you are previously an Eclipse user, you can think of it as similar to an Eclipse workspace).</p>
+</div>
+<div class="paragraph">
+<p>Start off by creating a new project:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/010-new-project-create.png" alt="010 new project create" width="400px">
+</div>
+<div class="title">Figure 8. IntelliJ Create New Project</div>
+</div>
+<div class="paragraph">
+<p>We want to create a new <strong>Java</strong> project:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/020-java-project-setup-jdk.png" alt="020 java project setup jdk" width="600px">
+</div>
+<div class="title">Figure 9. IntelliJ Create New Project - Create a Java project</div>
+</div>
+<div class="paragraph">
+<p>We therefore need to specify the JDK.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+at the time of writing Apache Isis supports only Java 7; Java 8 is scheduled for support in Apache Isis v1.9.0
+</td>
+</tr>
+</table>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/030-java-project-select-jdk.png" alt="030 java project select jdk" width="300px">
+</div>
+<div class="title">Figure 10. IntelliJ Create New Java Project - Select the JDK</div>
+</div>
+<div class="paragraph">
+<p>Specify the directory containing the JDK:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/050-name-and-location.png" alt="050 name and location" width="400px">
+</div>
+<div class="title">Figure 11. IntelliJ Create New Project - Select the JDK location</div>
+</div>
+<div class="paragraph">
+<p>Finally allow IntelliJ to create the directory for the new project:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/020-create-new-project/060-create-dir.png" alt="060 create dir" width="200px">
+</div>
+<div class="title">Figure 12. IntelliJ Create New Project</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_import_settings">Import Settings</h5>
+<div class="paragraph">
+<p>Next we need to configure IntelliJ with ASF/Apache Isis' standard templates and coding conventions.  These are bundled as the <code>settings.jar</code> JAR file <a href="resources/appendices/dev-env/intellij/isis-settings.jar">download from the Apache Isis website</a>).</p>
+</div>
+<div class="paragraph">
+<p>Import using: <code>File &gt; Import Settings</code>, and specify the directory that you have downloaded the file to:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/030-import-settings/010-settings-import-jar.png" alt="010 settings import jar" width="400px">
+</div>
+<div class="title">Figure 13. IntelliJ Import Settings - Specify JAR file</div>
+</div>
+<div class="paragraph">
+<p>Select all the (two) categories of settings available in the JAR file:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/030-import-settings/020-select-all.png" alt="020 select all" width="300px">
+</div>
+<div class="title">Figure 14. IntelliJ Import Settings - Select all categories</div>
+</div>
+<div class="paragraph">
+<p>And then restart:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/030-import-settings/030-restart.png" alt="030 restart" width="200px">
+</div>
+<div class="title">Figure 15. IntelliJ Import Settings - Restart</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_cgcon_ide_intellij_other-settings-compiler">Other Settings (Compiler)</h5>
+<div class="paragraph">
+<p>There are also some other settings that influence the compiler.  We highly recommend you set these.</p>
+</div>
+<div class="paragraph">
+<p>On the <strong>Compiler</strong> Settings page, ensure that <code>build automatically</code> is enabled (and optionally <code>compile independent modules in parallel</code>):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/040-other-settings-compiler/010-build-automatically.png" alt="010 build automatically" width="600px">
+</div>
+<div class="title">Figure 16. IntelliJ Compiler Settings</div>
+</div>
+<div class="paragraph">
+<p>On the <strong>Annotation Processors</strong> page, enable and adjust for the 'default' setting:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/040-other-settings-compiler/020-annotation-processor.png" alt="020 annotation processor" width="600px">
+</div>
+<div class="title">Figure 17. IntelliJ Annotation Processor Settings</div>
+</div>
+<div class="paragraph">
+<p>This setting enables the generation of the <code>Q*</code> classes for DataNucleus type-safe queries, as well as being required
+for frameworks such as <a href="#_cg_ide_project-lombok">Project Lombok</a>.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>IntelliJ may also have inferred these settings for specific projects/modules when importing; review the list on the left to see if the default is overridden and fix/delete as required.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_cgcon_ide_intellij_other-settings-maven">Other Settings (Maven)</h5>
+<div class="paragraph">
+<p>There are also some other settings for Maven that we recommend you adjust (though these are less critical):</p>
+</div>
+<div class="paragraph">
+<p>First, specify an up-to-date Maven installation, using <code>File &gt; Settings</code> (or <code>IntelliJ &gt; Preferences</code> if on MacOS):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/042-other-settings-maven/010-maven-installation.png" alt="010 maven installation" width="600px">
+</div>
+<div class="title">Figure 18. IntelliJ Maven Settings - Installation</div>
+</div>
+<div class="paragraph">
+<p>Still on the Maven settings page, configure as follows:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/042-other-settings-maven/020-maven-configuration.png" alt="020 maven configuration" width="600px">
+</div>
+<div class="title">Figure 19. IntelliJ Maven Settings - Configuration</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_other_settings_misc">Other Settings (Misc)</h5>
+<div class="paragraph">
+<p>These settings are optional but also recommended.</p>
+</div>
+<div class="paragraph">
+<p>On the <strong>auto import</strong> page, check the <code>optimize imports on the fly</code> and <code>add unambiguous imports on the fly</code></p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/044-other-settings-misc/010-auto-import.png" alt="010 auto import" width="600px">
+</div>
+<div class="title">Figure 20. IntelliJ Maven Settings - Auto Import</div>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_importing_maven_modules">2.1.2. Importing Maven Modules</h4>
+<div class="paragraph">
+<p>Let&#8217;s load in some actual code!  We do this by importing the Maven modules.</p>
+</div>
+<div class="paragraph">
+<p>First up, open up the Maven tool window (<code>View &gt; Tool Windows &gt; Maven Projects</code>).  You can then use the 'plus' button to add Maven modules.  In the screenshot you can see we&#8217;ve loaded in Apache Isis core; the modules are listed in the <em>Maven Projects</em> window and corresponding (IntelliJ) modules are shown in the <em>Projects</em> window:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/010-maven-modules-view.png" alt="010 maven modules view" width="730px">
+</div>
+<div class="title">Figure 21. IntelliJ Maven Module Management - Importing Maven modules</div>
+</div>
+<div class="paragraph">
+<p>We can then import another module (from some other directory).  For example, here we are importing the Isis Addons' todoapp example:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/020-adding-another-module.png" alt="020 adding another module" width="400px">
+</div>
+<div class="title">Figure 22. IntelliJ Maven Module Management - Importing another Module</div>
+</div>
+<div class="paragraph">
+<p>You should then see the new Maven module loaded in the <em>Projects</em> window and also the <em>Maven Projects</em> window:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/030-other-module-added.png" alt="030 other module added" width="730px">
+</div>
+<div class="title">Figure 23. IntelliJ Maven Module Management -</div>
+</div>
+<div class="paragraph">
+<p>If any dependencies are already loaded in the project, then IntelliJ will automatically update the CLASSPATH to resolve to locally held modules (rather from <code>.m2/repository</code> folder).  So, for example (assuming that the <code>&lt;version&gt;</code> is correct, of course), the Isis todoapp will have local dependencies on the Apache Isis core.</p>
+</div>
+<div class="paragraph">
+<p>You can press F4 (or use <code>File &gt; Project Structure</code>) to see the resolved classpath for any of the modules loaded into the project.</p>
+</div>
+<div class="paragraph">
+<p>If you want to focus on one set of code (eg the Isis todoapp but not Apache Isis core) then you <em>could</em> remove the module; but better is to ignore those modules.  This will remove from the the <em>Projects</em> window but keep them available in the <em>Maven Projects</em> window for when you next want to work on them:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/040-ignoring-modules.png" alt="040 ignoring modules" width="730px">
+</div>
+<div class="title">Figure 24. IntelliJ Maven Module Management - Ignoring Modules</div>
+</div>
+<div class="paragraph">
+<p>Confirm that it&#8217;s ok to ignore these modules:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/050-ignoring-modules-2.png" alt="050 ignoring modules 2" width="300px">
+</div>
+<div class="title">Figure 25. IntelliJ Maven Module Management - Ignoring Modules (ctd)</div>
+</div>
+<div class="paragraph">
+<p>All being well you should see that the <em>Projects</em> window now only contains the code you are working on.  Its classpath dependencies will be adjusted (eg to resolve to Apache Isis core from <code>.m2/repository</code>):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/100-maven-module-mgmt/060-ignored-modules.png" alt="060 ignored modules" width="730px">
+</div>
+<div class="title">Figure 26. IntelliJ Maven Module Management - Updated Projects Window</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_running">2.1.3. Running</h4>
+<div class="paragraph">
+<p>Let&#8217;s see how to run both the app and the tests.</p>
+</div>
+<div class="sect4">
+<h5 id="_running_the_app">Running the App</h5>
+<div class="paragraph">
+<p>Once you&#8217;ve imported your Isis application, we should run it.  We do this by creating a Run configuration, using <code>Run &gt; Edit Configurations</code>.</p>
+</div>
+<div class="paragraph">
+<p>Set up the details as follows:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/010-run-configuration.png" alt="010 run configuration" width="600px">
+</div>
+<div class="title">Figure 27. IntelliJ Running the App - Run Configuration</div>
+</div>
+<div class="paragraph">
+<p>We specify the <code>Main class</code> to be <code>org.apache.isis.WebServer</code>; this is a wrapper around Jetty.  It&#8217;s possible to pass program arguments to this (eg to automatically install fixtures), but for now leave this blank.</p>
+</div>
+<div class="paragraph">
+<p>Also note that <code>Use classpath of module</code> is the webapp module for your app, and that the <code>working directory</code> is <code>$MODULE_DIR$</code>.</p>
+</div>
+<div class="paragraph">
+<p>Next, and most importantly, configure the DataNucleus enhancer to run for your <code>dom</code> goal.  This can be done by defining a Maven goal to run before the app:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/020-datanucleus-enhancer-goal.png" alt="020 datanucleus enhancer goal" width="400px">
+</div>
+<div class="title">Figure 28. IntelliJ Running the App - Datanucleus Enhancer Goal</div>
+</div>
+<div class="paragraph">
+<p>The <code>-o</code> flag in the goal means run off-line; this will run faster.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+if you forget to set up the enhancer goal, or don&#8217;t run it on the correct (dom) module, then you will get all sorts of errors when you startup.  These usually manifest themselves as class cast exception in DataNucleus.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>You should now be able to run the app using <code>Run &gt; Run Configuration</code>.  The same configuration can also be used to debug the app if you so need.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_running_the_unit_tests">Running the Unit Tests</h5>
+<div class="paragraph">
+<p>The easiest way to run the unit tests is just to right click on the <code>dom</code> module in the <em>Project Window</em>, and choose run unit tests.  Hopefully your tests will pass (!).</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/030-running-unit-tests.png" alt="030 running unit tests" width="600px">
+</div>
+<div class="title">Figure 29. IntelliJ Running the App - Unit Tests Run Configuration</div>
+</div>
+<div class="paragraph">
+<p>As a side-effect, this will create a run configuration, very similar to the one we manually created for the main app:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/040-running-unit-tests-run-configuration.png" alt="040 running unit tests run configuration" width="600px">
+</div>
+<div class="title">Figure 30. IntelliJ Running the App - Unit Tests Run Configuration</div>
+</div>
+<div class="paragraph">
+<p>Thereafter, you should run units by selecting this configuration (if you use the right click approach you&#8217;ll end up with lots of run configurations, all similar).</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_running_the_integration_tests">Running the Integration Tests</h5>
+<div class="paragraph">
+<p>Integration tests can be run in the same way as unit tests, however the <code>dom</code> module must also have been enhanced.</p>
+</div>
+<div class="paragraph">
+<p>One approach is to initially run the tests use the right click on the <code>integtests</code> module; the tests will fail because the code won&#8217;t have been enhanced, but we can then go and update the run configuration to run the datanucleus enhancer goal (same as when running the application):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/110-running-the-app/050-running-integration-tests-run-configuration.png" alt="050 running integration tests run configuration" width="600px">
+</div>
+<div class="title">Figure 31. IntelliJ Running the App - Integration Tests Run Configuration</div>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_hints_and_tips">2.1.4. Hints and Tips</h4>
+<div class="sect4">
+<h5 id="_keyboard_cheat_sheets">Keyboard Cheat Sheets</h5>
+<div class="paragraph">
+<p>You can download 1-page PDFs cheat sheets for IntelliJ&#8217;s keyboard shortcuts:
+* for <a href="https://www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard.pdf">Windows</a>
+* for <a href="https://www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard_Mac.pdf">MacOS</a></p>
+</div>
+<div class="paragraph">
+<p>Probably the most important shortcut on them is for <code>Find Action</code>:
+- <code>ctrl-shift-A</code> on Windows
+- <code>cmd-shift-A</code> on MacOS.</p>
+</div>
+<div class="paragraph">
+<p>This will let you search for any action just by typing its name.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_switch_between_tools_editors">Switch between Tools &amp; Editors</h5>
+<div class="paragraph">
+<p>The Tool Windows are the views around the editor (to left, bottom and right).  It&#8217;s possible to move these around to your preferred locations.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Use <code>alt-1</code> through <code>alt-9</code> (or <code>cmd-1</code> through <code>alt-9</code>) to select the tool windows</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Press it twice and the tool window will hide itself; so can use to toggle</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>If in the <em>Project Window</em> (say) and hit enter on a file, then it will be shown in the editor, but (conveniently) the focus remains in the tool window.  To switch to the editor, just press <code>Esc</code>.</p>
+<div class="ulist">
+<ul>
+<li>
+<p>If in the <em>Terminal Window</em>, you&#8217;ll need to press <code>Shift-Esc</code>.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>If on the editor and want to locate the file in (say) the <em>Project Window</em>, use <code>alt-F1</code>.</p>
+</li>
+<li>
+<p>To change the size of any tool window, use <code>ctrl-shift-arrow</code></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Using these shortcuts you can easily toggle between the tool windows and the editor, without using the mouse.  Peachy!</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_navigating_around">Navigating Around</h5>
+<div class="paragraph">
+<p>For all of the following, you don&#8217;t need to type every letter, typing "ab" will actually search for ".<strong>a.*b.</strong>".</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>to open classes or files or methods that you know the name of:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>ctrl-N</code> to open class</p>
+</li>
+<li>
+<p><code>ctrl-shift-N</code> to open a file</p>
+</li>
+<li>
+<p>(bit fiddly this) <code>ctrl-shift-alt-N</code> to search for any symbol.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>open up dialog of recent files: <code>ctrl-E</code></p>
+</li>
+<li>
+<p>search for any file: <code>shift-shift</code></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Navigating around:
+* find callers of a method (the call hierarchy): <code>ctrl-alt-H</code>
+* find subclasses or overrides: <code>ctrl-alt-B</code>
+* find superclasses/interface/declaration: <code>ctrl-B</code></p>
+</div>
+<div class="paragraph">
+<p>Viewing the structure (ie outline) of a class
+* <code>ctrl-F12</code> will pop-up a dialog showing all members
+** hit <code>ctrl-F12</code> again to also see inherited members</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_editing">Editing</h5>
+<div class="ulist">
+<ul>
+<li>
+<p>Extend selection using <code>ctrl-W</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p>and contract it down again using <code>ctrl-shift-W</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>to duplicate a line, it&#8217;s <code>ctrl-D</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if you have some text selected (or even some lines), it&#8217;ll actually duplicate the entire selection</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>to delete a line, it&#8217;s <code>ctrl-X</code></p>
+</li>
+<li>
+<p>to move a line up or down: <code>shift-alt-up</code> and <code>shift-alt-down</code></p>
+<div class="ulist">
+<ul>
+<li>
+<p>if you have selected several lines, it&#8217;ll move them all togethe</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>ctrl-shift-J</code> can be handy for joining lines together</p>
+<div class="ulist">
+<ul>
+<li>
+<p>just hit enter to split them apart (even in string quotes; IntelliJ will "do the right thing")</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_intentions_and_code_completion">Intentions and Code Completion</h5>
+<div class="paragraph">
+<p>Massively useful is the "Intentions" popup; IntelliJ tries to guess what you might want to do.  You can activate this using`alt-enter`, whenever you see a lightbulb/tooltip in the margin of the current line.</p>
+</div>
+<div class="paragraph">
+<p>Code completion usually happens whenever you type '.'.  You can also use <code>ctrl-space</code> to bring these up.</p>
+</div>
+<div class="paragraph">
+<p>In certain circumstances (eg in methods0) you can also type <code>ctrl-shift-space</code> to get a smart list of methods etc that you might want to call.  Can be useful.</p>
+</div>
+<div class="paragraph">
+<p>Last, when invoking a method, use <code>ctrl-P</code> to see the parameter types.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_refactoring">Refactoring</h5>
+<div class="paragraph">
+<p>Loads of good stuff on the <code>Refactor</code> menu; most used are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Rename (<code>shift-F6</code>)</p>
+</li>
+<li>
+<p>Extract</p>
+<div class="ulist">
+<ul>
+<li>
+<p>method: <code>ctrl-alt-M</code></p>
+</li>
+<li>
+<p>variable: <code>ctrl-alt-V</code></p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Inline method/variable: <code>ctrl-alt-N</code></p>
+</li>
+<li>
+<p>Change signature</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>If you can&#8217;t remember all those shortcuts, just use <code>ctrl-shift-alt-T</code> (might want to rebind that to something else!) and get a context-sensitive list of refactorings available for the currently selected object</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_plugins">Plugins</h5>
+<div class="paragraph">
+<p>You might want to set up some additional plugins.  You can do this using <code>File &gt; Settings &gt; Plugins</code> (or equivalently <code>File &gt; Other Settings &gt; Configure Plugins</code>).</p>
+</div>
+<div class="paragraph">
+<p>Recommended are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://plugins.jetbrains.com/plugin/7179?pr=idea">Maven Helper</a> plugin</p>
+<div class="paragraph">
+<p>More on this below.</p>
+</div>
+</li>
+<li>
+<p><a href="https://github.com/asciidoctor/asciidoctor-intellij-plugin">AsciiDoctor</a> plugin</p>
+<div class="paragraph">
+<p>Useful if you are doing any authoring of documents.</p>
+</div>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Some others you might like to explore are:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/appendices/dev-env/intellij-idea/050-some-plugins/020-some-plugins-confirmation.png" alt="020 some plugins confirmation" width="600px">
+</div>
+<div class="title">Figure 32. IntelliJ Plugins</div>
+</div>
+<div class="sect5">
+<h6 id="_maven_helper_plugin">Maven Helper Plugin</h6>
+<div class="paragraph">
+<p>This plugin provides a couple of great features.  One is better visualization of dependency trees (similar to Eclipse).</p>
+</div>
+<div class="paragraph">
+<p>If you open a <code>pom.xml</code> file, you&#8217;ll see an additional "Dependencies" tab:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/010-dependency-tab.png"><img src="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/010-dependency-tab.png" alt="010 dependency tab" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>Clicking on this gives a graphical tree representation of the dependencies, similar to that obtained by <code>mvn dependency:tree</code>, but filterable.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/020-dependency-as-tree.png"><img src="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/020-dependency-as-tree.png" alt="020 dependency as tree" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>The plugin also provides the ability to easily run a Maven goal on a project:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/030-maven-run-goal.png"><img src="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/030-maven-run-goal.png" alt="030 maven run goal" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>This menu can also be bound to a keystroke so that it is available as a pop-up:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/040-maven-quick-run.png"><img src="images/appendices/dev-env/intellij-idea/050-some-plugins/maven-helper/040-maven-quick-run.png" alt="040 maven quick run" width="600px"></a>
+</div>
+</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_troubleshooting">Troubleshooting</h5>
+<div class="paragraph">
+<p>When a Maven module is imported, IntelliJ generates its own project files (suffix <code>.ipr</code>), and the application is actually built from that.</p>
+</div>
+<div class="paragraph">
+<p>Occasionally these don&#8217;t keep in sync (even if auto-import of Maven modules has been enabled).</p>
+</div>
+<div class="paragraph">
+<p>To fix the issue, try:
+* reimport module
+* rebuild selected modules/entire project
+* remove and then re-add the project
+* restart, invalidating caches
+* hit StackOverflow (!)</p>
+</div>
+<div class="paragraph">
+<p>One thing worth knowing; IntelliJ actively scans the filesystem all the time.  It&#8217;s therefore (almost always) fine to build the app from the Maven command line; IntelliJ will detect the changes and keep in sync.  If you want to force that, use <code>File &gt; Synchronize</code>, <code>ctrl-alt-Y</code>.</p>
+</div>
+<div class="paragraph">
+<p>If you hit an error of "duplicate classes":</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png"><img src="images/appendices/dev-env/intellij-idea/060-troubleshooting/010-duplicate-classes.png" alt="010 duplicate classes" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>then make sure you have correctly configured the <a href="#_cg_ide_intellij_other-settings-compiler">annotation processor</a>
+settings.  Pay attention in particular to the "Production sources directory" and "Test sources directory", that these
+are set up correctly.</p>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_running_integration_tests">2.1.5. Running Integration Tests</h4>
+<div class="paragraph">
+<p>When running integration tests from within IntelliJ, make sure that the <code>search for tests</code> radio button is set to <code>In single module</code>:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png"><img src="images/appendices/dev-env/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png" alt="run debug configuration single module" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>If this radio button is set to one of the other options then you may obtain class loading issues; these result from IntelliJ attempting to run unit tests of the <code>dom</code> project that depend on test classes in that module, but using the classpath of the <code>integtests</code> module whereby the <code>dom</code> test-classes (<code>test-jar</code> artifact) are not exposed on the Maven classpath.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_cgcon_ide_intellij_advanced">2.1.6. Advanced</h4>
+<div class="paragraph">
+<p>In this section are a couple of options that will reduce the length of the change code/build/deploy/review feedback loop.</p>
+</div>
+<div class="sect4">
+<h5 id="_cgcon_ide_intellij_advanced_dcevm">Setting up Dynamic Reloading</h5>
+<div class="paragraph">
+<p><a href="github.com/dcevm/dcevm">DCEVM</a> enhances the JVM with true hot-swap adding/removing of methods as well as more
+reliable hot swapping of the implementation of existing methods.</p>
+</div>
+<div class="paragraph">
+<p>In the context of Apache Isis, this is very useful for contributed actions and mixins and also view models; you should
+then be able to write these actions and have them be picked up without restarting the application.</p>
+</div>
+<div class="paragraph">
+<p>Changing persisting domain entities is more problematic, for two reasons: the JDO/DataNucleus enhancer needs to run on
+domain entities, and also at runtime JDO/DataNucleus would need to rebuild its own metamodel.  You may find that adding
+actions will work, but adding new properties or collections is much less likely to.</p>
+</div>
+<div class="paragraph">
+<p>To set up DCEVM, download the appropriate JAR from the <a href="https://dcevm.github.io/">github page</a>, and run the
+installer.  For example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="bash">java -jar DCEVM-light-8u51-installer.jar</code></pre>
+</div>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Be sure to run with appropriate privileges to be able to write to the installation directories of the JDK.  If running
+on Windows, that means running as <code>Administrator</code>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>After a few seconds this will display a dialog listing all installations of JDK that have been found:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/070-advanced/010-dcevm-list-of-found-jdk-installations.png"><img src="images/appendices/dev-env/intellij-idea/070-advanced/010-dcevm-list-of-found-jdk-installations.png" alt="010 dcevm list of found jdk installations" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>Select the corresponding installation, and select <code>Replace by DCEVM</code>.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/070-advanced/020-dcevm-once-installed.png"><img src="images/appendices/dev-env/intellij-idea/070-advanced/020-dcevm-once-installed.png" alt="020 dcevm once installed" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>In IntelliJ, register the JDK in <code>File &gt; Project Structure</code> dialog:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/070-advanced/030-dcevm-intellij-project-structure.png"><img src="images/appendices/dev-env/intellij-idea/070-advanced/030-dcevm-intellij-project-structure.png" alt="030 dcevm intellij project structure" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>Finally, in the run configuration, select the patched JDK:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/intellij-idea/070-advanced/040-dcevm-run-configuration.png"><img src="images/appendices/dev-env/intellij-idea/070-advanced/040-dcevm-run-configuration.png" alt="040 dcevm run configuration" width="600px"></a>
+</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_setting_up_jrebel">Setting up JRebel</h5>
+<div class="paragraph">
+<p>See the repo for the (non-ASF) <a href="https://github.com/isisaddons/isis-jrebel-plugin">Isis JRebel</a> plugin.  With some
+modification, this should work for IntelliJ too.</p>
+</div>
+<div class="paragraph">
+<p>Note that JRebel is a commercial product, requiring a license.  At the time of writing there is also currently a
+non-commercial free license (though note this comes with some usage conditions).</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcon_ide_eclipse">2.2. Developing using Eclipse</h3>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>This material does not constitute an endorsement; Eclipse foundation is not affiliated to Apache Software Foundation in any way.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>If you are an <a href="http://www.eclipse.org">Eclipse</a> user, then we recommend you download the "Eclipse JEE package" configuration.</p>
+</div>
+<div class="paragraph">
+<p>When running an Apache Isis application, it&#8217;s necessary to setup the development environment so that the Java bytecode can be enhanced by the <a href="http://www.datanucleus.org">DataNucleus</a> enhancer.  If working in Eclipse, then JDO enhancement is most easily done by installing the <a href="http://www.datanucleus.org/products/datanucleus/jdo/guides/eclipse.html">DataNucleus' Eclipse plugin</a>.  This hooks the bytecode enhancement of your domain objects into Eclipse&#8217;s normal incremental compilation.</p>
+</div>
+<div class="paragraph">
+<p>This plugin needs to be configured for each of your domain modules (usually just one in any given app).  The steps are therefore:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>import the project into Eclipse</p>
+</li>
+<li>
+<p>configure the DataNucleus enhancer</p>
+</li>
+<li>
+<p>run the app from the <code>.launch</code> file</p>
+</li>
+</ul>
+</div>
+<div class="sect3">
+<h4 id="_screencast">2.2.1. Screencast</h4>
+<div class="paragraph">
+<p>The following screencast shows how to import an Apache Isis maven-based application into Eclipse and configure to use with the JDO Objectstore</p>
+</div>
+<div class="videoblock">
+<div class="content">
+<iframe width="640px" height="480px" src="//www.youtube.com/embed/RgcYfjQ8yJA?rel=0" frameborder="0" allowfullscreen></iframe>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_importing_the_project">2.2.2. Importing the Project</h4>
+<div class="paragraph">
+<p>Use File &gt; Import, then Maven &gt; Existing Maven Projects.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_add_datanucleus_support">2.2.3. Add DataNucleus support</h4>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Make sure you are in the 'Java' Perspective, not the 'Java EE' Perspective.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>In Eclipse, for the <em>domain object model</em> project, first add DataNucleus support:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/eclipse/eclipse-100-project-support.png"><img src="images/appendices/dev-env/eclipse/eclipse-100-project-support.png" alt="eclipse 100 project support" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>Then turn on Auto-Enhancement:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images/appendices/dev-env/eclipse/eclipse-110-project-support.png"><img src="images/appendices/dev-env/eclipse/eclipse-110-project-support.png" alt="eclipse 110 project support" width="600px"></a>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_update_the_classpath">Update the classpath</h5>
+<div class="paragraph">
+<p>DataNucleus' enhancer uses the domain object model&#8217;s own classpath to reference DataNucleus JARs. So, even though your domain objects are unlikely to depend on DataNucleus, these references must still be present.</p>
+</div>
+<div class="paragraph">
+<p>See the earlier section on <a href="ugfun.html#_ugfun_getting-started_datanucleus-enhancer">DataNucleus enhancer</a> for details of the contents of the <code>pom.xml</code>.  Chances are it is already set up from running the <a href="ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp archetype</a>.</p>
+</div>
+<div class="paragraph">
+<p>Then, tell DataNucleus to use the project classpath:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images//appendices/dev-env/eclipse/eclipse-010-windows-preferences.png"><img src="images//appendices/dev-env/eclipse/eclipse-010-windows-preferences.png" alt="eclipse 010 windows preferences" width="750px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>When the enhancer runs, it will print out to the console:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images//appendices/dev-env/eclipse/eclipse-120-console.png"><img src="images//appendices/dev-env/eclipse/eclipse-120-console.png" alt="eclipse 120 console" width="500px"></a>
+</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_workaround_for_path_limits_the_dn_plugin_to_use_the_persistence_xml">Workaround for path limits (the DN plugin to use the persistence.xml)</h5>
+<div class="paragraph">
+<p>If running on Windows then the DataNucleus plugin is very likely to hit the Windows path limit.</p>
+</div>
+<div class="paragraph">
+<p>To fix this, we configure the enhancer to read from the <code>persistence.xml</code> file.</p>
+</div>
+<div class="paragraph">
+<p>As a prerequisite, first make sure that your domain object model has a <code>persistence.xml</code> file.  Then specify the <code>persistence-unit</code> in the project properties:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images//appendices/dev-env/eclipse/eclipse-025-project-properties.png"><img src="images//appendices/dev-env/eclipse/eclipse-025-project-properties.png" alt="eclipse 025 project properties" width="750px"></a>
+</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_workaround_if_the_enhancer_fails">Workaround: If the enhancer fails</h5>
+<div class="paragraph">
+<p>On occasion it appears that Eclipse can attempt to run two instances of the DataNucleus enhancer. This is probably due to multiple Eclipse builders being defined; we&#8217;ve noticed multiple entries in the Eclipse&#8217;s <code>Debug</code> view:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images//appendices/dev-env/eclipse/eclipse-210-enhancer-fails-duplicates.png"><img src="images//appendices/dev-env/eclipse/eclipse-210-enhancer-fails-duplicates.png" alt="eclipse 210 enhancer fails duplicates" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>At any rate, you&#8217;ll know you&#8217;ve encountered this error if you see the following in the console:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images//appendices/dev-env/eclipse/eclipse-200-enhancer-fails-duplicates.png"><img src="images//appendices/dev-env/eclipse/eclipse-200-enhancer-fails-duplicates.png" alt="eclipse 200 enhancer fails duplicates" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>The best solution is to remove DataNucleus support and then to re-add it:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<a class="image" href="images//appendices/dev-env/eclipse/eclipse-220-enhancer-fails-duplicates.png"><img src="images//appendices/dev-env/eclipse/eclipse-220-enhancer-fails-duplicates.png" alt="eclipse 220 enhancer fails duplicates" width="600px"></a>
+</div>
+</div>
+<div class="paragraph">
+<p>If you consistently hit problems, then the final recourse is to disable the automatic enhancement and to remember to manually enhance your domain object model before each run.</p>
+</div>
+<div class="paragraph">
+<p>Not ideal, we know. Please feel free to contribute a better solution :-)</p>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_running_the_app_2">2.2.4. Running the App</h4>
+<div class="paragraph">
+<p>The simpleapp archetype automatically provides a <code>.launch</code> configurations in the <code>webapp</code> module. You can therefore very simply run the application by right-clicking on one of these files, and choosing "Run As…" or "Debug As…".</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The screencast above shows this in action.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_other_domain_projects">2.2.5. Other domain projects.</h4>
+<div class="paragraph">
+<p>There is nothing to prevent you having multiple domain projects. You might want to do such that each domain project corresponds to a <a href="http://www.methodsandtools.com/archive/archive.php?id=97p2">DDD module</a>, thus guaranteeing that there are no cyclic dependencies between your modules.</p>
+</div>
+<div class="paragraph">
+<p>If you do this, make sure that each project has its own <code>persistence.xml</code> file.</p>
+</div>
+<div class="paragraph">
+<p>And, remember also to configure Eclipse&#8217;s DataNucleus plugin for these other domain projects.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_advanced">2.2.6. Advanced</h4>
+<div class="paragraph">
+<p>In this section are a couple of options that will reduce the length of the change code/build/deploy/review feedback loop.</p>
+</div>
+<div class="sect4">
+<h5 id="_setting_up_dynamic_reloading">Setting up Dynamic Reloading</h5>
+<div class="paragraph">
+<p><a href="github.com/dcevm/dcevm">DCEVM</a> enhances the JVM with true hot-swap adding/removing of methods as well as more
+reliable hot swapping of the implementation of existing methods.</p>
+</div>
+<div class="paragraph">
+<p>In the context of Apache Isis, this is very useful for contributed actions and mixins and also view models; you should
+then be able to write these actions and have them be picked up without restarting the application.</p>
+</div>
+<div class="paragraph">
+<p>Changing persisting domain entities is more problematic, for two reasons: the JDO/DataNucleus enhancer needs to run on
+domain entities, and also at runtime JDO/DataNucleus would need to rebuild its own metamodel.  You may find that adding
+actions will work, but adding new properties or collections is much less likely to.</p>
+</div>
+<div class="paragraph">
+<p>For details of setting up DCEVM, see the <a href="#_cgcon_ide_intellij_advanced_dcevm">corresponding section</a> in the IntelliJ documentation.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcon_ide_project-lombok">2.3. Project Lombok</h3>
+<div class="paragraph">
+<p><a href="https://projectlombok.org/">Project Lombok</a> is an open source project to reduce the amount of boilerplate in
+your code.</p>
+</div>
+<div class="paragraph">
+<p>For example, rather than write:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">private</span> <span class="predefined-type">String</span> name;
+<span class="directive">public</span> <span class="predefined-type">String</span> getName() {
+    <span class="keyword">return</span> name;
+}
+<span class="directive">public</span> <span class="type">void</span> setName(<span class="predefined-type">String</span> name) {
+    <span class="local-variable">this</span>.name = name;
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>you can instead write simply:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="annotation">@Getter</span> <span class="annotation">@Setter</span>
+<span class="directive">private</span> <span class="predefined-type">String</span> name;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Under the covers it is implemented as an annotation processor; it basically hooks into the Java compiler
+so that it can emit additional bytecode (eg for the getter and setter).  See <a href="#_cg_ide_intellij_other-settings-compiler">here</a> for details of setting up in IntelliJ (Eclipse has very similar support).</p>
+</div>
+<div class="paragraph">
+<p>Apache Isis supports <a href="https://projectlombok.org/">Project Lombok</a>, in that the annotations that would normally be placed on the getter (namely <a href="rgant.html#_rgant-Property"><code>Property</code></a>, <a href="rgant.html#_rgant-PropertyLayout"><code>@PropertyLayout</code></a>, <a href="rgant.html#_rgant-Collection"><code>@Collection</code></a>, <a href="rgant.html#_rgant-CollectionLayout"><code>@CollectionLayout</code></a> and <a href="rgant.html#_rgant-MemberOrder"><code>@MemberOrder</code></a>) can be placed on the field instead.</p>
+</div>
+<div class="paragraph">
+<p>There are plugins for Lombok for maven; it&#8217;s just a matter of adding the required dependency.  To compile the code
+within your IDE (eg so that its compiler "knows" that there is, actually, a getter and setter) will require an
+Lombok plugin appropriate to that IDE.  See the <a href="https://projectlombok.org/download.html">Lombok download page</a> for more information.</p>
+</div>
+<div class="sect3">
+<h4 id="_future_thoughts">2.3.1. Future thoughts</h4>
+<div class="paragraph">
+<p>In the future we might extend/fork Lombok so that it understands Isis' own annotations (ie <a href="rgant.html#_rgant-Property"><code>@Property</code></a> and <a href="rgant.html#_rgant-Collection"><code>@Collection</code></a>)
+rather than Lombok&#8217;s own <code>@Getter</code> and `@Setter.</p>
+</div>
+<div class="paragraph">
+<p>It might also be possible to use Lombok to generate the domain event classes for each member.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcon_ide_agilej">2.4. AgileJ</h3>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>This material does not constitute an endorsement; AgileJ Structure Views is not affiliated to Apache Software Foundation in any way.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p><a href="http://www.agilej.com/">AgileJ Structure Views</a> is a commercial product to reverse engineer and visualize Java classes from source code.</p>
+</div>
+<div class="paragraph">
+<p>The key to using the tool is in developing a suitable filter script, a DSL.  You can use the following script as a starting point for visualizing Apache Isis domain models:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="AgileJ">// use CTRL+SPACE for completion suggestions
+hide all fields
+hide setter methods
+hide private methods
+hide methods named compareTo
+hide methods named toString
+hide methods named inject*
+hide methods named disable*
+hide methods named default*
+hide methods named hide*
+hide methods named autoComplete*
+hide methods named choices*
+hide methods named title
+hide methods named iconName
+hide methods named validate*
+hide methods named modify*
+hide protected methods
+hide types annotated as DomainService
+hide types named Constants
+hide types named InvoicingInterval
+hide enums
+hide constructors
+hide inner types named *Event
+hide inner types named *Functions
+hide inner types named *Predicates
+show getter methods in green
+show methods annotated as Programmatic in orange
+show methods annotated as Action in largest
+hide dependency lines
+hide call lines
+hide method lines</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For more information on AgileJ, see Paul Wells' 8-part tutorial series on Youtube; the first can be found <a href="https://www.youtube.com/watch?v=YrZQ7lMSsH0">here</a> (view the "show more" comments to click through to other parts).</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cgcon_ide-templates">3. Code and File Templates</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We provide parameterized templates, for both IntelliJ and Eclipse, to help you write your domain applications.</p>
+</div>
+<div class="paragraph">
+<p>On IntelliJ we provide both file templates (<code>File &gt; Settings &gt; Editor &gt; File and Code Templates</code>) and also live templates (<code>File &gt; Settings &gt; Editor &gt; Live Templates</code>).  The former are used to create new classes or files (eg a new domain entity), while the latter are intended to modify an existing file (eg create a new property or add a <code>toString()</code> method etc).</p>
+</div>
+<div class="paragraph">
+<p>On Eclipse we provide only the latter sort of template (Windows &gt; Preferences &gt; Java &gt; Editor &gt; Templates).</p>
+</div>
+<div class="paragraph">
+<p>There are templates for writing Apache Isis domain objects, for writing unit tests (JUnit and JMock), and also for writing Asciidoc documentation (see also the <a href="#_cgcon_asciidoc-templates">appendix</a>).</p>
+</div>
+<div class="sect2">
+<h3 id="_download">3.1. Download</h3>
+<div class="paragraph">
+<p>The following table lists the templates available to download:</p>
+</div>
+<table class="tableblock frame-all grid-all spread">
+<colgroup>
+<col style="width: 22%;">
+<col style="width: 22%;">
+<col style="width: 11%;">
+<col style="width: 22%;">
+<col style="width: 22%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Purpose</th>
+<th class="tableblock halign-left valign-top">IntelliJ<br>
+file template</th>
+<th class="tableblock halign-left valign-top">Prefix</th>
+<th class="tableblock halign-left valign-top">IntelliJ<br>
+live template</th>
+<th class="tableblock halign-left valign-top">Eclipse<br>
+template</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Domain Objects</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><a href="../resources/templates/intellij-settings-file-templates-for-apache-isis.jar">Download</a></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>is</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><a href="../resources/templates/isis-templates-idea.xml">Download</a></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><a href="../resources/templates/isis-templates.xml">Download</a></p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>JUnit tests</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>(none)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>ju</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><a href="../resources/templates/junit4-templates-idea.xml">Download</a></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><a href="../resources/templates/junit4-templates.xml">Download</a></p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>JMock tests</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>(none)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>jm</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><a href="../resources/templates/jmock2-templates-idea.xml">Download</a></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><a href="../resources/templates/jmock2-templates.xml">Download</a></p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>Asciidoc</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>(none)</p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><code>ad</code></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p><a href="../resources/templates/isis-asciidoc-templates-idea.xml">Download</a></p>
+</div></div></td>
+<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<p>(none)</p>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>The most commonly used domain objects (live) templates are also listed on the <a href="../cheat-sheet.html">Apache Isis cheat sheet</a>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_installation">3.2. Installation</h3>
+<div class="sect3">
+<h4 id="_intellij">3.2.1. IntelliJ</h4>
+<div class="paragraph">
+<p>To install in the live templates IntelliJ (Community edition 15), copy to the relevant <code>config/templates</code> directory, eg:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Windows <code>&lt;User home&gt;\.IdeaIC15\config\templates</code></p>
+</li>
+<li>
+<p>Linux <code>~/.IdeaIC14/config/templates</code></p>
+</li>
+<li>
+<p>Mac OS <code>~/Library/Preferences/IdeaIC15/templates</code></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>If using the Ultimate edition, the directory is <code>.IntelliJIdea15</code> rather than <code>IdeaIC15</code>.</p>
+</div>
+<div class="paragraph">
+<p>To install the file templates, use <code>File &gt; Import Settings</code>.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_eclipse">3.2.2. Eclipse</h4>
+<div class="paragraph">
+<p>To install in Eclipse, go to <code>Windows &gt; Preferences &gt; Java &gt; Editor &gt; Templates</code> and choose <code>Import</code>.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_usage">3.3. Usage</h3>
+<div class="paragraph">
+<p>For the live templates, enter the prefix in the editor (<code>is</code>, <code>ju</code>, <code>jm</code>) and the IDE will list all available templates
+in that category.</p>
+</div>
+<div class="paragraph">
+<p>For the file templates (IntelliJ only), these are available from <code>File &gt; New</code>.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cgcon_cmd-line">4. Command Line and CI</h2>
+<div class="sectionbody">
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+TODO
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cgcon_isis-maven-plugin">5. Apache Isis Maven Plugin</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The Apache Isis Maven plugin defines three goals:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>validate</code><br></p>
+<div class="paragraph">
+<p>Use to verify at build time that the metamodel of an application is valid.  This runs the <code>MetaModelValidator</code> that is also run when the application is started up.</p>
+</div>
+</li>
+<li>
+<p><code>swagger</code><br></p>
+<div class="paragraph">
+<p>Uses the <a href="rgsvc.html#_rgsvc_api_SwaggerService"><code>SwaggerService</code></a> to generate <a href="http://swagger.io">Swagger</a> spec files that describe the public and/or private RESTful APIs exposed by the <a href="ugvro.html">RestfulObjects viewer</a>.</p>
+</div>
+</li>
+<li>
+<p><code>xsd</code><br></p>
+<div class="paragraph">
+<p>Uses the <a href="rgsvc.html#_rgsvc_api_JaxbService"><code>JaxbService</code></a> to generate XSD schemas from any JAXB-annotated view models/DTOs.<br></p>
+</div>
+<div class="paragraph">
+<p>This is instead of and preferable to using the JAXB <a href="https://jaxb.java.net/2.2.4/docs/schemagen.html">schemagen</a> tool, because it uses the framework&#8217;s support (via <a href="rgant.html#_rgant-XmlJavaValueType"><code>@XmlJavaValueType</code></a>) to translate any references to domain objects into <code>OidDto</code>s (as defined by the Apache Isis <a href="rgcms.html#_rgcms_schema-common">common schema</a>).</p>
+</div>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The <code>validate</code> goal is by default bound to the <code>test</code> phase, and the <code>swagger</code> goal is by default bound to the <code>package</code> phase; both are typically of your application&#8217;s <code>dom</code> sub-module.  The <code>xsd</code> goal meanwhile defaults to the <code>generate-resources</code> phase, and this is generally used in a completely separate sub-module.  An example can be found in the (non-ASF) <a href="http://github.com/isisaddons/isis-app-todoapp">Isis addons' todoapp</a> example app; the separate submodule that uses the <code>xsd</code> goal is (also) called <code>todoapp-xsd</code>.</p>
+</div>
+<div class="paragraph">
+<p>All of these goals require an <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping"><code>AppManifest</code></a> to point the plugin at, so that
+it knows how to bootstrap an Isis runtime.  This is discussed below, followed by sections on configuring the two goals.</p>
+</div>
+<div class="sect2">
+<h3 id="__code_appmanifest_code">5.1. <code>AppManifest</code></h3>
+<div class="paragraph">
+<p>As noted in the introduction, all the goals require an <a href="rgcms.html#_rgcms_classes_AppManifest-bootstrapping"><code>AppManifest</code></a>
+to point the plugin at, so that it knows how to bootstrap an Isis runtime.</p>
+</div>
+<div class="paragraph">
+<p>This can be extremely minimal.  For example, the <a href="ugfun.html#_ugfun_getting-started_simpleapp-archetype">SimpleApp</a>'s
+manifest is:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="keyword">package</span> <span class="namespace">domainapp.dom</span>;
+...
+public <span class="type">class</span> <span class="class">DomainAppDomManifest</span> <span class="directive">implements</span> AppManifest {
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">List</span>&lt;<span class="predefined-type">Class</span>&lt;?&gt;&gt; getModules() {
+        <span class="keyword">return</span> <span class="predefined-type">Arrays</span>.asList(
+                DomainAppDomainModule.class  <span class="comment">// domain (entities and repositories)</span>
+        );
+    }
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">List</span>&lt;<span class="predefined-type">Class</span>&lt;?&gt;&gt; getAdditionalServices() { <span class="keyword">return</span> <span class="predefined-type">Collections</span>.emptyList(); }
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">String</span> getAuthenticationMechanism() { <span class="keyword">return</span> <span class="predefined-constant">null</span>; }
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">String</span> getAuthorizationMechanism() { <span class="keyword">return</span> <span class="predefined-constant">null</span>; }
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">List</span>&lt;<span class="predefined-type">Class</span>&lt;? <span class="directive">extends</span> FixtureScript&gt;&gt; getFixtures() { <span class="keyword">return</span> <span class="predefined-constant">null</span>; }
+    <span class="annotation">@Override</span>
+    <span class="directive">public</span> <span class="predefined-type">Map</span>&lt;<span class="predefined-type">String</span>, <span class="predefined-type">String</span>&gt; getConfigurationProperties() { <span class="keyword">return</span> <span class="predefined-constant">null</span>; }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>where <code>DomainAppDomainModule</code> simply identifies the package for the manifest to search under:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="java"><span class="keyword">package</span> <span class="namespace">domainapp.dom</span>;
+<span class="directive">public</span> <span class="directive">final</span> <span class="type">class</span> <span class="class">DomainAppDomainModule</span> { }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>As you&#8217;ll see below, the configuration for each of the goals both refer to this app manifest.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cgcon_isis-maven-plugin_validate">5.2. <code>validate</code> goal</h3>
+<div class="paragraph">
+<p>The Apache Isis programming model requires that a number of naming conventions are followed.</p>
+</div>
+<div class="paragraph">
+<p>For example, the validator will detect any orphaned supporting methods (eg <code>hideXxx()</code>) if the corresponding property
+or action has been renamed or deleted but the supporting method was not also updated.  Another example is that a class
+cannot have a title specified both using <code>title()</code> method and also using <code>@Title</code> annotation.</p>
+</div>
+<div class="paragraph">
+<p>When running the application these are enforced by the <code>MetaModelValidator</code> component that detects these errors, failing fast.</p>
+</div>
+<div class="paragraph">
+<p>The purpose of the <code>validate</code> goal of the <code>isis-maven-plugin</code> is to enforce these naming conventions at build time,
+typically enforced by way of a continuous integration server.</p>
+</div>
+<div class="paragraph">
+<p>The <code>validate</code> goal defines a single property:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>appManifest</code> - fully qualified class name for the app manifest used to bootstrap the application (see discussion above)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The sections below explain how to configure the plugin within an app.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The instructions given here relate to <code>1.10.0</code>.   This goal was also released for <code>1.9.0</code>, but with a slightly
+different configuration; see the final section for differences.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="sect3">
+<h4 id="__code_dom_code_submodule">5.2.1. <code>dom</code> submodule</h4>
+<div class="paragraph">
+<p>Update the <code>pom.xml</code> (in your project&#8217;s <code>dom</code> module):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;profile&gt;</span>
+    <span class="tag">&lt;id&gt;</span>isis-validate<span class="tag">&lt;/id&gt;</span>
+    <span class="tag">&lt;activation&gt;</span>
+        <span class="tag">&lt;property&gt;</span>
+            <span class="tag">&lt;name&gt;</span>!skip.isis-validate<span class="tag">&lt;/name&gt;</span>                                            <i class="conum" data-value="1"></i><b>(1)</b>
+        <span class="tag">&lt;/property&gt;</span>
+    <span class="tag">&lt;/activation&gt;</span>
+    <span class="tag">&lt;build&gt;</span>
+        <span class="tag">&lt;plugins&gt;</span>
+            <span class="tag">&lt;plugin&gt;</span>
+                <span class="tag">&lt;groupId&gt;</span>org.apache.isis.tool<span class="tag">&lt;/groupId&gt;</span>
+                <span class="tag">&lt;artifactId&gt;</span>isis-maven-plugin<span class="tag">&lt;/artifactId&gt;</span>
+                <span class="tag">&lt;version&gt;</span>${isis.version}<span class="tag">&lt;/version&gt;</span>                                      <i class="conum" data-value="2"></i><b>(2)</b>
+                <span class="tag">&lt;configuration&gt;</span>
+                    <span class="tag">&lt;appManifest&gt;</span>domainapp.dom.DomainAppDomManifest<span class="tag">&lt;/appManifest&gt;</span>       <i class="conum" data-value="3"></i><b>(3)</b>
+                <span class="tag">&lt;/configuration&gt;</span>
+                <span class="tag">&lt;dependencies&gt;</span>
+                    <span class="tag">&lt;dependency&gt;</span>
+                        <span class="tag">&lt;groupId&gt;</span>${project.groupId}<span class="tag">&lt;/groupId&gt;</span>
+                        <span class="tag">&lt;artifactId&gt;</span>simpleapp-dom<span class="tag">&lt;/artifactId&gt;</span>                          <i class="conum" data-value="4"></i><b>(4)</b>
+                        <span class="tag">&lt;version&gt;</span>${project.version}<span class="tag">&lt;/version&gt;</span>
+                    <span class="tag">&lt;/dependency&gt;</span>
+                    <span class="comment">&lt;!-- workaround to avoid conflict with plexus-default --&gt;</span>
+                    <span class="tag">&lt;dependency&gt;</span>
+                        <span class="tag">&lt;groupId&gt;</span>com.google.guava<span class="tag">&lt;/groupId&gt;</span>
+                        <span class="tag">&lt;artifactId&gt;</span>guava<span class="tag">&lt;/artifactId&gt;</span>
+                        <span class="tag">&lt;version&gt;</span>16.0.1<span class="tag">&lt;/version&gt;</span>
+                    <span class="tag">&lt;/dependency&gt;</span>
+                <span class="tag">&lt;/dependencies&gt;</span>
+                <span class="tag">&lt;executions&gt;</span>
+                    <span class="tag">&lt;execution&gt;</span>
+                        <span class="tag">&lt;phase&gt;</span>test<span class="tag">&lt;/phase&gt;</span>
+                        <span class="tag">&lt;goals&gt;</span>
+                            <span class="tag">&lt;goal&gt;</span>validate<span class="tag">&lt;/goal&gt;</span>                                       <i class="conum" data-value="5"></i><b>(5)</b>
+ 

<TRUNCATED>