You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jo...@apache.org on 2020/06/18 10:35:42 UTC

[isis] 01/03: ISIS-2374 Support Gradle Builds - initial

This is an automated email from the ASF dual-hosted git repository.

joergrade pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit fce21f85b2aaa70d4dcccb85766e92eeef9a0d30
Author: Jörg Rade <jo...@kuehne-nagel.com>
AuthorDate: Wed Jun 10 18:34:16 2020 +0200

    ISIS-2374 Support Gradle Builds - initial
---
 api/applib/build.gradle                            |  24 ++
 api/build.gradle                                   |   6 +
 api/gradle/wrapper/gradle-wrapper.properties       |   5 +
 api/gradlew                                        | 172 +++++++++++++
 api/gradlew.bat                                    |  84 +++++++
 api/schema/build.gradle                            |  12 +
 api/settings.gradle                                |  10 +
 build.gradle                                       |  27 +++
 .../gradle/wrapper/gradle-wrapper.properties       |   5 +
 core/codegen-bytebuddy/build.gradle                |  17 ++
 core/commons/build.gradle                          |  26 ++
 core/config/build.gradle                           |  17 ++
 core/internaltestsupport/build.gradle              |  42 ++++
 core/metamodel/build.gradle                        |  32 +++
 core/runtime/build.gradle                          |  17 ++
 core/runtimeservices/build.gradle                  |  16 ++
 core/security/build.gradle                         |  18 ++
 core/webapp/build.gradle                           |  18 ++
 examples/demo/domain/build.gradle                  |   2 +
 examples/demo/wicket/build.gradle                  |   5 +
 examples/smoketests/build.gradle                   |  22 ++
 extensions/core/flyway/impl/build.gradle           |  15 ++
 extensions/core/model-annotation/build.gradle      |  14 ++
 extensions/security/secman/api/build.gradle        |   8 +
 .../secman/encryption-jbcrypt/build.gradle         |  14 ++
 extensions/security/secman/model/build.gradle      |  13 +
 .../security/secman/persistence-jdo/build.gradle   |  16 ++
 .../security/secman/shiro-realm/build.gradle       |  14 ++
 .../security/shiro-realm-ldap/impl/build.gradle    |  12 +
 extensions/vro/cors/impl/build.gradle              |  14 ++
 extensions/vw/exceldownload/ui/build.gradle        |  16 ++
 extensions/vw/fullcalendar/applib/build.gradle     |  12 +
 extensions/vw/fullcalendar/ui/build.gradle         |  13 +
 extensions/vw/pdfjs/applib/build.gradle            |  12 +
 extensions/vw/pdfjs/metamodel/build.gradle         |  13 +
 extensions/vw/pdfjs/ui/build.gradle                |  12 +
 gradle/wrapper/gradle-wrapper.properties           |   6 +
 gradlew                                            | 172 +++++++++++++
 gradlew.bat                                        |  84 +++++++
 incubator/mappings/microprofile/build.gradle       |  18 ++
 incubator/viewers/build.gradle                     |   6 +
 .../gradle/wrapper/gradle-wrapper.properties       |   5 +
 incubator/viewers/gradlew                          | 172 +++++++++++++
 incubator/viewers/gradlew.bat                      |  84 +++++++
 incubator/viewers/settings.gradle                  |  10 +
 incubator/viewers/vaadin/model/build.gradle        |  16 ++
 incubator/viewers/vaadin/ui/build.gradle           |  17 ++
 incubator/viewers/vaadin/viewer/build.gradle       |  11 +
 legacy/extensions/core/applib/build.gradle         |  17 ++
 legacy/extensions/core/commons/build.gradle        |  17 ++
 legacy/extensions/core/metamodel/build.gradle      |  20 ++
 legacy/extensions/core/runtime/build.gradle        |  20 ++
 legacy/mappings/restclient/build.gradle            |  14 ++
 mappings/jaxrsclient/api/build.gradle              |  11 +
 mappings/restclient/api/build.gradle               |  13 +
 persistence/jdo/applib/build.gradle                |  14 ++
 persistence/jdo/datanucleus-5/build.gradle         |  22 ++
 persistence/jpa/applib/build.gradle                |  12 +
 persistence/jpa/model/build.gradle                 |  17 ++
 security/bypass/build.gradle                       |  11 +
 security/keycloak/build.gradle                     |  14 ++
 security/shiro/build.gradle                        |  18 ++
 settings.gradle                                    | 268 +++++++++++++++++++++
 subdomains/base/applib/build.gradle                |  17 ++
 subdomains/docx/applib/build.gradle                |  11 +
 subdomains/excel/applib/build.gradle               |  18 ++
 subdomains/excel/fixture/build.gradle              |  15 ++
 subdomains/excel/integtests/build.gradle           |  15 ++
 subdomains/excel/testing/build.gradle              |  11 +
 subdomains/freemarker/applib/build.gradle          |  11 +
 subdomains/ognl/applib/build.gradle                |  11 +
 subdomains/pdfbox/applib/build.gradle              |  11 +
 subdomains/spring/applib/build.gradle              |  13 +
 subdomains/xdocreport/applib/build.gradle          |  18 ++
 subdomains/zip/applib/build.gradle                 |  12 +
 testing/fakedata/applib/build.gradle               |  16 ++
 testing/fakedata/fixtures/build.gradle             |  15 ++
 testing/fakedata/integtests/build.gradle           |  13 +
 testing/fixtures/applib/build.gradle               |  17 ++
 testing/h2console/ui/build.gradle                  |  12 +
 testing/hsqldbmgr/ui/build.gradle                  |  12 +
 testing/integtestsupport/applib/build.gradle       |  28 +++
 testing/specsupport/applib/build.gradle            |  17 ++
 testing/unittestsupport/applib/build.gradle        |  33 +++
 valuetypes/asciidoc/applib/build.gradle            |  12 +
 valuetypes/asciidoc/ui/vaadin/build.gradle         |  12 +
 valuetypes/asciidoc/ui/wicket/build.gradle         |  12 +
 valuetypes/markdown/applib/build.gradle            |  12 +
 valuetypes/markdown/ui/build.gradle                |  17 ++
 valuetypes/sse/applib/build.gradle                 |  14 ++
 valuetypes/sse/metamodel/build.gradle              |  12 +
 valuetypes/sse/ui/build.gradle                     |  15 ++
 viewers/common/build.gradle                        |  14 ++
 viewers/restfulobjects/applib/build.gradle         |  14 ++
 .../restfulobjects/jaxrs-resteasy-4/build.gradle   |  21 ++
 viewers/restfulobjects/rendering/build.gradle      |  13 +
 viewers/restfulobjects/viewer/build.gradle         |  17 ++
 viewers/wicket/model/build.gradle                  |  21 ++
 viewers/wicket/ui/build.gradle                     |  80 ++++++
 viewers/wicket/viewer/build.gradle                 |  38 +++
 100 files changed, 2514 insertions(+)

