http://git-wip-us.apache.org/repos/asf/isis-site/blob/97af7e5f/content/versions/SNAPSHOT/guides/dg/dg.html
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/dg/dg.html 
b/content/versions/SNAPSHOT/guides/dg/dg.html
new file mode 100644
index 0000000..8c22afd
--- /dev/null
+++ b/content/versions/SNAPSHOT/guides/dg/dg.html
@@ -0,0 +1,5858 @@
+<!doctype html>
+<html>
+ <head> 
+  <!--
+        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.
+    --> 
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
+  <meta charset="utf-8"> 
+  <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
+  <!-- No caching headers --> 
+  <meta http-equiv="cache-control" content="no-cache"> 
+  <meta http-equiv="pragma" content="no-cache"> 
+  <meta http-equiv="expires" content="-1"> 
+  <title>Developers' Guide</title> 
+  <link rel="icon" type="image/png" href="../../images/isis-favicon.png"> 
+  <!--
+        Based on DataNucleus' template,
+        that was in turn based on an earlier version of Apache Isis' template,
+        that was in turn based on Apache Deltaspike's template.
+
+        This template uses
+        * Bootstrap v3.3.7 (https://getbootstrap.com/) for navbar.
+        * Bootstrap TOC plugin v0.4.1 (https://afeld.github.io/bootstrap-toc/)
+          for the table of contents.
+        * jQuery (necessary for Bootstrap's JavaScript plugins)
+        * Font-Awesome for some icons used by Asciidoctor
+
+        Also:
+        * Bootswatch "flatly" theme for Bootstrap 
(https://bootswatch.com/flatly).
+        * slick.js (carousel)
+        * add a link to all headers (home-grown, adapted from blog posts)
+        * integration of elasticlunr.js (home-grown, adapted from blog posts)
+    --> 
+  <link 
href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/flatly/bootstrap.min.css";
 rel="stylesheet"> 
+  <link href="../../css/bootstrap-toc/0.4.1/bootstrap-toc.min.css" 
rel="stylesheet"> 
+  <link href="../../css/asciidoctor/foundation.css" rel="stylesheet"> 
+  <link 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css";
 rel="stylesheet"> 
+  <link href="../../css/slick/1.5.0/slick.css" rel="stylesheet"> 
+  <link href="../../css/slick/1.5.0/slick-theme.css" rel="stylesheet"> 
+  <link href="../../css/search-panel/search-panel.css" rel="stylesheet"> 
+  <link href="../../css/header-links/header-links.css" rel="stylesheet"> 
+  <link href="../../css/sticky-header/sticky-header.css" rel="stylesheet"> 
+  <link href="../../css/customisations.css" rel="stylesheet"> 
+  <!-- Coderay syntax formatter --> 
+  <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{color:rgba(0,0,0,.4)}
+table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
+table.CodeRay td{vertical-align: top;line-height:1.45}
+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:#000}
+.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}
+    </style> 
+ </head> 
+ <body data-spy="scroll" data-target="#toc"> 
+  <div id="basedir" style="display:none;">
+   ../../
+  </div> 
+  <div id="docname" style="display:none;">
+   dg
+  </div> 
+  <div id="filetype" style="display:none;">
+   html
+  </div> 
+  <!-- Navbar --> 
+  <nav class="navbar navbar-default navbar-static-top header"> 
+   <div class="container"> 
+    <div class="navbar-header"> 
+     <!-- Three line menu button for use on mobile screens --> 
+     <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span 
class="icon-bar"></span> <span class="icon-bar"></span> <span 
class="icon-bar"></span> </button> 
+     <a class="navbar-brand" href="../../index.html"> <img alt="Brand" 
src="../../images/isis-logo-48x48.png"> </a> 
+     <a class="navbar-brand" href="../../index.html">Apache Isis</a> 
+    </div> 
+    <!-- Navbar that will collapse on mobile screens --> 
+    <div id="navbar" class="navbar-collapse collapse"> 
+     <ul class="nav navbar-nav"> 
+      <li class="dropdown"> <a href="#" class="dropdown-toggle" 
data-toggle="dropdown" role="button" aria-haspopup="true" 
aria-expanded="false">Documentation<span class="caret"></span></a> 
+       <ul class="dropdown-menu"> 
+        <li><a href="../../documentation.html">Table of Contents</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">User Guides</li> 
+        <li><a href="../../guides/ugfun/ugfun.html">Fundamentals</a></li> 
+        <li><a href="../../guides/ugvw/ugvw.html">Wicket Viewer</a></li> 
+        <li><a href="../../guides/ugvro/ugvro.html">Restful Objects 
Viewer</a></li> 
+        <li><a href="../../guides/ugodn/ugodn.html">DataNucleus Object 
Store</a></li> 
+        <li><a href="../../guides/ugsec/ugsec.html">Security</a></li> 
+        <li><a href="../../guides/ugtst/ugtst.html">Testing</a></li> 
+        <li><a href="../../guides/ugbtb/ugbtb.html">Beyond the Basics</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">Reference Guides</li> 
+        <li><a href="../../guides/rgant/rgant.html">Annotations</a></li> 
+        <li><a href="../../guides/rgsvc/rgsvc.html">Domain Services</a></li> 
+        <li><a href="../../guides/rgcfg/rgcfg.html">Core Config' 
Properties</a></li> 
+        <li><a href="../../guides/rgcms/rgcms.html">Classes, Methods and 
Schema</a></li> 
+        <li><a href="../../guides/rgmvn/rgmvn.html">Maven plugin</a></li> 
+        <li><a href="../../guides/rgfis/rgfis.html">Framework Internal 
Services</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">Javadoc</li> 
+        <li><a 
href="http://javadoc.io/doc/org.apache.isis.core/isis-core-applib";>Applib</a></li>
 
+       </ul> </li> 
+      <li class="dropdown  hidden-sm hidden-md"> <a href="#" 
class="dropdown-toggle" data-toggle="dropdown" role="button" 
aria-haspopup="true" aria-expanded="false">Downloads<span 
class="caret"></span></a> 
+       <ul class="dropdown-menu"> 
+        <li class="dropdown-header">Maven archetypes</li> 
+        <li><a 
href="../../guides/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">helloworld</a></li>
 
+        <li><a 
href="../../guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">simpleapp</a></li>
 
+        <li role="separator" class="divider"></li> 
+        <li><a href="../../downloads.html">Downloads</a></li> 
+        <li><a href="../../release-notes/release-notes.html">Release 
Notes</a></li> 
+        <li><a href="../../migration-notes/migration-notes.html">Migration 
Notes</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li><a href="https://github.com/apache/isis";>Github mirror</a></li> 
+       </ul> </li> 
+      <li class="dropdown  hidden-sm"> <a href="#" class="dropdown-toggle" 
data-toggle="dropdown" role="button" aria-haspopup="true" 
aria-expanded="false">Support<span class="caret"></span></a> 
+       <ul class="dropdown-menu"> 
+        <li class="dropdown-header">Guides</li> 
+        <li><a href="../../guides/dg/dg.html">Developers' Guide</a></li> 
+        <li><a href="../../guides/cgcom/cgcom.html">Committers' Guide</a></li> 
+        <li><a href="../../guides/htg.html">Hints-n-Tips Guide</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">Mailing Lists</li> 
+        <li><a href="../../support.html">How to subscribe</a></li> 
+        <li><a 
href="https://lists.apache.org/list.html?us...@isis.apache.org";>Archives (ASF 
Pony mail)</a></li> 
+        <li><a href="http://isis.markmail.org/search/?q=";>Archives 
(Markmail)</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li class="dropdown-header">Other Resources</li> 
+        <li><a href="https://issues.apache.org/jira/browse/ISIS";>ASF 
JIRA</a></li> 
+        <li><a href="http://stackoverflow.com/questions/tagged/isis";>Stack 
Overflow</a></li> 
+        <li><a href="../../help.html">Wiki, Fisheye etc.</a></li> 
+       </ul> </li> 
+      <li class="dropdown hidden-sm hidden-md"> <a href="#" 
class="dropdown-toggle" data-toggle="dropdown" role="button" 
aria-haspopup="true" aria-expanded="false">@ASF<span class="caret"></span></a> 
+       <ul class="dropdown-menu"> 
+        <li><a href="http://www.apache.org/";>Apache Homepage</a></li> 
+        <li><a href="http://www.apache.org/licenses/";>Licenses</a></li> 
+        <li><a href="http://www.apache.org/security/";>Security</a></li> 
+        <li><a 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li> 
+        <li><a 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li> 
+        <li role="separator" class="divider"></li> 
+        <li><a href="https://whimsy.apache.org/board/minutes/Isis.html";>PMC 
board minutes</a></li> 
+       </ul> </li> 
+     </ul> 
+     <div class="nav navbar-nav navbar-right"> 
+      <!-- 'style' added to fix height of input box. FIX THIS --> 
+      <form class="navbar-form" role="search" id="search-form" style="padding: 
1px 15px;"> 
+       <div class="form-group"> 
+        <input class="form-control" id="search-field" type="text" size="30" 
placeholder="Search"> 
+       </div> 
+      </form> 
+     </div> 
+     <p class="nav navbar-text navbar-right small">v2.0.0-M1-SNAPSHOT</p> 
+    </div> 
+   </div> 
+  </nav> 
+  <div class="container"> 
+   <div class="row-fluid"> 
+    <div class="col-xs-12 col-sm-12 col-md-12 col-lg-9"> 
+     <div id="search-panel"> 
+      <div id="search-results"></div> 
+      <div> 
+       <br> 
+       <a href="#" id="search-results-clear">clear</a> 
+      </div> 
+     </div> 
+     <span class="pdf-link"><a href="dg.pdf"><img 
src="../../images/PDF-50.png"></a></span> 
+     <div class="page-title"> 
+      <h1>Developers' Guide</h1> 
+     </div> 
+     <div id="doc-content">
+      <div class="btn-group" style="float: right; font-size: small; padding: 
6px;  ">
+       <button type="button" class="btn btn-xs btn-default" 
onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/dg/dg.adoc&quot;";><i
 class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
+       <button type="button" class="btn btn-xs btn-default dropdown-toggle" 
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span 
class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+       <ul class="dropdown-menu">
+        <li><a 
href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/dg/dg.adoc";
 target="_blank"><i class="fa fa-pencil-square-o fa-fw" 
aria-hidden="true"></i>&nbsp; Edit</a></li>
+        <li><a 
href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/dg/dg.adoc";
 target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; 
History</a></li>
+        <li><a 
href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/dg/dg.adoc";
 target="_blank"><i class="fa fa-file-text-o fa-fw" 
aria-hidden="true"></i>&nbsp; Raw</a></li>
+        <li><a 
href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/dg/dg.adoc";
 target="_blank"><i class="fa fa-hand-o-right fa-fw" 
aria-hidden="true"></i>&nbsp; Blame</a></li>
+       </ul>
+      </div> 
+      <div class="sect1"> 
+       <h2 id="__dg">1. Developers' Guide</h2> 
+       <div class="sectionbody"> 
+        <div class="paragraph"> 
+         <p>This developers' 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’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/ugfun.html">Fundamentals</a></p> </li> 
+           <li> <p><a href="../ugvw/ugvw.html">Wicket viewer</a></p> </li> 
+           <li> <p><a href="../ugvro/ugvro.html">Restful Objects 
viewer</a></p> </li> 
+           <li> <p><a href="../ugodn/ugodn.html">DataNucleus object 
store</a></p> </li> 
+           <li> <p><a href="../ugsec/ugsec.html">Security</a></p> </li> 
+           <li> <p><a href="../ugtst/ugtst.html">Testing</a></p> </li> 
+           <li> <p><a href="../ugbtb/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/rgant.html">Annotations</a></p> </li> 
+           <li> <p><a href="../rgsvc/rgsvc.html">Domain Services</a></p> </li> 
+           <li> <p><a href="../rgcfg/rgcfg.html">Configuration 
Properties</a></p> </li> 
+           <li> <p><a href="../rgcms/rgcms.html">Classes, Methods and 
Schema</a></p> </li> 
+           <li> <p><a href="../rgmvn/rgmvn.html">Apache Isis Maven 
plugin</a></p> </li> 
+           <li> <p><a href="../rgfis/rgfis.html">Framework Internal 
Services</a></p> </li> 
+          </ul> 
+         </div> 
+         <div class="paragraph"> 
+          <p>The remaining guides are:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p><a href="../dg/dg.html">Developers' Guide</a> (this 
guide)</p> </li> 
+           <li> <p><a href="../cgcom/cgcom.html">Committers' Guide</a> 
(release procedures and related practices)</p> </li> 
+          </ul> 
+         </div> 
+        </div> 
+       </div> 
+      </div> 
+      <div class="sect1"> 
+       <h2 id="_dg_ide">2. Using an IDE</h2>
+       <div class="btn-group" style="float: right; font-size: small; padding: 
6px; margin-top: -55px; ">
+        <button type="button" class="btn btn-xs btn-default" 
onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide.adoc&quot;";><i
 class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
+        <button type="button" class="btn btn-xs btn-default dropdown-toggle" 
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span 
class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+        <ul class="dropdown-menu">
+         <li><a 
href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide.adoc";
 target="_blank"><i class="fa fa-pencil-square-o fa-fw" 
aria-hidden="true"></i>&nbsp; Edit</a></li>
+         <li><a 
href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide.adoc";
 target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; 
History</a></li>
+         <li><a 
href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide.adoc";
 target="_blank"><i class="fa fa-file-text-o fa-fw" 
aria-hidden="true"></i>&nbsp; Raw</a></li>
+         <li><a 
href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide.adoc";
 target="_blank"><i class="fa fa-hand-o-right fa-fw" 
aria-hidden="true"></i>&nbsp; Blame</a></li>
+        </ul>
+       </div> 
+       <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 likewise 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="_dg_ide_intellij">2.1. Developing using IntelliJ IDEA</h3>
+         <div class="btn-group" style="float: right; font-size: small; 
padding: 6px; margin-top: -55px; ">
+          <button type="button" class="btn btn-xs btn-default" 
onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc&quot;";><i
 class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
+          <button type="button" class="btn btn-xs btn-default dropdown-toggle" 
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span 
class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+          <ul class="dropdown-menu">
+           <li><a 
href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc";
 target="_blank"><i class="fa fa-pencil-square-o fa-fw" 
aria-hidden="true"></i>&nbsp; Edit</a></li>
+           <li><a 
href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc";
 target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; 
History</a></li>
+           <li><a 
href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc";
 target="_blank"><i class="fa fa-file-text-o fa-fw" 
aria-hidden="true"></i>&nbsp; Raw</a></li>
+           <li><a 
href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc";
 target="_blank"><i class="fa fa-hand-o-right fa-fw" 
aria-hidden="true"></i>&nbsp; Blame</a></li>
+          </ul>
+         </div> 
+         <div class="admonitionblock note"> 
+          <table> 
+           <tbody>
+            <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. JetBrains does 
however provide complimentary copies of the IntelliJ IDE to Apache 
committers.</p> 
+              </div> </td> 
+            </tr> 
+           </tbody>
+          </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="__dg_ide_intellij_installing">2.1.1. Installing and Setting 
up</h4> 
+          <div class="paragraph"> 
+           <p>This section covers installation and setup. These 
notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but 
are believed to be compatible with more recent versions/other editions of the 
IDE.</p> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_installing_download">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"> 
+             <a class="image" 
href="images/intellij-idea/010-installing/010-welcome-page.png"><img 
src="images/intellij-idea/010-installing/010-welcome-page.png" alt="010 welcome 
page" width="400px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/010-installing/020-choose-location.png"><img 
src="images/intellij-idea/010-installing/020-choose-location.png" alt="020 
choose location" width="400px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/010-installing/030-installation-options.png"><img 
src="images/intellij-idea/010-installing/030-installation-options.png" alt="030 
installation options" width="400px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/010-installing/040-start-menu-folder.png"><img 
src="images/intellij-idea/010-installing/040-start-menu-folder.png" alt="040 
start menu folder" width="400px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/010-installing/050-completing.png"><img 
src="images/intellij-idea/010-installing/050-completing.png" alt="050 
completing" width="400px"></a> 
+            </div> 
+            <div class="title">
+             Figure 5. IntelliJ Installation Wizard - Completing the Wizard
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>Later on we’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"> 
+             <a class="image" 
href="images/intellij-idea/010-installing/060-import-settings-or-not.png"><img 
src="images/intellij-idea/010-installing/060-import-settings-or-not.png" 
alt="060 import settings or not" width="400px"></a> 
+            </div> 
+            <div class="title">
+             Figure 6. IntelliJ Installation Wizard - Import Settings
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>Finally, if you are a trendy hipster, set the UI theme to 
Darcula:</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/010-installing/070-set-ui-theme.png"><img 
src="images/intellij-idea/010-installing/070-set-ui-theme.png" alt="070 set ui 
theme" width="600px"></a> 
+            </div> 
+            <div class="title">
+             Figure 7. IntelliJ Installation Wizard Set UI Theme
+            </div> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_installing_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"> 
+             <a class="image" 
href="images/intellij-idea/020-create-new-project/010-new-project-create.png"><img
 src="images/intellij-idea/020-create-new-project/010-new-project-create.png" 
alt="010 new project create" width="400px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/020-create-new-project/020-java-project-setup-jdk.png"><img
 
src="images/intellij-idea/020-create-new-project/020-java-project-setup-jdk.png"
 alt="020 java project setup jdk" width="500px"></a> 
+            </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. Apache Isis supports both 
Java 7 and Java 8.</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/020-create-new-project/030-java-project-select-jdk.png"><img
 
src="images/intellij-idea/020-create-new-project/030-java-project-select-jdk.png"
 alt="030 java project select jdk" width="250px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/020-create-new-project/050-name-and-location.png"><img
 src="images/intellij-idea/020-create-new-project/050-name-and-location.png" 
alt="050 name and location" width="400px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/020-create-new-project/060-create-dir.png"><img 
src="images/intellij-idea/020-create-new-project/060-create-dir.png" alt="060 
create dir" width="250px"></a> 
+            </div> 
+            <div class="title">
+             Figure 12. IntelliJ Create New Project
+            </div> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_file-templates">File templates</h5> 
+           <div class="paragraph"> 
+            <p>Next we recommend you import a set of standard file templates. 
These are used to create new classes or supporting files:</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/030-import-settings/040-file-templates.png"><img 
src="images/intellij-idea/030-import-settings/040-file-templates.png" alt="040 
file templates" width="400px"></a> 
+            </div> 
+            <div class="title">
+             Figure 13. File templates
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>The file templates are provided as a settings JAR file, namely 
<strong><a 
href="resources/intellij/isis-settings-file-templates.jar">isis-settings-file-templates.jar</a></strong>.
 Download this file.</p> 
+           </div> 
+           <div class="paragraph"> 
+            <p>Next, import using <code>File &gt; Import Settings</code>, 
specifying the directory that you have downloaded the file to:</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/030-import-settings/010-settings-import-jar.png"><img
 src="images/intellij-idea/030-import-settings/010-settings-import-jar.png" 
alt="010 settings import jar" width="400px"></a> 
+            </div> 
+            <div class="title">
+             Figure 14. IntelliJ Import Settings - Specify JAR file
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>Select all the categories (there should just be one), and hit 
OK. then hit restart.</p> 
+           </div> 
+           <div class="admonitionblock warning"> 
+            <table> 
+             <tbody>
+              <tr> 
+               <td class="icon"> <i class="fa icon-warning" 
title="Warning"></i> </td> 
+               <td class="content"> 
+                <div class="paragraph"> 
+                 <p>If importing into IntelliJ 2017.2.3 two categories are 
shown - "File templates" and "File templates (schemes)". Select all the 
categories.</p> 
+                </div> 
+                <div class="paragraph"> 
+                 <p>Apparently no categories are shown if importing into 
IntelliJ 2016.1.1 Community Edition (and perhaps other 2016 versions). The file 
does import ok into IntelliJ 15.0.x, so we think this is a bug in the 2016 
version.</p> 
+                </div> 
+                <div class="paragraph"> 
+                 <p>The workaround is to extract the <code>.jar</code> file 
locally and copy the files into IntelliJ’s <code>config</code> directory, 
somewhere in your home directory:</p> 
+                </div> 
+                <div class="ulist"> 
+                 <ul> 
+                  <li> <p>Windows <code>&lt;User 
home&gt;\.IdeaIC2016\config</code></p> </li> 
+                  <li> <p>Linux <code>~/..IdeaIC2016/config</code></p> </li> 
+                  <li> <p>Mac OS 
<code>~/Library/Preferences/IdeaIC2016</code></p> </li> 
+                 </ul> 
+                </div> </td> 
+              </tr> 
+             </tbody>
+            </table> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_live-templates">Live templates</h5> 
+           <div class="paragraph"> 
+            <p>We also recommend you import a set of live templates. These are 
used to add new methods to existing classes:</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/030-import-settings/050-live-templates.png"><img 
src="images/intellij-idea/030-import-settings/050-live-templates.png" alt="050 
live templates" width="600px"></a> 
+            </div> 
+            <div class="title">
+             Figure 15. Live templates
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>The live templates have a prefix of prefixed either:</p> 
+           </div> 
+           <div class="ulist"> 
+            <ul> 
+             <li> <p><code>is</code> : for Apache Isis domain objects</p> 
</li> 
+             <li> <p><code>ju</code> : for JUnit tests</p> </li> 
+             <li> <p><code>jm</code> : for JMock mocks or libraries</p> </li> 
+             <li> <p><code>ad</code> : for Asciidoc documentation; a full list 
can be found in the <a 
href="../dg/dg.html#_dg_asciidoc-templates">appendix</a>.</p> </li> 
+            </ul> 
+           </div> 
+           <div class="paragraph"> 
+            <p>The live templates are also provided as a settings JAR file, 
namely <strong><a 
href="resources/intellij/isis-settings-live-templates.jar">isis-settings-live-templates.jar</a></strong>.
 Download and import (as for the previous settings JAR files).</p> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_coding-standards">Coding Standards</h5> 
+           <div class="paragraph"> 
+            <p>Next, we suggest you recommend you import settings for standard 
ASF/Apache Isis coding conventions. This file is also provided as a settings 
file, namely <strong><a 
href="resources/intellij/isis-settings-code-style.jar">isis-settings-code-style.jar</a></strong>.
 Download and import (as for the above settings JAR files).</p> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_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"> 
+             <a class="image" 
href="images/intellij-idea/040-other-settings-compiler/010-build-automatically.png"><img
 
src="images/intellij-idea/040-other-settings-compiler/010-build-automatically.png"
 alt="010 build automatically" width="700px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/040-other-settings-compiler/020-annotation-processor.png"><img
 
src="images/intellij-idea/040-other-settings-compiler/020-annotation-processor.png"
 alt="020 annotation processor" width="700px"></a> 
+            </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="../dg/dg.html#_dg_project-lombok">Project 
Lombok</a>.</p> 
+           </div> 
+           <div class="admonitionblock note"> 
+            <table> 
+             <tbody>
+              <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> 
+             </tbody>
+            </table> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_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"> 
+             <a class="image" 
href="images/intellij-idea/042-other-settings-maven/010-maven-installation.png"><img
 src="images/intellij-idea/042-other-settings-maven/010-maven-installation.png" 
alt="010 maven installation" width="700px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/042-other-settings-maven/020-maven-configuration.png"><img
 
src="images/intellij-idea/042-other-settings-maven/020-maven-configuration.png" 
alt="020 maven configuration" width="700px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/044-other-settings-misc/010-auto-import.png"><img 
src="images/intellij-idea/044-other-settings-misc/010-auto-import.png" alt="010 
auto import" width="700px"></a> 
+            </div> 
+            <div class="title">
+             Figure 20. IntelliJ Maven Settings - Auto Import
+            </div> 
+           </div> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="__dg_ide_intellij_importing-maven-modules">2.1.2. Importing 
Maven Modules</h4> 
+          <div class="paragraph"> 
+           <p>Let’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’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"> 
+            <a class="image" 
href="images/intellij-idea/100-maven-module-mgmt/010-maven-modules-view.png"><img
 src="images/intellij-idea/100-maven-module-mgmt/010-maven-modules-view.png" 
alt="010 maven modules view" width="730px"></a> 
+           </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"> 
+            <a class="image" 
href="images/intellij-idea/100-maven-module-mgmt/020-adding-another-module.png"><img
 src="images/intellij-idea/100-maven-module-mgmt/020-adding-another-module.png" 
alt="020 adding another module" width="400px"></a> 
+           </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"> 
+            <a class="image" 
href="images/intellij-idea/100-maven-module-mgmt/030-other-module-added.png"><img
 src="images/intellij-idea/100-maven-module-mgmt/030-other-module-added.png" 
alt="030 other module added" width="730px"></a> 
+           </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 them from 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"> 
+            <a class="image" 
href="images/intellij-idea/100-maven-module-mgmt/040-ignoring-modules.png"><img 
src="images/intellij-idea/100-maven-module-mgmt/040-ignoring-modules.png" 
alt="040 ignoring modules" width="730px"></a> 
+           </div> 
+           <div class="title">
+            Figure 24. IntelliJ Maven Module Management - Ignoring Modules
+           </div> 
+          </div> 
+          <div class="paragraph"> 
+           <p>Confirm that it’s ok to ignore these modules:</p> 
+          </div> 
+          <div class="imageblock"> 
+           <div class="content"> 
+            <a class="image" 
href="images/intellij-idea/100-maven-module-mgmt/050-ignoring-modules-2.png"><img
 src="images/intellij-idea/100-maven-module-mgmt/050-ignoring-modules-2.png" 
alt="050 ignoring modules 2" width="300px"></a> 
+           </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"> 
+            <a class="image" 
href="images/intellij-idea/100-maven-module-mgmt/060-ignored-modules.png"><img 
src="images/intellij-idea/100-maven-module-mgmt/060-ignored-modules.png" 
alt="060 ignored modules" width="730px"></a> 
+           </div> 
+           <div class="title">
+            Figure 26. IntelliJ Maven Module Management - Updated Projects 
Window
+           </div> 
+          </div> 
+         </div> 
+         <div class="sect3"> 
+          <h4 id="__dg_ide_intellij_running">2.1.3. Running</h4> 
+          <div class="paragraph"> 
+           <p>Let’s see how to run both the app and the tests.</p> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_running_the-app">Running the App</h5> 
+           <div class="paragraph"> 
+            <p>Once you’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"> 
+             <a class="image" 
href="images/intellij-idea/110-running-the-app/010-run-configuration.png"><img 
src="images/intellij-idea/110-running-the-app/010-run-configuration.png" 
alt="010 run configuration" width="600px"></a> 
+            </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’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"> 
+             <a class="image" 
href="images/intellij-idea/110-running-the-app/020-datanucleus-enhancer-goal.png"><img
 
src="images/intellij-idea/110-running-the-app/020-datanucleus-enhancer-goal.png"
 alt="020 datanucleus enhancer goal" width="400px"></a> 
+            </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> 
+             <tbody>
+              <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’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> 
+             </tbody>
+            </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="__dg_ide_intellij_running_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"> 
+             <a class="image" 
href="images/intellij-idea/110-running-the-app/030-running-unit-tests.png"><img 
src="images/intellij-idea/110-running-the-app/030-running-unit-tests.png" 
alt="030 running unit tests" width="600px"></a> 
+            </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"> 
+             <a class="image" 
href="images/intellij-idea/110-running-the-app/040-running-unit-tests-run-configuration.png"><img
 
src="images/intellij-idea/110-running-the-app/040-running-unit-tests-run-configuration.png"
 alt="040 running unit tests run configuration" width="600px"></a> 
+            </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’ll end up with lots of 
run configurations, all similar).</p> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_running_integ-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’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"> 
+             <a class="image" 
href="images/intellij-idea/110-running-the-app/050-running-integration-tests-run-configuration.png"><img
 
src="images/intellij-idea/110-running-the-app/050-running-integration-tests-run-configuration.png"
 alt="050 running integration tests run configuration" width="600px"></a> 
+            </div> 
+            <div class="title">
+             Figure 31. IntelliJ Running the App - Integration Tests Run 
Configuration
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>Also 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/intellij-idea/400-running-integtests/run-debug-configuration-single-module.png"><img
 
src="images/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> 
+         <div class="sect3"> 
+          <h4 id="__dg_ide_intellij_hints-and-tips">2.1.4. Hints and Tips</h4> 
+          <div class="sect4"> 
+           <h5 
id="__dg_ide_intellij_hints-and-tips_keyboard-cheat-sheets">Keyboard Cheat 
Sheets</h5> 
+           <div class="paragraph"> 
+            <p>You can download 1-page PDFs cheat sheets for IntelliJ’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’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’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="__dg_ide_intellij_hints-and-tips_navigating-around">Navigating Around</h5> 
+           <div class="paragraph"> 
+            <p>For all of the following, you don’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="__dg_ide_intellij_hints-and-tips_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’s <code>ctrl-D</code></p> 
+              <div class="ulist"> 
+               <ul> 
+                <li> <p>if you have some text selected (or even some lines), 
it’ll actually duplicate the entire selection</p> </li> 
+               </ul> 
+              </div> </li> 
+             <li> <p>to delete a line, it’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’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="__dg_ide_intellij_hints-and-tips_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’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="__dg_ide_intellij_hints-and-tips_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"> 
+             <a class="image" 
href="images/intellij-idea/050-some-plugins/020-some-plugins-confirmation.png"><img
 src="images/intellij-idea/050-some-plugins/020-some-plugins-confirmation.png" 
alt="020 some plugins confirmation" width="600px"></a> 
+            </div> 
+            <div class="title">
+             Figure 32. IntelliJ Plugins
+            </div> 
+           </div> 
+           <div class="sect5"> 
+            <h6 
id="__dg_ide_intellij_hints-and-tips_plugins_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’ll see an 
additional "Dependencies" tab:</p> 
+            </div> 
+            <div class="imageblock"> 
+             <div class="content"> 
+              <a class="image" 
href="images/intellij-idea/050-some-plugins/maven-helper/010-dependency-tab.png"><img
 
src="images/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/intellij-idea/050-some-plugins/maven-helper/020-dependency-as-tree.png"><img
 
src="images/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/intellij-idea/050-some-plugins/maven-helper/030-maven-run-goal.png"><img
 
src="images/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/intellij-idea/050-some-plugins/maven-helper/040-maven-quick-run.png"><img
 
src="images/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="__dg_ide_intellij_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’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’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/intellij-idea/060-troubleshooting/010-duplicate-classes.png"><img 
src="images/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="../dg/dg.html#__dg_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="__dg_ide_intellij_advanced">2.1.5. Faster turnaround 
times</h4> 
+          <div class="paragraph"> 
+           <p>In this section are several options that will reduce the time it 
takes between making a source code edit and seeing the results in the running 
app. code/build/deploy/review feedback loop.</p> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_advanced_gradle-compile-enhance">Using 
Grade to compile/enhance</h5> 
+           <div class="paragraph"> 
+            <p>Running an Apache Isis application requires that the 
DataNucleus enhancer runs on the compiled bytecode. As described <a 
href="../dg/dg.html#__dg_ide_intellij_running_the-app">above</a>, the 
recommended way to do this with IntelliJ is to use a Run configuration that 
runs the enhancer goal prior to launch.</p> 
+           </div> 
+           <div class="paragraph"> 
+            <p>Alternative, you can use the following 
<code>build.gradle</code> script in your <code>dom</code> module:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="title">
+             <code>build.gradle</code>
+            </div> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code data-lang="groovy">apply 
<span class="key">plugin</span>: <span class="string"><span 
class="delimiter">'</span><span class="content">java</span><span 
class="delimiter">'</span></span>
+apply <span class="key">plugin</span>: <span class="string"><span 
class="delimiter">'</span><span class="content">tangram.tools</span><span 
class="delimiter">'</span></span>
+sourceCompatibility = <span class="float">1.8</span>
+targetCompatibility = <span class="float">1.8</span>
+version = (<span class="keyword">new</span> XmlParser()).parse(<span 
class="string"><span class="delimiter">'</span><span 
class="content">pom.xml</span><span 
class="delimiter">'</span></span>).parent.version.text()
+buildscript {
+  repositories {
+    maven { url <span class="string"><span class="delimiter">"</span><span 
class="content">http://oss.jfrog.org/artifactory/oss-snapshot-local</span><span 
class="delimiter">"</span></span> }
+    jcenter()
+  }
+  dependencies {
+    classpath <span class="string"><span class="delimiter">'</span><span 
class="content">tangram:gradle-plugin:1.1.2</span><span 
class="delimiter">'</span></span>
+  }
+}
+repositories {
+    mavenLocal()
+    maven { url <span class="string"><span class="delimiter">"</span><span 
class="content">http://oss.jfrog.org/artifactory/oss-snapshot-local</span><span 
class="delimiter">"</span></span> }
+    jcenter()
+}
+dependencies {
+    compile <span class="key">group</span>: <span class="string"><span 
class="delimiter">'</span><span 
class="content">org.apache.isis.core</span><span 
class="delimiter">'</span></span>, <span class="key">name</span>: <span 
class="string"><span class="delimiter">'</span><span 
class="content">isis-core-applib</span><span class="delimiter">'</span></span>, 
<span class="key">version</span>: version
+}
+task copyClasses &lt;&lt; {
+    copy {
+        from <span class="string"><span class="delimiter">'</span><span 
class="content">build/classes/main</span><span class="delimiter">'</span></span>
+        into <span class="string"><span class="delimiter">'</span><span 
class="content">target/classes</span><span class="delimiter">'</span></span>
+    }
+}</code></pre> 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>The script is intended to be in the background as a daemon 
while editing/developing; whenever a change is made to any source code, gradle 
will automatically compile <em>and</em> enhance the code. In this way it 
eliminates the need to start up Maven and run the enhancer goal.</p> 
+           </div> 
+           <div class="paragraph"> 
+            <p>To use, you must disable the IntelliJ’s automatic building of 
the 'dom' project. This is done using: <code>File &gt; Settings &gt; Build, 
Execution, Deployment &gt; Compiler &gt; Excludes</code>, and then exclude the 
<code>…​/dom/src/main/java</code> directory:</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/070-advanced/002-compiler-exclude.png"><img 
src="images/intellij-idea/070-advanced/002-compiler-exclude.png" alt="002 
compiler exclude" width="800px"></a> 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>The script can be run in the background using:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code data-lang="bash">gradle -t 
--offline &amp;</code></pre> 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>from the command line (in the <code>dom</code> module).</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/070-advanced/004-gradle-output.png"><img 
src="images/intellij-idea/070-advanced/004-gradle-output.png" alt="004 gradle 
output" width="600px"></a> 
+            </div> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_advanced_gradle-liveReload">Using Gradle 
for liveReload</h5> 
+           <div class="paragraph"> 
+            <p>Similarly, gradle can be run to reduce the turn-around time 
when tweaking the UI (defined by the <a 
href="../ugvw/ugvw.html#_ugvw_layout_file-based"><code>*.layout.xml</code></a> 
file for each domain class), when the app is running.</p> 
+           </div> 
+           <div class="paragraph"> 
+            <p>The framework will automatically notice any changes to 
<code>.layout.xml</code> files, but these are read from the the classpath (the 
<code>target/classes</code> directory), not the source path. With IntelliJ 
these can be copied over manually by invoking <code>Run &gt; Reload Changed 
Classes</code>. Once the browser is refreshed, the new layout will be 
rendered.</p> 
+           </div> 
+           <div class="admonitionblock note"> 
+            <table> 
+             <tbody>
+              <tr> 
+               <td class="icon"> <i class="fa icon-note" title="Note"></i> 
</td> 
+               <td class="content"> 
+                <div class="paragraph"> 
+                 <p>We’ve occasionally noticed that this interferes with 
Wicket’s own javascript - switching tabs becomes unresponsive. The 
work-around is just to reload the page.</p> 
+                </div> </td> 
+              </tr> 
+             </tbody>
+            </table> 
+           </div> 
+           <div class="paragraph"> 
+            <p>To reduce the turn-around time there are therefore two steps to 
be automated:</p> 
+           </div> 
+           <div class="ulist"> 
+            <ul> 
+             <li> <p>the copying of the <code>.layout.xml</code> files over to 
the <code>target/classes</code> directory</p> </li> 
+             <li> <p>the triggering of a page refresh by the browser.</p> 
</li> 
+            </ul> 
+           </div> 
+           <div class="paragraph"> 
+            <p>The <code>layouts.gradle</code> script takes care of the first 
of these; whenever a change is made to any <code>.layout.xml</code> file, 
gradle will automatically copy over the file to the <code>target/classes</code> 
directory:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="title">
+             <code>layouts.gradle</code>
+            </div> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code 
data-lang="groovy">defaultTasks <span class="string"><span 
class="delimiter">'</span><span class="content">copyLayouts</span><span 
class="delimiter">'</span></span>
+task copyLayouts(<span class="key">type</span>:Copy) {
+    from <span class="string"><span class="delimiter">'</span><span 
class="content">src/main/java</span><span class="delimiter">'</span></span>
+    into <span class="string"><span class="delimiter">'</span><span 
class="content">target/classes</span><span class="delimiter">'</span></span>
+    include <span class="string"><span class="delimiter">'</span><span 
class="content">**/*.layout.xml</span><span class="delimiter">'</span></span>
+}</code></pre> 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>Similarly, the <code>liveReload.gradle</code> script takes care 
of the browser refresh:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="title">
+             <code>liveReload.gradle</code>
+            </div> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code 
data-lang="groovy">defaultTasks <span class="string"><span 
class="delimiter">'</span><span class="content">liveReload</span><span 
class="delimiter">'</span></span>
+buildscript {
+    repositories {
+        jcenter()
+    }
+    dependencies {
+        classpath <span class="string"><span class="delimiter">'</span><span 
class="content">org.kordamp.gradle:livereload-gradle-plugin:0.2.1</span><span 
class="delimiter">'</span></span>
+    }
+}
+apply <span class="key">plugin</span>: <span class="string"><span 
class="delimiter">'</span><span 
class="content">org.kordamp.gradle.livereload</span><span 
class="delimiter">'</span></span>
+liveReload {
+    docRoot <span class="keyword">new</span> <span 
class="predefined-type">File</span>(<span class="string"><span 
class="delimiter">'</span><span class="content">target/classes</span><span 
class="delimiter">'</span></span>).canonicalPath
+}</code></pre> 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>These scripts can be run together using:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code data-lang="bash">gradle -t 
--offline -b layouts.gradle &amp;
+gradle -t --offline -b liveReload.gradle &amp;</code></pre> 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>from the command line (in the <code>dom</code> module):</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/070-advanced/005-gradle-output.png"><img 
src="images/intellij-idea/070-advanced/005-gradle-output.png" alt="005 gradle 
output" width="600px"></a> 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>Live reload also requires that the 
<code>isis.viewer.wicket.liveReloadUrl</code> configuration property is set 
appropriately:</p> 
+           </div> 
+           <div class="listingblock"> 
+            <div class="title">
+             <code>viewer_wicket.properties</code>
+            </div> 
+            <div class="content"> 
+             <pre class="CodeRay highlight"><code 
data-lang="ini">isis.viewer.wicket.liveReloadUrl=http://localhost:35729/livereload.js?snipver=1</code></pre>
 
+            </div> 
+           </div> 
+           <div class="paragraph"> 
+            <p>You can confirm the script is loaded correctly using the web 
browser’s development tools, eg:</p> 
+           </div> 
+           <div class="imageblock"> 
+            <div class="content"> 
+             <a class="image" 
href="images/intellij-idea/070-advanced/006-livereload-js.png"><img 
src="images/intellij-idea/070-advanced/006-livereload-js.png" alt="006 
livereload js" width="800px"></a> 
+            </div> 
+           </div> 
+          </div> 
+          <div class="sect4"> 
+           <h5 id="__dg_ide_intellij_advanced_dcevm">Setting up DCEVM</h5> 
+           <div class="paragraph"> 
+            <p><a href="http://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> 
+             <tbody>
+              <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> 
+             </tbody>
+            </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/intellij-idea/070-advanced/010-dcevm-list-of-found-jdk-installations.png"><img
 
src="images/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/intellij-idea/070-advanced/020-dcevm-once-installed.png"><img 
src="images/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/intellij-idea/070-advanced/030-dcevm-intellij-project-structure.png"><img
 
src="images/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/intellij-idea/070-advanced/040-dcevm-run-configuration.png"><img 
src="images/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.</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="_dg_ide_eclipse">2.2. Developing using Eclipse</h3>
+         <div class="btn-group" style="float: right; font-size: small; 
padding: 6px; margin-top: -55px; ">
+          <button type="button" class="btn btn-xs btn-default" 
onclick="window.location.href=&quot;https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_eclipse.adoc&quot;";><i
 class="fa fa-pencil-square-o"></i>&nbsp;Edit</button>
+          <button type="button" class="btn btn-xs btn-default dropdown-toggle" 
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span 
class="caret"></span><span class="sr-only">Toggle Dropdown</span></button>
+          <ul class="dropdown-menu">
+           <li><a 
href="https://github.com/apache/isis/edit/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_eclipse.adoc";
 target="_blank"><i class="fa fa-pencil-square-o fa-fw" 
aria-hidden="true"></i>&nbsp; Edit</a></li>
+           <li><a 
href="https://github.com/apache/isis/commits/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_eclipse.adoc";
 target="_blank"><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i>&nbsp; 
History</a></li>
+           <li><a 
href="https://github.com/apache/isis/raw/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_eclipse.adoc";
 target="_blank"><i class="fa fa-file-text-o fa-fw" 
aria-hidden="true"></i>&nbsp; Raw</a></li>
+           <li><a 
href="https://github.com/apache/isis/blame/master/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_eclipse.adoc";
 target="_blank"><i class="fa fa-hand-o-right fa-fw" 
aria-hidden="true"></i>&nbsp; Blame</a></li>
+          </ul>
+         </div> 
+         <div class="admonitionblock note"> 
+          <table> 
+           <tbody>
+            <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> 
+           </tbody>
+          </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’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 en

<TRUNCATED>

Reply via email to