diff --git a/api/applib/build.gradle b/api/applib/build.gradle
new file mode 100644
index 0000000..445b219
--- /dev/null
+++ b/api/applib/build.gradle
@@ -0,0 +1,24 @@
+description = 'Apache Isis Core - AppLib'
+apply plugin: 'war'
+dependencies {
+    compile project(':isis-parent:isis-schema')
+    compile group: 'javax', name: 'javaee-api', version: '8.0'
+    compile group: 'com.google.code.findbugs', name: 'annotations', version: '2.0.1'
+    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
+    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2'
+    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.2'
+    testCompile group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.5.2'
+    testCompile group: 'org.jmock', name: 'jmock', version: '2.11.0'
+    testCompile(group: 'org.jmock', name: 'jmock-junit4', version: '2.11.0') {
+        exclude(module: 'junit-dep')
+        exclude(module: 'byte-buddy')
+    }
+    testCompile group: 'org.assertj', name: 'assertj-core', version: '3.13.2'
+    providedCompile project(':isis-parent:isis:isis-core-commons')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/api/build.gradle b/api/build.gradle
new file mode 100644
index 0000000..6819940
--- /dev/null
+++ b/api/build.gradle
@@ -0,0 +1,6 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ *
+ * This is a general purpose Gradle build.
+ * Learn how to create Gradle builds at https://guides.gradle.org/creating-new-gradle-builds/
+ */
diff --git a/api/gradle/wrapper/gradle-wrapper.properties b/api/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..9492014
--- /dev/null
+++ b/api/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/api/gradlew b/api/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/api/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/api/gradlew.bat b/api/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/api/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/api/schema/build.gradle b/api/schema/build.gradle
new file mode 100644
index 0000000..9bfca44
--- /dev/null
+++ b/api/schema/build.gradle
@@ -0,0 +1,12 @@
+description = 'Apache Isis Core - Schemas'
+dependencies {
+    compile group: 'org.springframework', name: 'spring-context', version: '5.2.6.RELEASE'
+    compile group: 'joda-time', name: 'joda-time', version: '2.10.6'
+    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/api/settings.gradle b/api/settings.gradle
new file mode 100644
index 0000000..284e182
--- /dev/null
+++ b/api/settings.gradle
@@ -0,0 +1,10 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ *
+ * The settings file is used to specify which projects to include in your build.
+ *
+ * Detailed information about configuring a multi-project build in Gradle can be found
+ * in the user guide at https://docs.gradle.org/4.10.2/userguide/multi_project_builds.html
+ */
+
+rootProject.name = 'api'
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..deaeac0
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,27 @@
+allprojects {
+    apply plugin: 'maven'
+
+    group = 'org.apache.isis'
+    version = '2.0.0-SNAPSHOT'
+}
+
+subprojects {
+    apply plugin: 'java'
+    sourceCompatibility = 1.8
+    targetCompatibility = 1.8
+
+    repositories {
+        mavenCentral()
+        jcenter()
+
+        maven { url "http://repo.maven.apache.org/maven2" }
+        maven { url "https://repo.maven.apache.org/maven2" }
+        maven { url "https://repository.apache.org/" }
+        maven { url "https://repository.jboss.org/nexus/content/groups/public-jboss/" }
+        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
+        maven { url "https://repository.apache.org/snapshots" }
+        maven { url "https://repo1.maven.org/maven2" }
+        mavenLocal()
+    }
+
+}
diff --git a/core-parent/gradle/wrapper/gradle-wrapper.properties b/core-parent/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..9492014
--- /dev/null
+++ b/core-parent/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/core/codegen-bytebuddy/build.gradle b/core/codegen-bytebuddy/build.gradle
new file mode 100644
index 0000000..aa5c842
--- /dev/null
+++ b/core/codegen-bytebuddy/build.gradle
@@ -0,0 +1,17 @@
+description = 'Apache Isis Core - Code Gen (ByteBuddy)'
+apply plugin: 'war'
+dependencies {
+    compile group: 'net.bytebuddy', name: 'byte-buddy', version: '1.10.10'
+    compile group: 'org.objenesis', name: 'objenesis', version: '2.6'
+    compile project(':isis-parent:isis:isis-core-commons')
+    testCompile(group: 'org.jmock', name: 'jmock-junit4', version: '2.11.0') {
+        exclude(module: 'junit-dep')
+        exclude(module: 'byte-buddy')
+    }
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/core/commons/build.gradle b/core/commons/build.gradle
new file mode 100644
index 0000000..a7f5061
--- /dev/null
+++ b/core/commons/build.gradle
@@ -0,0 +1,26 @@
+description = 'Apache Isis Core - Commons'
+dependencies {
+    compile group: 'javax', name: 'javaee-api', version: '8.0'
+    compile group: 'com.google.code.findbugs', name: 'annotations', version: '2.0.1'
+    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.10.4'
+    compile group: 'org.springframework', name: 'spring-context', version: '5.2.6.RELEASE'
+    compile group: 'org.springframework', name: 'spring-tx', version: '5.2.6.RELEASE'
+    compile(group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.2.7.RELEASE') {
+        exclude(module: 'validation-api')
+        exclude(module: 'spring-boot-starter-logging')
+    }
+    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-log4j2', version: '2.2.7.RELEASE') {
+        exclude(module: 'slf4j-api')
+    }
+    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
+    compile group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
+    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2'
+    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.2'
+    testCompile group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.5.2'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/core/config/build.gradle b/core/config/build.gradle
new file mode 100644
index 0000000..cf74bfa
--- /dev/null
+++ b/core/config/build.gradle
@@ -0,0 +1,17 @@
+description = 'Apache Isis Core - Configuration'
+apply plugin: 'war'
+
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-commons')
+    compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.19.Final'
+    compile group: 'org.springframework.boot', name: 'spring-boot-configuration-processor', version: '2.2.7.RELEASE'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/core/internaltestsupport/build.gradle b/core/internaltestsupport/build.gradle
new file mode 100644
index 0000000..0c3e4da
--- /dev/null
+++ b/core/internaltestsupport/build.gradle
@@ -0,0 +1,42 @@
+description = 'Apache Isis Core - Unit Test Support'
+apply plugin: 'war'
+
+dependencies {
+    compile project(':isis-parent:isis:isis-core-commons')
+    compile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2'
+    compile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.2'
+    compile group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.5.2'
+    compile group: 'org.assertj', name: 'assertj-core', version: '3.13.2'
+    compile group: 'net.bytebuddy', name: 'byte-buddy', version: '1.10.10'
+    compile(group: 'org.mockito', name: 'mockito-core', version: '3.1.0') {
+        exclude(module: 'byte-buddy')
+        exclude(module: 'byte-buddy-agent')
+    }
+    compile project(':isis-parent:isis:isis-core-codegen-bytebuddy')
+    compile group: 'org.hamcrest', name: 'hamcrest-library', version: '2.1'
+    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
+    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.2.7.RELEASE') {
+        exclude(module: 'asm')
+        exclude(module: 'spring-test')
+        exclude(module: 'spring-core')
+        exclude(module: 'spring-boot-starter-logging')
+        exclude(module: 'slf4j-api')
+    }
+    compile group: 'org.springframework', name: 'spring-test', version: '5.2.6.RELEASE'
+    compile group: 'org.picocontainer', name: 'picocontainer', version: '2.15'
+    compile(group: 'org.jmock', name: 'jmock', version: '2.11.0') {
+        exclude(module: 'asm')
+    }
+    compile(group: 'org.jmock', name: 'jmock-junit4', version: '2.11.0') {
+        exclude(module: 'junit-dep')
+        exclude(module: 'asm')
+        exclude(module: 'byte-buddy')
+    }
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/core/metamodel/build.gradle b/core/metamodel/build.gradle
new file mode 100644
index 0000000..476ed5c
--- /dev/null
+++ b/core/metamodel/build.gradle
@@ -0,0 +1,32 @@
+description = 'Apache Isis Core - MetaModel'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-config')
+    compile project(':isis-parent:isis:isis-core-security')
+    compile(group: 'io.swagger', name: 'swagger-core', version: '1.6.0') {
+        exclude(module: 'guava')
+        exclude(module: 'validation-api')
+        exclude(module: 'snakeyaml')
+        exclude(module: 'slf4j-api')
+        exclude(module: 'commons-lang3')
+    }
+    compile project(':isis-parent:isis:isis-core-commons')
+    testCompile project(':isis-parent:isis:isis-core-config')
+    testCompile project(':isis-parent:isis-applib')
+    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2'
+    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.2'
+    testCompile group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.5.2'
+    testCompile group: 'org.jmock', name: 'jmock', version: '2.11.0'
+    testCompile(group: 'org.jmock', name: 'jmock-junit4', version: '2.11.0') {
+        exclude(module: 'junit-dep')
+        exclude(module: 'byte-buddy')
+    }
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.19.Final'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/core/runtime/build.gradle b/core/runtime/build.gradle
new file mode 100644
index 0000000..b053a1c
--- /dev/null
+++ b/core/runtime/build.gradle
@@ -0,0 +1,17 @@
+description = 'Apache Isis Core - Runtime'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-metamodel')
+    compile(group: 'org.apache.commons', name: 'commons-email', version: '1.5') {
+        exclude(module: 'javax.mail')
+        exclude(module: 'activation')
+    }
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis-applib')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/core/runtimeservices/build.gradle b/core/runtimeservices/build.gradle
new file mode 100644
index 0000000..aada5c1
--- /dev/null
+++ b/core/runtimeservices/build.gradle
@@ -0,0 +1,16 @@
+description = 'Apache Isis Core - Runtime Services'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-runtime')
+    compile project(':isis-parent:isis:isis-core-codegen-bytebuddy')
+    compile group: 'org.hsqldb', name: 'hsqldb', version: '2.5.0'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis:isis-core-config')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile project(':isis-parent:isis:isis-core-runtime')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/core/security/build.gradle b/core/security/build.gradle
new file mode 100644
index 0000000..6276916
--- /dev/null
+++ b/core/security/build.gradle
@@ -0,0 +1,18 @@
+description = 'Apache Isis Core - Security'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-config')
+    testCompile(group: 'org.jmock', name: 'jmock-junit4', version: '2.11.0') {
+        exclude(module: 'junit-dep')
+    }
+    testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '2.1'
+    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2'
+    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.2'
+    testCompile group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.5.2'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/core/webapp/build.gradle b/core/webapp/build.gradle
new file mode 100644
index 0000000..2c503d9
--- /dev/null
+++ b/core/webapp/build.gradle
@@ -0,0 +1,18 @@
+description = 'Apache Isis Core - WebApp'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-runtime')
+    compile group: 'org.springframework', name: 'spring-web', version: '5.2.6.RELEASE'
+    compile group: 'org.springframework.boot', name: 'spring-boot-actuator', version: '2.2.7.RELEASE'
+    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version: '2.2.7.RELEASE') {
+        exclude(module: 'spring-boot-starter')
+    }
+    compile group: 'org.springframework.boot', name: 'spring-boot', version: '2.2.7.RELEASE'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis:isis-core-runtime')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/examples/demo/domain/build.gradle b/examples/demo/domain/build.gradle
new file mode 100644
index 0000000..9758438
--- /dev/null
+++ b/examples/demo/domain/build.gradle
@@ -0,0 +1,2 @@
+group = 'org.apache.isis.examples.apps'
+description = 'Apache Isis App - Demo (Domain)'
diff --git a/examples/demo/wicket/build.gradle b/examples/demo/wicket/build.gradle
new file mode 100644
index 0000000..40f451d
--- /dev/null
+++ b/examples/demo/wicket/build.gradle
@@ -0,0 +1,5 @@
+group = 'org.apache.isis.examples.apps'
+description = 'Apache Isis App - Demo (Wicket)'
+dependencies {
+  compile project(':isis-app-starter-parent:demo-parent:demo-domain')
+}
diff --git a/examples/smoketests/build.gradle b/examples/smoketests/build.gradle
new file mode 100644
index 0000000..e433369
--- /dev/null
+++ b/examples/smoketests/build.gradle
@@ -0,0 +1,22 @@
+group = 'org.apache.isis.app'
+description = 'Apache Isis App - Smoketests'
+dependencies {
+    compile project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-webapp')
+    compile project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-jdk11')
+    compile project(':isis-parent:isis:isis-security-shiro')
+    compile project(':isis-parent:isis:isis-testing:isis-testing-fixtures:isis-testing-fixtures-applib')
+    compile project(':isis-parent:isis:isis-mappings:isis-mappings-restclient-api')
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-modelannotation')
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-model')
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-encryption-jbcrypt')
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-persistence-jdo')
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-shiro-realm')
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-shiro-realm-ldap:isis-extensions-shiro-realm-ldap-impl')
+    compile group: 'org.springframework.data', name: 'spring-data-jpa', version: '2.2.7.RELEASE'
+    testCompile group: 'org.glassfish.jersey.ext', name: 'jersey-spring5', version: '2.29.1'
+    testCompile group: 'org.glassfish', name: 'javax.json', version: '1.1.4'
+    testCompile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.moxy', version: '2.7.5'
+    testCompile project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-integtests')
+    testCompile group: 'org.apache.directory.server', name: 'apacheds-test-framework', version: '2.0.0.AM25'
+    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
+}
diff --git a/extensions/core/flyway/impl/build.gradle b/extensions/core/flyway/impl/build.gradle
new file mode 100644
index 0000000..c252d38
--- /dev/null
+++ b/extensions/core/flyway/impl/build.gradle
@@ -0,0 +1,15 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Flyway Impl'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-config')
+    compile group: 'org.flywaydb', name: 'flyway-core', version: '6.0.8'
+    compile group: 'org.springframework', name: 'spring-context', version: '5.2.6.RELEASE'
+    compile group: 'org.springframework.boot', name: 'spring-boot-autoconfigure', version: '2.2.7.RELEASE'
+    compile group: 'org.springframework', name: 'spring-jdbc', version: '5.2.6.RELEASE'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/core/model-annotation/build.gradle b/extensions/core/model-annotation/build.gradle
new file mode 100644
index 0000000..047435a
--- /dev/null
+++ b/extensions/core/model-annotation/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - @Model'
+apply plugin: 'war'
+dependencies {
+  compile project(':isis-parent:isis:isis-core-metamodel')
+  providedCompile project(':isis-parent:isis:isis-core-webapp')
+  providedCompile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+}
+
+task packageTests(type: Jar) {
+  from sourceSets.test.output
+  classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/security/secman/api/build.gradle b/extensions/security/secman/api/build.gradle
new file mode 100644
index 0000000..d547ff2
--- /dev/null
+++ b/extensions/security/secman/api/build.gradle
@@ -0,0 +1,8 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Sec Man API'
+
+task packageTests(type: Jar) {
+  from sourceSets.test.output
+  classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/security/secman/encryption-jbcrypt/build.gradle b/extensions/security/secman/encryption-jbcrypt/build.gradle
new file mode 100644
index 0000000..0254f1d
--- /dev/null
+++ b/extensions/security/secman/encryption-jbcrypt/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Sec Man Encryption (Using jbcrypt)'
+apply plugin: 'war'
+dependencies {
+    compile group: 'org.mindrot', name: 'jbcrypt', version: '0.4'
+    providedCompile project(':isis-parent:isis:isis-core-runtime')
+    providedCompile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-api')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/security/secman/model/build.gradle b/extensions/security/secman/model/build.gradle
new file mode 100644
index 0000000..59fe09c
--- /dev/null
+++ b/extensions/security/secman/model/build.gradle
@@ -0,0 +1,13 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Sec Man Model'
+apply plugin: 'war'
+dependencies {
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-api')
+    providedCompile project(':isis-parent:isis:isis-core-runtime')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/security/secman/persistence-jdo/build.gradle b/extensions/security/secman/persistence-jdo/build.gradle
new file mode 100644
index 0000000..b2f9bf3
--- /dev/null
+++ b/extensions/security/secman/persistence-jdo/build.gradle
@@ -0,0 +1,16 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Sec Man Persistence (Using JDO)'
+apply plugin: 'war'
+dependencies {
+    compile project(':isis-parent:isis:isis-testing:isis-testing-fixtures:isis-testing-fixtures-applib')
+    providedCompile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-datanucleus5')
+    providedCompile project(':isis-parent:isis:isis-core-runtime')
+    providedCompile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-api')
+    providedCompile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-model')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/security/secman/shiro-realm/build.gradle b/extensions/security/secman/shiro-realm/build.gradle
new file mode 100644
index 0000000..368c528
--- /dev/null
+++ b/extensions/security/secman/shiro-realm/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Sec Man Realm (Using Shiro)'
+apply plugin: 'war'
+dependencies {
+    providedCompile project(':isis-parent:isis:isis-security-shiro')
+    providedCompile project(':isis-parent:isis:isis-core-runtime')
+    providedCompile project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-api')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/security/shiro-realm-ldap/impl/build.gradle b/extensions/security/shiro-realm-ldap/impl/build.gradle
new file mode 100644
index 0000000..33b859c
--- /dev/null
+++ b/extensions/security/shiro-realm-ldap/impl/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Security - Shiro LDAP Realm (impl)'
+dependencies {
+    compile project(':isis-parent:isis:isis-security-shiro')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/vro/cors/impl/build.gradle b/extensions/vro/cors/impl/build.gradle
new file mode 100644
index 0000000..239d674
--- /dev/null
+++ b/extensions/vro/cors/impl/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - CORS (impl)'
+apply plugin: 'war'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-metamodel')
+    compile group: 'org.ebaysf.web', name: 'cors-filter', version: '1.0.1'
+    providedCompile project(':isis-parent:isis:isis-core-webapp')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/vw/exceldownload/ui/build.gradle b/extensions/vw/exceldownload/ui/build.gradle
new file mode 100644
index 0000000..dd88c3d
--- /dev/null
+++ b/extensions/vw/exceldownload/ui/build.gradle
@@ -0,0 +1,16 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Wicket Viewer - Excel Download (ui)'
+apply plugin: 'war'
+dependencies {
+    compile(group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.1') {
+        exclude(module: 'commons-collections4')
+    }
+    compile group: 'org.apache.poi', name: 'poi-ooxml-schemas', version: '4.1.1'
+    providedCompile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/vw/fullcalendar/applib/build.gradle b/extensions/vw/fullcalendar/applib/build.gradle
new file mode 100644
index 0000000..265b79f
--- /dev/null
+++ b/extensions/vw/fullcalendar/applib/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Wicket Viewer - fullcalendar (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile group: 'de.agilecoders.wicket', name: 'wicket-bootstrap-core', version: '2.0.13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/vw/fullcalendar/ui/build.gradle b/extensions/vw/fullcalendar/ui/build.gradle
new file mode 100644
index 0000000..8d4c944
--- /dev/null
+++ b/extensions/vw/fullcalendar/ui/build.gradle
@@ -0,0 +1,13 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Wicket Viewer - fullcalendar (ui)'
+dependencies {
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-fullcalendar:isis-extensions-fullcalendar-applib')
+    compile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+    compile group: 'net.ftlines.wicket-fullcalendar', name: 'wicket-fullcalendar-core', version: '4.2'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/vw/pdfjs/applib/build.gradle b/extensions/vw/pdfjs/applib/build.gradle
new file mode 100644
index 0000000..2b0a23f
--- /dev/null
+++ b/extensions/vw/pdfjs/applib/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Wicket Viewer - pdf.js (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile group: 'de.agilecoders.wicket', name: 'wicket-bootstrap-core', version: '2.0.13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/vw/pdfjs/metamodel/build.gradle b/extensions/vw/pdfjs/metamodel/build.gradle
new file mode 100644
index 0000000..fbda85c
--- /dev/null
+++ b/extensions/vw/pdfjs/metamodel/build.gradle
@@ -0,0 +1,13 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Wicket Viewer - pdf.js (metamodel)'
+dependencies {
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-pdfjs:isis-extensions-pdfjs-applib')
+    compile project(':isis-parent:isis:isis-core-metamodel')
+    compile group: 'de.agilecoders.wicket', name: 'wicket-bootstrap-core', version: '2.0.13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/extensions/vw/pdfjs/ui/build.gradle b/extensions/vw/pdfjs/ui/build.gradle
new file mode 100644
index 0000000..153d0d9
--- /dev/null
+++ b/extensions/vw/pdfjs/ui/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.extensions'
+description = 'Apache Isis Ext - Wicket Viewer - pdf.js (ui)'
+dependencies {
+    compile project(':isis-parent:isis:isis-extensions:isis-extensions-pdfjs:isis-extensions-pdfjs-metamodel')
+    compile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..5fe401e
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Jun 10 10:53:40 CEST 2020
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/incubator/mappings/microprofile/build.gradle b/incubator/mappings/microprofile/build.gradle
new file mode 100644
index 0000000..20c0fa6
--- /dev/null
+++ b/incubator/mappings/microprofile/build.gradle
@@ -0,0 +1,18 @@
+group = 'org.apache.isis.incubator'
+description = 'Apache Isis Inc - MicroProfile Support'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-metamodel')
+    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.2.7.RELEASE') {
+        exclude(module: 'spring-boot-starter-tomcat')
+        exclude(module: 'spring-boot-starter-logging')
+    }
+    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-batch', version: '2.2.7.RELEASE') {
+        exclude(module: 'spring-boot-starter-logging')
+    }
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/incubator/viewers/build.gradle b/incubator/viewers/build.gradle
new file mode 100644
index 0000000..6819940
--- /dev/null
+++ b/incubator/viewers/build.gradle
@@ -0,0 +1,6 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ *
+ * This is a general purpose Gradle build.
+ * Learn how to create Gradle builds at https://guides.gradle.org/creating-new-gradle-builds/
+ */
diff --git a/incubator/viewers/gradle/wrapper/gradle-wrapper.properties b/incubator/viewers/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..9492014
--- /dev/null
+++ b/incubator/viewers/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/incubator/viewers/gradlew b/incubator/viewers/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/incubator/viewers/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/incubator/viewers/gradlew.bat b/incubator/viewers/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/incubator/viewers/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/incubator/viewers/settings.gradle b/incubator/viewers/settings.gradle
new file mode 100644
index 0000000..40d0856
--- /dev/null
+++ b/incubator/viewers/settings.gradle
@@ -0,0 +1,10 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ *
+ * The settings file is used to specify which projects to include in your build.
+ * 
+ * Detailed information about configuring a multi-project build in Gradle can be found
+ * in the user guide at https://docs.gradle.org/4.10.2/userguide/multi_project_builds.html
+ */
+
+rootProject.name = 'viewers'
diff --git a/incubator/viewers/vaadin/model/build.gradle b/incubator/viewers/vaadin/model/build.gradle
new file mode 100644
index 0000000..b244786
--- /dev/null
+++ b/incubator/viewers/vaadin/model/build.gradle
@@ -0,0 +1,16 @@
+group = 'org.apache.isis.incubator.viewer'
+description = 'Apache Isis Inc - Viewer Vaadin (Model)'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-webapp')
+    compile project(':isis-parent:isis:isis-viewer-common')
+    compile group: 'com.vaadin', name: 'vaadin', version: '14.2.0'
+    compile group: 'org.webjars.bowergithub.osano', name: 'cookieconsent', version: '3.1.0'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/incubator/viewers/vaadin/ui/build.gradle b/incubator/viewers/vaadin/ui/build.gradle
new file mode 100644
index 0000000..7e1cab1
--- /dev/null
+++ b/incubator/viewers/vaadin/ui/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.incubator.viewer'
+description = 'Apache Isis Inc - Viewer Vaadin (UI Components)'
+dependencies {
+    compile project(':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-model')
+    compile project(':isis-parent:isis:isis-core-runtimeservices')
+    compile group: 'com.vaadin', name: 'vaadin', version: '14.2.0'
+    compile(group: 'com.vaadin', name: 'vaadin-spring', version: '12.2.0') {
+        exclude(module: 'commons-fileupload')
+    }
+    compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.4'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/incubator/viewers/vaadin/viewer/build.gradle b/incubator/viewers/vaadin/viewer/build.gradle
new file mode 100644
index 0000000..16f663c
--- /dev/null
+++ b/incubator/viewers/vaadin/viewer/build.gradle
@@ -0,0 +1,11 @@
+group = 'org.apache.isis.incubator.viewer'
+description = 'Apache Isis Inc - Viewer Vaadin (Viewer)'
+dependencies {
+    compile project(':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-ui')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/legacy/extensions/core/applib/build.gradle b/legacy/extensions/core/applib/build.gradle
new file mode 100644
index 0000000..3fd0ba3
--- /dev/null
+++ b/legacy/extensions/core/applib/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.legacy'
+description = 'Apache Isis Legacy - Applib'
+apply plugin: 'war'
+dependencies {
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-runtime')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+    providedCompile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/legacy/extensions/core/commons/build.gradle b/legacy/extensions/core/commons/build.gradle
new file mode 100644
index 0000000..f2bcaa1
--- /dev/null
+++ b/legacy/extensions/core/commons/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.legacy'
+description = 'Apache Isis Legacy - Commons'
+apply plugin: 'war'
+dependencies {
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-runtime')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+    providedCompile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/legacy/extensions/core/metamodel/build.gradle b/legacy/extensions/core/metamodel/build.gradle
new file mode 100644
index 0000000..1bf76a0
--- /dev/null
+++ b/legacy/extensions/core/metamodel/build.gradle
@@ -0,0 +1,20 @@
+group = 'org.apache.isis.legacy'
+description = 'Apache Isis Legacy - Metamodel'
+apply plugin: 'war'
+dependencies {
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-legacy:isis-legacy-applib')
+    compile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile project(':isis-parent:isis:isis-core-config')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+    providedCompile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/legacy/extensions/core/runtime/build.gradle b/legacy/extensions/core/runtime/build.gradle
new file mode 100644
index 0000000..e3a4802
--- /dev/null
+++ b/legacy/extensions/core/runtime/build.gradle
@@ -0,0 +1,20 @@
+group = 'org.apache.isis.legacy'
+description = 'Apache Isis Legacy - Runtime'
+apply plugin: 'war'
+dependencies {
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-legacy:isis-legacy-applib')
+    compile project(':isis-parent:isis:isis-core-runtime')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+    providedCompile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-applib')
+    providedCompile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-datanucleus5')
+    providedCompile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/legacy/mappings/restclient/build.gradle b/legacy/mappings/restclient/build.gradle
new file mode 100644
index 0000000..c48e6ee
--- /dev/null
+++ b/legacy/mappings/restclient/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.legacy'
+description = 'Apache Isis Legacy - REST Client'
+apply plugin: 'war'
+dependencies {
+    compile project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-applib')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    providedCompile project(':isis-parent:isis:isis-core-commons')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/mappings/jaxrsclient/api/build.gradle b/mappings/jaxrsclient/api/build.gradle
new file mode 100644
index 0000000..9bc6eef
--- /dev/null
+++ b/mappings/jaxrsclient/api/build.gradle
@@ -0,0 +1,11 @@
+group = 'org.apache.isis.mappings'
+description = 'Apache Isis Map - JaxRS Client (api)'
+dependencies {
+    compile group: 'org.springframework', name: 'spring-context', version:'5.2.6.RELEASE'
+}
+
+task packageTests(type: Jar) {
+  from sourceSets.test.output
+  classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/mappings/restclient/api/build.gradle b/mappings/restclient/api/build.gradle
new file mode 100644
index 0000000..8edae00
--- /dev/null
+++ b/mappings/restclient/api/build.gradle
@@ -0,0 +1,13 @@
+group = 'org.apache.isis.mappings'
+description = 'Apache Isis Ext - REST Client'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-commons')
+    compile group: 'org.springframework', name: 'spring-context', version: '5.2.6.RELEASE'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/persistence/jdo/applib/build.gradle b/persistence/jdo/applib/build.gradle
new file mode 100644
index 0000000..a6d75c3
--- /dev/null
+++ b/persistence/jdo/applib/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.persistence'
+description = 'Apache Isis Persistence - JDO (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-commons')
+    compile group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+    compile group: 'org.datanucleus', name: 'datanucleus-rdbms', version: '5.2.1'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/persistence/jdo/datanucleus-5/build.gradle b/persistence/jdo/datanucleus-5/build.gradle
new file mode 100644
index 0000000..a54dcea
--- /dev/null
+++ b/persistence/jdo/datanucleus-5/build.gradle
@@ -0,0 +1,22 @@
+group = 'org.apache.isis.persistence'
+description = 'Apache Isis Persistence - JDO (datanucleus 5)'
+dependencies {
+    compile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-applib')
+    compile project(':isis-parent:isis:isis-core-runtime')
+    compile group: 'org.datanucleus', name: 'datanucleus-core', version: '5.2.2'
+    compile group: 'org.datanucleus', name: 'datanucleus-api-jdo', version: '5.2.2'
+    compile group: 'org.datanucleus', name: 'datanucleus-jdo-query', version: '5.0.9'
+    compile group: 'org.datanucleus', name: 'datanucleus-rdbms', version: '5.2.1'
+    compile group: 'org.datanucleus', name: 'datanucleus-jodatime', version: '5.2.0-release'
+    testCompile project(':isis-parent:isis:isis-core-runtime')
+    testCompile project(':isis-parent:isis:isis-core-config')
+    testCompile project(':isis-parent:isis:isis-core-runtimeservices')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/persistence/jpa/applib/build.gradle b/persistence/jpa/applib/build.gradle
new file mode 100644
index 0000000..c2a88e3
--- /dev/null
+++ b/persistence/jpa/applib/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.persistence'
+description = 'Apache Isis Persistence - JPA (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-commons')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/persistence/jpa/model/build.gradle b/persistence/jpa/model/build.gradle
new file mode 100644
index 0000000..9c5f673
--- /dev/null
+++ b/persistence/jpa/model/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.persistence'
+description = 'Apache Isis Persistence - JPA (model)'
+dependencies {
+    compile project(':isis-parent:isis:isis-persistence-jpa:isis-persistence-jpa-applib')
+    compile project(':isis-parent:isis:isis-core-runtime')
+    testCompile project(':isis-parent:isis:isis-core-runtime')
+    testCompile project(':isis-parent:isis:isis-core-config')
+    testCompile project(':isis-parent:isis:isis-core-runtimeservices')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/security/bypass/build.gradle b/security/bypass/build.gradle
new file mode 100644
index 0000000..2f33fe0
--- /dev/null
+++ b/security/bypass/build.gradle
@@ -0,0 +1,11 @@
+group = 'org.apache.isis.security'
+description = 'Apache Isis Security - Bypass'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-runtimeservices')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/security/keycloak/build.gradle b/security/keycloak/build.gradle
new file mode 100644
index 0000000..9bb1b9d
--- /dev/null
+++ b/security/keycloak/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.security'
+description = 'Apache Isis Security - Keycloak'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-runtimeservices')
+    compile project(':isis-parent:isis:isis-core-webapp')
+    testCompile project(':isis-parent:isis:isis-core-runtime')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/security/shiro/build.gradle b/security/shiro/build.gradle
new file mode 100644
index 0000000..6967ea3
--- /dev/null
+++ b/security/shiro/build.gradle
@@ -0,0 +1,18 @@
+group = 'org.apache.isis.security'
+description = 'Apache Isis Security - Shiro'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-runtimeservices')
+    compile project(':isis-parent:isis:isis-core-webapp')
+    compile(group: 'org.apache.shiro', name: 'shiro-core', version: '1.4.1') {
+        exclude(module: 'slf4j-api')
+    }
+    compile group: 'org.apache.shiro', name: 'shiro-web', version: '1.4.1'
+    testCompile project(':isis-parent:isis:isis-core-runtime')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..73e84e9
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,268 @@
+rootProject.name = 'isis-all'
+include ':isis-parent:isis-schema'
+include ':isis-parent:isis-applib'
+include ':isis-parent:isis:isis-core-codegen-bytebuddy'
+include ':isis-parent:isis:isis-core-commons'
+include ':isis-parent:isis:isis-core-config'
+include ':isis-parent:isis:isis-core-internaltestsupport'
+include ':isis-parent:isis:isis-core-metamodel'
+include ':isis-parent:isis:isis-core-runtime'
+include ':isis-parent:isis:isis-core-runtimeservices'
+include ':isis-parent:isis:isis-core-webapp'
+include ':isis-parent:isis:isis-core-security'
+include ':isis-parent:isis:isis-security-bypass'
+include ':isis-parent:isis:isis-security-shiro'
+include ':isis-parent:isis:isis-security-keycloak'
+include ':isis-parent:isis:isis-viewer-common'
+include ':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-applib'
+include ':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-rendering'
+include ':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-viewer'
+include ':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-jaxrsresteasy4'
+include ':isis-parent:isis:isis-viewer-restfulobjects'
+include ':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-model'
+include ':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-viewer'
+include ':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui'
+include ':isis-parent:isis:isis-viewer-wicket'
+include ':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-applib'
+include ':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-datanucleus5'
+include ':isis-parent:isis:isis-persistence-jdo'
+include ':isis-parent:isis:isis-persistence-jpa:isis-persistence-jpa-applib'
+include ':isis-parent:isis:isis-persistence-jpa:isis-persistence-jpa-model'
+include ':isis-parent:isis:isis-persistence-jpa'
+include ':isis-parent:isis'
+include ':isis-parent:isis:isis-extensions:isis-extensions-flyway:isis-extensions-flyway-impl'
+include ':isis-parent:isis:isis-extensions:isis-extensions-flyway'
+include ':isis-parent:isis:isis-extensions:isis-extensions-modelannotation'
+include ':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-api'
+include ':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-model'
+include ':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-encryption-jbcrypt'
+include ':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-persistence-jdo'
+include ':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-shiro-realm'
+include ':isis-parent:isis:isis-extensions:isis-extensions-secman'
+include ':isis-parent:isis:isis-extensions:isis-extensions-shiro-realm-ldap:isis-extensions-shiro-realm-ldap-impl'
+include ':isis-parent:isis:isis-extensions:isis-extensions-shiro-realm-ldap'
+include ':isis-parent:isis:isis-extensions:isis-extensions-cors:isis-extensions-cors-impl'
+include ':isis-parent:isis:isis-extensions:isis-extensions-cors'
+include ':isis-parent:isis:isis-extensions:isis-extensions-exceldownload:isis-extensions-exceldownload-ui'
+include ':isis-parent:isis:isis-extensions:isis-extensions-exceldownload'
+include ':isis-parent:isis:isis-extensions:isis-extensions-fullcalendar:isis-extensions-fullcalendar-applib'
+include ':isis-parent:isis:isis-extensions:isis-extensions-fullcalendar:isis-extensions-fullcalendar-ui'
+include ':isis-parent:isis:isis-extensions:isis-extensions-fullcalendar'
+include ':isis-parent:isis:isis-extensions:isis-extensions-pdfjs:isis-extensions-pdfjs-applib'
+include ':isis-parent:isis:isis-extensions:isis-extensions-pdfjs:isis-extensions-pdfjs-metamodel'
+include ':isis-parent:isis:isis-extensions:isis-extensions-pdfjs:isis-extensions-pdfjs-ui'
+include ':isis-parent:isis:isis-extensions:isis-extensions-pdfjs'
+include ':isis-parent:isis:isis-extensions'
+include ':isis-parent:isis:isis-incubator:isis-incubator-microprofile'
+include ':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-model'
+include ':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-viewer'
+include ':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-ui'
+include ':isis-parent:isis:isis-incubator:isis-viewer-vaadin'
+include ':isis-parent:isis:isis-incubator'
+include ':isis-parent:isis:isis-legacy:isis-legacy-applib'
+include ':isis-parent:isis:isis-legacy:isis-legacy-commons'
+include ':isis-parent:isis:isis-legacy:isis-legacy-metamodel'
+include ':isis-parent:isis:isis-legacy:isis-legacy-runtime'
+include ':isis-parent:isis:isis-legacy:isis-legacy-restclient'
+include ':isis-parent:isis:isis-legacy'
+include ':isis-parent:isis:isis-mappings:isis-mappings-jaxrsclient:isis-mappings-jaxrsclient-api'
+include ':isis-parent:isis:isis-mappings:isis-mappings-jaxrsclient'
+include ':isis-parent:isis:isis-mappings:isis-mappings-restclient-api'
+include ':isis-parent:isis:isis-mappings:isis-mappings-restclient'
+include ':isis-parent:isis:isis-mappings'
+include ':isis-parent:isis:isis-mavendeps:isis-mavendeps-jdk11'
+include ':isis-parent:isis:isis-mavendeps:isis-mavendeps-unittests'
+include ':isis-parent:isis:isis-mavendeps:isis-mavendeps-integtests'
+include ':isis-parent:isis:isis-mavendeps:isis-mavendeps-integspecs'
+include ':isis-parent:isis:isis-mavendeps:isis-mavendeps-webapp'
+include ':isis-parent:isis:isis-mavendeps'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-base:isis-subdomains-base-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-base'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-docx:isis-subdomains-docx-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-docx'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-excel:isis-subdomains-excel-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-excel-fixtures'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-excel-integtests'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-excel:isis-subdomains-excel-testing'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-excel'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-freemarker:isis-subdomains-freemarker-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-freemarker'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-ognl-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-ognl'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-pdfbox:isis-subdomains-pdfbox-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-pdfbox'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-spring:isis-subdomains-spring-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-spring'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-xdocreport:isis-subdomains-xdocreport-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-xdocreport'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-zip:isis-subdomains-zip-applib'
+include ':isis-parent:isis:isis-subdomains:isis-subdomains-zip'
+include ':isis-parent:isis:isis-subdomains'
+include ':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-applib'
+include ':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-fixtures'
+include ':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-integtests'
+include ':isis-parent:isis:isis-testing:isis-testing-fakedata'
+include ':isis-parent:isis:isis-testing:isis-testing-fixtures:isis-testing-fixtures-applib'
+include ':isis-parent:isis:isis-testing:isis-testing-fixtures'
+include ':isis-parent:isis:isis-testing:isis-testing-h2console:isis-testing-h2console-ui'
+include ':isis-parent:isis:isis-testing:isis-testing-h2console'
+include ':isis-parent:isis:isis-testing:isis-testing-hsqldbmgr:isis-testing-hsqldbmgr-ui'
+include ':isis-parent:isis:isis-testing:isis-testing-hsqldbmgr'
+include ':isis-parent:isis:isis-testing:isis-testing-specsupport:isis-testing-specsupport-applib'
+include ':isis-parent:isis:isis-testing:isis-testing-specsupport'
+include ':isis-parent:isis:isis-testing:isis-testing-integtestsupport:isis-testing-integtestsupport-applib'
+include ':isis-parent:isis:isis-testing:isis-testing-integtestsupport'
+include ':isis-parent:isis:isis-testing:isis-testing-unittestsupport:isis-testing-unittestsupport-applib'
+include ':isis-parent:isis:isis-testing:isis-testing-unittestsupport'
+include ':isis-parent:isis:isis-testing'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc:isis-valuetypes-asciidoc-applib'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc:isis-valuetypes-asciidoc-ui:isis-valuetypes-asciidoc-ui-vaa'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc:isis-valuetypes-asciidoc-ui:isis-valuetypes-asciidoc-ui-wkt'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc:isis-valuetypes-asciidoc-ui'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-markdown:isis-valuetypes-markdown-applib'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-markdown:isis-valuetypes-markdown-ui'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-markdown'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse-applib'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse:isis-valuetypes-sse-metamodel'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse:isis-valuetypes-sse-ui'
+include ':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse'
+include ':isis-parent:isis:isis-valuetypes'
+include ':isis-app-starter-parent:demo-parent:demo-domain'
+include ':isis-app-starter-parent:demo-parent:demo-wicket'
+include ':isis-app-starter-parent:demo-parent'
+include ':isis-app-starter-parent:smoketests'
+
+project(':isis-parent:isis-schema').projectDir = "$rootDir/api/schema" as File
+project(':isis-parent:isis-applib').projectDir = "$rootDir/api/applib" as File
+project(':isis-parent:isis:isis-core-codegen-bytebuddy').projectDir = "$rootDir/core/codegen-bytebuddy" as File
+project(':isis-parent:isis:isis-core-commons').projectDir = "$rootDir/core/commons" as File
+project(':isis-parent:isis:isis-core-config').projectDir = "$rootDir/core/config" as File
+project(':isis-parent:isis:isis-core-internaltestsupport').projectDir = "$rootDir/core/internaltestsupport" as File
+project(':isis-parent:isis:isis-core-metamodel').projectDir = "$rootDir/core/metamodel" as File
+project(':isis-parent:isis:isis-core-runtime').projectDir = "$rootDir/core/runtime" as File
+project(':isis-parent:isis:isis-core-runtimeservices').projectDir = "$rootDir/core/runtimeservices" as File
+project(':isis-parent:isis:isis-core-webapp').projectDir = "$rootDir/core/webapp" as File
+project(':isis-parent:isis:isis-core-security').projectDir = "$rootDir/core/security" as File
+project(':isis-parent:isis:isis-security-bypass').projectDir = "$rootDir/security/bypass" as File
+project(':isis-parent:isis:isis-security-shiro').projectDir = "$rootDir/security/shiro" as File
+project(':isis-parent:isis:isis-security-keycloak').projectDir = "$rootDir/security/keycloak" as File
+project(':isis-parent:isis:isis-viewer-common').projectDir = "$rootDir/viewers/common" as File
+project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-applib').projectDir = "$rootDir/viewers/restfulobjects/applib" as File
+project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-rendering').projectDir = "$rootDir/viewers/restfulobjects/rendering" as File
+project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-viewer').projectDir = "$rootDir/viewers/restfulobjects/viewer" as File
+project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-jaxrsresteasy4').projectDir = "$rootDir/viewers/restfulobjects/jaxrs-resteasy-4" as File
+project(':isis-parent:isis:isis-viewer-restfulobjects').projectDir = "$rootDir/viewers/restfulobjects" as File
+project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-model').projectDir = "$rootDir/viewers/wicket/model" as File
+project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-viewer').projectDir = "$rootDir/viewers/wicket/viewer" as File
+project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui').projectDir = "$rootDir/viewers/wicket/ui" as File
+project(':isis-parent:isis:isis-viewer-wicket').projectDir = "$rootDir/viewers/wicket" as File
+project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-applib').projectDir = "$rootDir/persistence/jdo/applib" as File
+project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-datanucleus5').projectDir = "$rootDir/persistence/jdo/datanucleus-5" as File
+project(':isis-parent:isis:isis-persistence-jdo').projectDir = "$rootDir/persistence/jdo" as File
+project(':isis-parent:isis:isis-persistence-jpa:isis-persistence-jpa-applib').projectDir = "$rootDir/persistence/jpa/applib" as File
+project(':isis-parent:isis:isis-persistence-jpa:isis-persistence-jpa-model').projectDir = "$rootDir/persistence/jpa/model" as File
+project(':isis-parent:isis:isis-persistence-jpa').projectDir = "$rootDir/persistence/jpa" as File
+project(':isis-parent:isis').projectDir = "$rootDir/core" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-flyway:isis-extensions-flyway-impl').projectDir = "$rootDir/extensions/core/flyway/impl" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-flyway').projectDir = "$rootDir/extensions/core/flyway" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-modelannotation').projectDir = "$rootDir/extensions/core/model-annotation" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-api').projectDir = "$rootDir/extensions/security/secman/api" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-model').projectDir = "$rootDir/extensions/security/secman/model" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-encryption-jbcrypt').projectDir = "$rootDir/extensions/security/secman/encryption-jbcrypt" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-persistence-jdo').projectDir = "$rootDir/extensions/security/secman/persistence-jdo" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-secman:isis-extensions-secman-shiro-realm').projectDir = "$rootDir/extensions/security/secman/shiro-realm" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-secman').projectDir = "$rootDir/extensions/security/secman" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-shiro-realm-ldap:isis-extensions-shiro-realm-ldap-impl').projectDir = "$rootDir/extensions/security/shiro-realm-ldap/impl" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-shiro-realm-ldap').projectDir = "$rootDir/extensions/security/shiro-realm-ldap" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-cors:isis-extensions-cors-impl').projectDir = "$rootDir/extensions/vro/cors/impl" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-cors').projectDir = "$rootDir/extensions/vro/cors" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-exceldownload:isis-extensions-exceldownload-ui').projectDir = "$rootDir/extensions/vw/exceldownload/ui" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-exceldownload').projectDir = "$rootDir/extensions/vw/exceldownload" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-fullcalendar:isis-extensions-fullcalendar-applib').projectDir = "$rootDir/extensions/vw/fullcalendar/applib" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-fullcalendar:isis-extensions-fullcalendar-ui').projectDir = "$rootDir/extensions/vw/fullcalendar/ui" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-fullcalendar').projectDir = "$rootDir/extensions/vw/fullcalendar" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-pdfjs:isis-extensions-pdfjs-applib').projectDir = "$rootDir/extensions/vw/pdfjs/applib" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-pdfjs:isis-extensions-pdfjs-metamodel').projectDir = "$rootDir/extensions/vw/pdfjs/metamodel" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-pdfjs:isis-extensions-pdfjs-ui').projectDir = "$rootDir/extensions/vw/pdfjs/ui" as File
+project(':isis-parent:isis:isis-extensions:isis-extensions-pdfjs').projectDir = "$rootDir/extensions/vw/pdfjs" as File
+project(':isis-parent:isis:isis-extensions').projectDir = "$rootDir/extensions" as File
+project(':isis-parent:isis:isis-incubator:isis-incubator-microprofile').projectDir = "$rootDir/incubator/mappings/microprofile" as File
+project(':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-model').projectDir = "$rootDir/incubator/viewers/vaadin/model" as File
+project(':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-viewer').projectDir = "$rootDir/incubator/viewers/vaadin/viewer" as File
+project(':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-ui').projectDir = "$rootDir/incubator/viewers/vaadin/ui" as File
+project(':isis-parent:isis:isis-incubator:isis-viewer-vaadin').projectDir = "$rootDir/incubator/viewers/vaadin" as File
+project(':isis-parent:isis:isis-incubator').projectDir = "$rootDir/incubator" as File
+project(':isis-parent:isis:isis-legacy:isis-legacy-applib').projectDir = "$rootDir/legacy/extensions/core/applib" as File
+project(':isis-parent:isis:isis-legacy:isis-legacy-commons').projectDir = "$rootDir/legacy/extensions/core/commons" as File
+project(':isis-parent:isis:isis-legacy:isis-legacy-metamodel').projectDir = "$rootDir/legacy/extensions/core/metamodel" as File
+project(':isis-parent:isis:isis-legacy:isis-legacy-runtime').projectDir = "$rootDir/legacy/extensions/core/runtime" as File
+project(':isis-parent:isis:isis-legacy:isis-legacy-restclient').projectDir = "$rootDir/legacy/mappings/restclient" as File
+project(':isis-parent:isis:isis-legacy').projectDir = "$rootDir/legacy" as File
+project(':isis-parent:isis:isis-mappings:isis-mappings-jaxrsclient:isis-mappings-jaxrsclient-api').projectDir = "$rootDir/mappings/jaxrsclient/api" as File
+project(':isis-parent:isis:isis-mappings:isis-mappings-jaxrsclient').projectDir = "$rootDir/mappings/jaxrsclient" as File
+project(':isis-parent:isis:isis-mappings:isis-mappings-restclient-api').projectDir = "$rootDir/mappings/restclient/api" as File
+project(':isis-parent:isis:isis-mappings:isis-mappings-restclient').projectDir = "$rootDir/mappings/restclient" as File
+project(':isis-parent:isis:isis-mappings').projectDir = "$rootDir/mappings" as File
+project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-jdk11').projectDir = "$rootDir/mavendeps/jdk11" as File
+project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-unittests').projectDir = "$rootDir/mavendeps/unittests" as File
+project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-integtests').projectDir = "$rootDir/mavendeps/integtests" as File
+project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-integspecs').projectDir = "$rootDir/mavendeps/integspecs" as File
+project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-webapp').projectDir = "$rootDir/mavendeps/webapp" as File
+project(':isis-parent:isis:isis-mavendeps').projectDir = "$rootDir/mavendeps" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-base:isis-subdomains-base-applib').projectDir = "$rootDir/subdomains/base/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-base').projectDir = "$rootDir/subdomains/base" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-docx:isis-subdomains-docx-applib').projectDir = "$rootDir/subdomains/docx/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-docx').projectDir = "$rootDir/subdomains/docx" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel:isis-subdomains-excel-applib').projectDir = "$rootDir/subdomains/excel/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel-fixtures').projectDir = "$rootDir/subdomains/excel/fixture" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel-integtests').projectDir = "$rootDir/subdomains/excel/integtests" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel:isis-subdomains-excel-testing').projectDir = "$rootDir/subdomains/excel/testing" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel').projectDir = "$rootDir/subdomains/excel" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-freemarker:isis-subdomains-freemarker-applib').projectDir = "$rootDir/subdomains/freemarker/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-freemarker').projectDir = "$rootDir/subdomains/freemarker" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-ognl-applib').projectDir = "$rootDir/subdomains/ognl/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-ognl').projectDir = "$rootDir/subdomains/ognl" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-pdfbox:isis-subdomains-pdfbox-applib').projectDir = "$rootDir/subdomains/pdfbox/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-pdfbox').projectDir = "$rootDir/subdomains/pdfbox" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-spring:isis-subdomains-spring-applib').projectDir = "$rootDir/subdomains/spring/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-spring').projectDir = "$rootDir/subdomains/spring" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-xdocreport:isis-subdomains-xdocreport-applib').projectDir = "$rootDir/subdomains/xdocreport/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-xdocreport').projectDir = "$rootDir/subdomains/xdocreport" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-zip:isis-subdomains-zip-applib').projectDir = "$rootDir/subdomains/zip/applib" as File
+project(':isis-parent:isis:isis-subdomains:isis-subdomains-zip').projectDir = "$rootDir/subdomains/zip" as File
+project(':isis-parent:isis:isis-subdomains').projectDir = "$rootDir/subdomains" as File
+project(':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-applib').projectDir = "$rootDir/testing/fakedata/applib" as File
+project(':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-fixtures').projectDir = "$rootDir/testing/fakedata/fixtures" as File
+project(':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-integtests').projectDir = "$rootDir/testing/fakedata/integtests" as File
+project(':isis-parent:isis:isis-testing:isis-testing-fakedata').projectDir = "$rootDir/testing/fakedata" as File
+project(':isis-parent:isis:isis-testing:isis-testing-fixtures:isis-testing-fixtures-applib').projectDir = "$rootDir/testing/fixtures/applib" as File
+project(':isis-parent:isis:isis-testing:isis-testing-fixtures').projectDir = "$rootDir/testing/fixtures" as File
+project(':isis-parent:isis:isis-testing:isis-testing-h2console:isis-testing-h2console-ui').projectDir = "$rootDir/testing/h2console/ui" as File
+project(':isis-parent:isis:isis-testing:isis-testing-h2console').projectDir = "$rootDir/testing/h2console" as File
+project(':isis-parent:isis:isis-testing:isis-testing-hsqldbmgr:isis-testing-hsqldbmgr-ui').projectDir = "$rootDir/testing/hsqldbmgr/ui" as File
+project(':isis-parent:isis:isis-testing:isis-testing-hsqldbmgr').projectDir = "$rootDir/testing/hsqldbmgr" as File
+project(':isis-parent:isis:isis-testing:isis-testing-specsupport:isis-testing-specsupport-applib').projectDir = "$rootDir/testing/specsupport/applib" as File
+project(':isis-parent:isis:isis-testing:isis-testing-specsupport').projectDir = "$rootDir/testing/specsupport" as File
+project(':isis-parent:isis:isis-testing:isis-testing-integtestsupport:isis-testing-integtestsupport-applib').projectDir = "$rootDir/testing/integtestsupport/applib" as File
+project(':isis-parent:isis:isis-testing:isis-testing-integtestsupport').projectDir = "$rootDir/testing/integtestsupport" as File
+project(':isis-parent:isis:isis-testing:isis-testing-unittestsupport:isis-testing-unittestsupport-applib').projectDir = "$rootDir/testing/unittestsupport/applib" as File
+project(':isis-parent:isis:isis-testing:isis-testing-unittestsupport').projectDir = "$rootDir/testing/unittestsupport" as File
+project(':isis-parent:isis:isis-testing').projectDir = "$rootDir/testing" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc:isis-valuetypes-asciidoc-applib').projectDir = "$rootDir/valuetypes/asciidoc/applib" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc:isis-valuetypes-asciidoc-ui:isis-valuetypes-asciidoc-ui-vaa').projectDir = "$rootDir/valuetypes/asciidoc/ui/vaadin" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc:isis-valuetypes-asciidoc-ui:isis-valuetypes-asciidoc-ui-wkt').projectDir = "$rootDir/valuetypes/asciidoc/ui/wicket" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc:isis-valuetypes-asciidoc-ui').projectDir = "$rootDir/valuetypes/asciidoc/ui" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-asciidoc').projectDir = "$rootDir/valuetypes/asciidoc" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-markdown:isis-valuetypes-markdown-applib').projectDir = "$rootDir/valuetypes/markdown/applib" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-markdown:isis-valuetypes-markdown-ui').projectDir = "$rootDir/valuetypes/markdown/ui" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-markdown').projectDir = "$rootDir/valuetypes/markdown" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse-applib').projectDir = "$rootDir/valuetypes/sse/applib" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse:isis-valuetypes-sse-metamodel').projectDir = "$rootDir/valuetypes/sse/metamodel" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse:isis-valuetypes-sse-ui').projectDir = "$rootDir/valuetypes/sse/ui" as File
+project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse').projectDir = "$rootDir/valuetypes/sse" as File
+project(':isis-parent:isis:isis-valuetypes').projectDir = "$rootDir/valuetypes" as File
+project(':isis-app-starter-parent:demo-parent:demo-domain').projectDir = "$rootDir/examples/demo/domain" as File
+project(':isis-app-starter-parent:demo-parent:demo-wicket').projectDir = "$rootDir/examples/demo/wicket" as File
+project(':isis-app-starter-parent:demo-parent').projectDir = "$rootDir/examples/demo" as File
+project(':isis-app-starter-parent:smoketests').projectDir = "$rootDir/examples/smoketests" as File
diff --git a/subdomains/base/applib/build.gradle b/subdomains/base/applib/build.gradle
new file mode 100644
index 0000000..b3f9ee4
--- /dev/null
+++ b/subdomains/base/applib/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Base (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
+    testCompile group: 'org.reflections', name: 'reflections', version: '0.9.11'
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+    testCompile project(':isis-parent:isis:isis-testing:isis-testing-unittestsupport:isis-testing-unittestsupport-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/docx/applib/build.gradle b/subdomains/docx/applib/build.gradle
new file mode 100644
index 0000000..871c507
--- /dev/null
+++ b/subdomains/docx/applib/build.gradle
@@ -0,0 +1,11 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Docx (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/excel/applib/build.gradle b/subdomains/excel/applib/build.gradle
new file mode 100644
index 0000000..1872bd3
--- /dev/null
+++ b/subdomains/excel/applib/build.gradle
@@ -0,0 +1,18 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Excel (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-core-runtime')
+    compile project(':isis-parent:isis:isis-testing:isis-testing-fixtures:isis-testing-fixtures-applib')
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    compile group: 'org.datanucleus', name: 'datanucleus-core', version: '5.2.2'
+    compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.1'
+    compile group: 'org.apache.poi', name: 'poi-ooxml-schemas', version: '4.1.1'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/excel/fixture/build.gradle b/subdomains/excel/fixture/build.gradle
new file mode 100644
index 0000000..74e9e08
--- /dev/null
+++ b/subdomains/excel/fixture/build.gradle
@@ -0,0 +1,15 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Excel (Fixtures)'
+dependencies {
+    compile project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel:isis-subdomains-excel-applib')
+    compile project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel:isis-subdomains-excel-testing')
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-testing:isis-testing-fixtures:isis-testing-fixtures-applib')
+    compile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-datanucleus5')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/excel/integtests/build.gradle b/subdomains/excel/integtests/build.gradle
new file mode 100644
index 0000000..9957e4d
--- /dev/null
+++ b/subdomains/excel/integtests/build.gradle
@@ -0,0 +1,15 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Excel (Integ Tests)'
+dependencies {
+    testCompile project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel-fixtures')
+    testCompile project(':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-applib')
+    testCompile project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-integtests')
+    testCompile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-datanucleus5')
+    testCompile group: 'org.hsqldb', name: 'hsqldb', version: '2.5.0'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/excel/testing/build.gradle b/subdomains/excel/testing/build.gradle
new file mode 100644
index 0000000..b833e18
--- /dev/null
+++ b/subdomains/excel/testing/build.gradle
@@ -0,0 +1,11 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Excel (testing support)'
+dependencies {
+    compile project(':isis-parent:isis:isis-subdomains:isis-subdomains-excel:isis-subdomains-excel-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/freemarker/applib/build.gradle b/subdomains/freemarker/applib/build.gradle
new file mode 100644
index 0000000..577c30f
--- /dev/null
+++ b/subdomains/freemarker/applib/build.gradle
@@ -0,0 +1,11 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Freemarker (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/ognl/applib/build.gradle b/subdomains/ognl/applib/build.gradle
new file mode 100644
index 0000000..0df2d74
--- /dev/null
+++ b/subdomains/ognl/applib/build.gradle
@@ -0,0 +1,11 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Ognl (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/pdfbox/applib/build.gradle b/subdomains/pdfbox/applib/build.gradle
new file mode 100644
index 0000000..053f733
--- /dev/null
+++ b/subdomains/pdfbox/applib/build.gradle
@@ -0,0 +1,11 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - PDF Box (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/spring/applib/build.gradle b/subdomains/spring/applib/build.gradle
new file mode 100644
index 0000000..0b4c072
--- /dev/null
+++ b/subdomains/spring/applib/build.gradle
@@ -0,0 +1,13 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Spring (applib)'
+apply plugin: 'war'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    providedCompile project(':isis-parent:isis:isis-core-runtime')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/xdocreport/applib/build.gradle b/subdomains/xdocreport/applib/build.gradle
new file mode 100644
index 0000000..ce89273
--- /dev/null
+++ b/subdomains/xdocreport/applib/build.gradle
@@ -0,0 +1,18 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - XdocReport (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile group: 'fr.opensagres.xdocreport', name: 'fr.opensagres.xdocreport.document.docx', version: '1.0.6'
+    compile group: 'fr.opensagres.xdocreport', name: 'fr.opensagres.xdocreport.template.freemarker', version: '1.0.6'
+    compile group: 'fr.opensagres.xdocreport', name: 'fr.opensagres.xdocreport.converter.docx.xwpf', version: '1.0.6'
+    compile group: 'fr.opensagres.xdocreport', name: 'org.apache.poi.xwpf.converter.pdf', version: '1.0.6'
+    compile group: 'fr.opensagres.xdocreport', name: 'org.apache.poi.xwpf.converter.core', version: '1.0.6'
+    testCompile project(':isis-parent:isis:isis-testing:isis-testing-unittestsupport:isis-testing-unittestsupport-applib')
+    testCompile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/subdomains/zip/applib/build.gradle b/subdomains/zip/applib/build.gradle
new file mode 100644
index 0000000..6550b24
--- /dev/null
+++ b/subdomains/zip/applib/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.subdomains'
+description = 'Apache Isis Sub - Zip (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/fakedata/applib/build.gradle b/testing/fakedata/applib/build.gradle
new file mode 100644
index 0000000..2b5e9fe
--- /dev/null
+++ b/testing/fakedata/applib/build.gradle
@@ -0,0 +1,16 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - FakeData (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile(group: 'com.github.javafaker', name: 'javafaker', version: '1.0.1') {
+        exclude(module: 'snakeyaml')
+    }
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    testCompile project(':isis-parent:isis:isis-testing:isis-testing-unittestsupport:isis-testing-unittestsupport-applib')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/fakedata/fixtures/build.gradle b/testing/fakedata/fixtures/build.gradle
new file mode 100644
index 0000000..0dac780
--- /dev/null
+++ b/testing/fakedata/fixtures/build.gradle
@@ -0,0 +1,15 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - FakeData (fixtures)'
+dependencies {
+    compile project(':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-applib')
+    compile project(':isis-parent:isis-applib')
+    compile project(':isis-parent:isis:isis-testing:isis-testing-fixtures:isis-testing-fixtures-applib')
+    compile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-datanucleus5')
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/fakedata/integtests/build.gradle b/testing/fakedata/integtests/build.gradle
new file mode 100644
index 0000000..c0d74bd
--- /dev/null
+++ b/testing/fakedata/integtests/build.gradle
@@ -0,0 +1,13 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - FakeData (integ tests)'
+dependencies {
+    testCompile project(':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-fixtures')
+    testCompile project(':isis-parent:isis:isis-testing:isis-testing-fakedata:isis-testing-fakedata-applib')
+    testCompile project(':isis-parent:isis:isis-mavendeps:isis-mavendeps-integtests')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/fixtures/applib/build.gradle b/testing/fixtures/applib/build.gradle
new file mode 100644
index 0000000..ee079c2
--- /dev/null
+++ b/testing/fixtures/applib/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - Fixtures (applib)'
+apply plugin: 'war'
+dependencies {
+    compile group: 'joda-time', name: 'joda-time', version: '2.10.6'
+    compile project(':isis-parent:isis:isis-subdomains:isis-subdomains-spring:isis-subdomains-spring-applib')
+    providedCompile project(':isis-parent:isis:isis-testing:isis-testing-integtestsupport:isis-testing-integtestsupport-applib')
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+    providedCompile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-applib')
+    providedCompile project(':isis-parent:isis:isis-core-runtime')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/h2console/ui/build.gradle b/testing/h2console/ui/build.gradle
new file mode 100644
index 0000000..dbc5102
--- /dev/null
+++ b/testing/h2console/ui/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - H2 Console (ui)'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-webapp')
+    compile group: 'com.h2database', name: 'h2', version: '1.4.200'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/hsqldbmgr/ui/build.gradle b/testing/hsqldbmgr/ui/build.gradle
new file mode 100644
index 0000000..c58a649
--- /dev/null
+++ b/testing/hsqldbmgr/ui/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - HSQLDB Manager'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-webapp')
+    compile group: 'org.hsqldb', name: 'hsqldb', version: '2.5.0'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/integtestsupport/applib/build.gradle b/testing/integtestsupport/applib/build.gradle
new file mode 100644
index 0000000..7c636be
--- /dev/null
+++ b/testing/integtestsupport/applib/build.gradle
@@ -0,0 +1,28 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - Integ Test Support (applib)'
+dependencies {
+    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.2.7.RELEASE') {
+        exclude(module: 'asm')
+        exclude(module: 'spring-test')
+        exclude(module: 'spring-core')
+        exclude(module: 'spring-boot-starter-logging')
+        exclude(module: 'slf4j-api')
+        exclude(module: 'junit-vintage-engine')
+    }
+    compile group: 'org.springframework', name: 'spring-test', version: '5.2.6.RELEASE'
+    compile group: 'com.approvaltests', name: 'approvaltests', version: '4.0.2'
+    compile group: 'org.hamcrest', name: 'hamcrest-library', version: '2.1'
+    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
+    compile project(':isis-parent:isis:isis-security-bypass')
+    compile project(':isis-parent:isis:isis-core-runtimeservices')
+    compile project(':isis-parent:isis:isis-persistence-jdo:isis-persistence-jdo-datanucleus5')
+    compile group: 'org.hsqldb', name: 'hsqldb', version: '2.5.0'
+    compile group: 'com.h2database', name: 'h2', version: '1.4.200'
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/specsupport/applib/build.gradle b/testing/specsupport/applib/build.gradle
new file mode 100644
index 0000000..b9809be
--- /dev/null
+++ b/testing/specsupport/applib/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - Spec/Cucumber (applib)'
+dependencies {
+    compile project(':isis-parent:isis:isis-testing:isis-testing-integtestsupport:isis-testing-integtestsupport-applib')
+    compile group: 'io.cucumber', name: 'cucumber-java', version: '5.1.2'
+    compile group: 'io.cucumber', name: 'cucumber-spring', version: '5.1.2'
+    compile group: 'io.cucumber', name: 'cucumber-junit', version: '5.1.2'
+//    compile group: 'io.cucumber', name: 'cucumber-junit-platform-engine', version: '5.1.2'
+    compile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2'
+//    compile group: 'org.junit.platform', name: 'junit-platform-console', version: '1.6.0'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/testing/unittestsupport/applib/build.gradle b/testing/unittestsupport/applib/build.gradle
new file mode 100644
index 0000000..ab51cd9
--- /dev/null
+++ b/testing/unittestsupport/applib/build.gradle
@@ -0,0 +1,33 @@
+group = 'org.apache.isis.testing'
+description = 'Apache Isis Tst - Unit Test Support (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.2.7.RELEASE') {
+        exclude(module: 'asm')
+        exclude(module: 'spring-test')
+        exclude(module: 'spring-core')
+        exclude(module: 'spring-boot-starter-logging')
+        exclude(module: 'slf4j-api')
+    }
+    compile group: 'org.springframework', name: 'spring-test', version: '5.2.6.RELEASE'
+    compile(group: 'org.jmock', name: 'jmock', version: '2.11.0') {
+        exclude(module: 'asm')
+    }
+    compile(group: 'org.jmock', name: 'jmock-junit4', version: '2.11.0') {
+        exclude(module: 'junit-dep')
+        exclude(module: 'asm')
+        exclude(module: 'byte-buddy')
+    }
+    compile group: 'com.approvaltests', name: 'approvaltests', version: '4.0.2'
+    compile project(':isis-parent:isis:isis-core-codegen-bytebuddy')
+    compile group: 'org.picocontainer', name: 'picocontainer', version: '2.15'
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/valuetypes/asciidoc/applib/build.gradle b/valuetypes/asciidoc/applib/build.gradle
new file mode 100644
index 0000000..715b4cf
--- /dev/null
+++ b/valuetypes/asciidoc/applib/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.valuetypes'
+description = 'Apache Isis Val - Asciidoctor (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile group: 'org.asciidoctor', name: 'asciidoctorj-api', version: '2.1.0'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/valuetypes/asciidoc/ui/vaadin/build.gradle b/valuetypes/asciidoc/ui/vaadin/build.gradle
new file mode 100644
index 0000000..4e18dc0
--- /dev/null
+++ b/valuetypes/asciidoc/ui/vaadin/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.valuetypes'
+description = 'Apache Isis Val - Asciidoctor (ui vaadin)'
+apply plugin: 'war'
+dependencies {
+    providedCompile project(':isis-parent:isis:isis-incubator:isis-viewer-vaadin:isis-viewer-vaadin-ui')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/valuetypes/asciidoc/ui/wicket/build.gradle b/valuetypes/asciidoc/ui/wicket/build.gradle
new file mode 100644
index 0000000..a589d83
--- /dev/null
+++ b/valuetypes/asciidoc/ui/wicket/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.valuetypes'
+description = 'Apache Isis Val - Asciidoctor (ui wicket)'
+apply plugin: 'war'
+dependencies {
+    providedCompile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/valuetypes/markdown/applib/build.gradle b/valuetypes/markdown/applib/build.gradle
new file mode 100644
index 0000000..bf771ea
--- /dev/null
+++ b/valuetypes/markdown/applib/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.valuetypes'
+description = 'Apache Isis Val - Markdown (applib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compileOnly group: 'com.vladsch.flexmark', name: 'flexmark-all', version: '0.34.32'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/valuetypes/markdown/ui/build.gradle b/valuetypes/markdown/ui/build.gradle
new file mode 100644
index 0000000..8b40994
--- /dev/null
+++ b/valuetypes/markdown/ui/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.valuetypes'
+description = 'Apache Isis Val - Markdown (ui)'
+dependencies {
+    compile project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-markdown:isis-valuetypes-markdown-applib')
+    compile project(':isis-parent:isis:isis-core-metamodel')
+    compile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+    compile(group: 'com.vladsch.flexmark', name: 'flexmark-all', version: '0.34.32') {
+        exclude(module: 'jsoup')
+    }
+    compile group: 'org.jsoup', name: 'jsoup', version: '1.10.2'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/valuetypes/sse/applib/build.gradle b/valuetypes/sse/applib/build.gradle
new file mode 100644
index 0000000..ce75fb5
--- /dev/null
+++ b/valuetypes/sse/applib/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.valuetypes'
+description = 'Apache Isis Val - Server Sent Events'
+apply plugin: 'war'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-metamodel')
+    providedCompile project(':isis-parent:isis:isis-core-webapp')
+    providedCompile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/valuetypes/sse/metamodel/build.gradle b/valuetypes/sse/metamodel/build.gradle
new file mode 100644
index 0000000..3fc239d
--- /dev/null
+++ b/valuetypes/sse/metamodel/build.gradle
@@ -0,0 +1,12 @@
+group = 'org.apache.isis.valuetypes'
+description = 'Apache Isis Val - Server Sent Events (metamodel)'
+dependencies {
+    compile project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse-applib')
+    compile project(':isis-parent:isis:isis-core-metamodel')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/valuetypes/sse/ui/build.gradle b/valuetypes/sse/ui/build.gradle
new file mode 100644
index 0000000..204a069
--- /dev/null
+++ b/valuetypes/sse/ui/build.gradle
@@ -0,0 +1,15 @@
+group = 'org.apache.isis.valuetypes'
+description = 'Apache Isis Val - Server Sent Events (ui)'
+apply plugin: 'war'
+dependencies {
+    compile project(':isis-parent:isis:isis-valuetypes:isis-valuetypes-sse:isis-valuetypes-sse-metamodel')
+    compile project(':isis-parent:isis:isis-core-metamodel')
+    providedCompile project(':isis-parent:isis:isis-core-webapp')
+    providedCompile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/viewers/common/build.gradle b/viewers/common/build.gradle
new file mode 100644
index 0000000..cd1ee06
--- /dev/null
+++ b/viewers/common/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.viewer'
+description = 'Apache Isis Viewer - Common Model'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-webapp')
+    compile group: 'org.webjars', name: 'font-awesome', version: '5.13.0'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/viewers/restfulobjects/applib/build.gradle b/viewers/restfulobjects/applib/build.gradle
new file mode 100644
index 0000000..4322d86
--- /dev/null
+++ b/viewers/restfulobjects/applib/build.gradle
@@ -0,0 +1,14 @@
+group = 'org.apache.isis.viewer'
+description = 'Apache Isis Viewer - RO (AppLib)'
+dependencies {
+    compile project(':isis-parent:isis-applib')
+    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.10.4'
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/viewers/restfulobjects/jaxrs-resteasy-4/build.gradle b/viewers/restfulobjects/jaxrs-resteasy-4/build.gradle
new file mode 100644
index 0000000..22b00b4
--- /dev/null
+++ b/viewers/restfulobjects/jaxrs-resteasy-4/build.gradle
@@ -0,0 +1,21 @@
+group = 'org.apache.isis.viewer'
+description = 'Apache Isis Viewer - RO (JAX-RS Resteasy v4)'
+dependencies {
+    compile project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-rendering')
+    compile project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-viewer')
+    compile(group: 'org.jboss.resteasy', name: 'resteasy-spring-boot-starter', version: '4.4.0.Final') {
+        exclude(module: 'spring-boot-starter-logging')
+    }
+    compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-jaxb-annotations', version: '2.10.4'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-viewer')
+    testCompile project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-applib')
+    testCompile group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/viewers/restfulobjects/rendering/build.gradle b/viewers/restfulobjects/rendering/build.gradle
new file mode 100644
index 0000000..dc1b5dc
--- /dev/null
+++ b/viewers/restfulobjects/rendering/build.gradle
@@ -0,0 +1,13 @@
+group = 'org.apache.isis.viewer'
+description = 'Apache Isis Viewer - RO (Rendering)'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-runtime')
+    compile project(':isis-parent:isis::isis-viewer-restfulobjects:isis-viewer-restfulobjects-applib')
+    testCompile project(':isis-parent:isis::isis-core-internaltestsupport')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/viewers/restfulobjects/viewer/build.gradle b/viewers/restfulobjects/viewer/build.gradle
new file mode 100644
index 0000000..8ccc45c
--- /dev/null
+++ b/viewers/restfulobjects/viewer/build.gradle
@@ -0,0 +1,17 @@
+group = 'org.apache.isis.viewer'
+description = 'Apache Isis Viewer - RO (Viewer)'
+dependencies {
+    compile project(':isis-parent:isis:isis-core-webapp')
+    compile project(':isis-parent:isis:isis-viewer-common')
+    compile project(':isis-parent:isis:isis-viewer-restfulobjects:isis-viewer-restfulobjects-rendering')
+    compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-jaxb-annotations', version: '2.10.4'
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/viewers/wicket/model/build.gradle b/viewers/wicket/model/build.gradle
new file mode 100644
index 0000000..641e178
--- /dev/null
+++ b/viewers/wicket/model/build.gradle
@@ -0,0 +1,21 @@
+group = 'org.apache.isis.viewer'
+description = 'Apache Isis Viewer - Wicket (Model)'
+dependencies {
+    compile(group: 'org.apache.wicket', name: 'wicket-core', version: '8.8.0') {
+        exclude(module: 'slf4j-api')
+        exclude(module: 'commons-io')
+    }
+    compile(group: 'org.apache.wicket', name: 'wicket-extensions', version: '8.8.0') {
+        exclude(module: 'slf4j-api')
+    }
+    compile project(':isis-parent:isis:isis-core-webapp')
+    compile project(':isis-parent:isis:isis-viewer-common')
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/viewers/wicket/ui/build.gradle b/viewers/wicket/ui/build.gradle
new file mode 100644
index 0000000..9279947
--- /dev/null
+++ b/viewers/wicket/ui/build.gradle
@@ -0,0 +1,80 @@
+group = 'org.apache.isis.viewer'
+description = 'Apache Isis Viewer - Wicket (UI Components)'
+dependencies {
+    compile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-model')
+    compile(group: 'org.apache.wicket', name: 'wicket-core', version: '8.8.0') {
+        exclude(module: 'slf4j-api')
+        exclude(module: 'commons-io')
+    }
+    compile(group: 'org.apache.wicket', name: 'wicket-devutils', version: '8.8.0') {
+        exclude(module: 'slf4j-api')
+    }
+    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
+    compile(group: 'org.apache.wicket', name: 'wicket-extensions', version: '8.8.0') {
+        exclude(module: 'slf4j-api')
+    }
+    compile(group: 'org.apache.wicket', name: 'wicket-auth-roles', version: '8.8.0') {
+        exclude(module: 'slf4j-api')
+    }
+    compile(group: 'org.apache.wicket', name: 'wicket-spring', version: '8.8.0') {
+        exclude(module: 'javax.inject')
+        exclude(module: 'asm')
+        exclude(module: 'slf4j-api')
+        exclude(module: 'cglib')
+    }
+    compile(group: 'org.wicketstuff', name: 'wicketstuff-select2', version: '8.8.0') {
+        exclude(module: 'wicket-core')
+    }
+    compile group: 'org.webjars', name: 'select2', version: '4.0.10'
+    compile(group: 'org.webjars', name: 'jquery-ui', version: '1.12.1') {
+        exclude(module: 'jquery')
+    }
+    compile(group: 'de.agilecoders.wicket.webjars', name: 'wicket-webjars', version: '2.0.15') {
+        exclude(module: 'wicket-core')
+        exclude(module: 'wicket-request')
+        exclude(module: 'slf4j-api')
+    }
+    compile(group: 'de.agilecoders.wicket', name: 'wicket-bootstrap-core', version: '2.0.13') {
+        exclude(module: 'wicket-util')
+        exclude(module: 'wicket-request')
+        exclude(module: 'wicket-core')
+        exclude(module: 'wicket-extensions')
+        exclude(module: 'slf4j-api')
+        exclude(module: 'guava')
+    }
+    compile(group: 'de.agilecoders.wicket', name: 'wicket-bootstrap-extensions', version: '2.0.13') {
+        exclude(module: 'wicket-util')
+        exclude(module: 'wicket-request')
+        exclude(module: 'wicket-core')
+        exclude(module: 'wicket-extensions')
+        exclude(module: 'bootstrap')
+        exclude(module: 'font-awesome')
+        exclude(module: 'jquery')
+        exclude(module: 'jquerypp')
+        exclude(module: 'jquery-ui')
+        exclude(module: 'typeaheadjs')
+        exclude(module: 'x-editable-bootstrap')
+        exclude(module: 'spin-js')
+        exclude(module: 'closure-compiler')
+        exclude(module: 'summernote')
+        exclude(module: 'guava')
+    }
+    compile group: 'org.webjars.bower', name: 'summernote', version: '0.8.11'
+    compile(group: 'de.agilecoders.wicket', name: 'wicket-bootstrap-themes', version: '2.0.13') {
+        exclude(module: 'wicket-core')
+    }
+    compile group: 'com.google.guava', name: 'guava', version: '28.1-jre'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile project(':isis-parent:isis:isis-core-metamodel')
+    testCompile(group: 'org.jmock', name: 'jmock-junit4', version: '2.11.0') {
+        exclude(module: 'asm')
+        exclude(module: 'junit-dep')
+    }
+    compileOnly group: 'org.datanucleus', name: 'javax.jdo', version: '3.2.0-m13'
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests
diff --git a/viewers/wicket/viewer/build.gradle b/viewers/wicket/viewer/build.gradle
new file mode 100644
index 0000000..17b888c
--- /dev/null
+++ b/viewers/wicket/viewer/build.gradle
@@ -0,0 +1,38 @@
+group = 'org.apache.isis.viewer'
+description = 'Apache Isis Viewer - Wicket (Viewer)'
+dependencies {
+    compile project(':isis-parent:isis:isis-viewer-wicket:isis-viewer-wicket-ui')
+    compile(group: 'org.apache.wicket', name: 'wicket-spring', version: '8.8.0') {
+        exclude(module: 'asm')
+        exclude(module: 'slf4j-api')
+        exclude(module: 'cglib')
+    }
+    compile(group: 'org.apache.wicket', name: 'wicket-auth-roles', version: '8.8.0') {
+        exclude(module: 'slf4j-api')
+    }
+    compile(group: 'de.agilecoders.wicket', name: 'wicket-bootstrap-core', version: '2.0.13') {
+        exclude(module: 'wicket-util')
+        exclude(module: 'wicket-request')
+        exclude(module: 'wicket-core')
+        exclude(module: 'wicket-extensions')
+        exclude(module: 'slf4j-api')
+        exclude(module: 'guava')
+    }
+    compile(group: 'net.ftlines.wicket-source', name: 'wicket-source', version: '7.0.0') {
+        exclude(module: 'wicket-core')
+        exclude(module: 'slf4j-api')
+    }
+    compile group: 'org.springframework', name: 'spring-web', version: '5.2.6.RELEASE'
+    compile group: 'commons-io', name: 'commons-io', version: '2.6'
+    testCompile project(':isis-parent:isis:isis-core-internaltestsupport')
+    testCompile(group: 'org.jmock', name: 'jmock-junit4', version: '2.11.0') {
+        exclude(module: 'asm')
+        exclude(module: 'junit-dep')
+    }
+}
+
+task packageTests(type: Jar) {
+    from sourceSets.test.output
+    classifier = 'tests'
+}
+artifacts.archives packageTests