You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2020/12/07 22:00:05 UTC

[sling-org-apache-sling-app-cms] 01/01: Fixes SLING-9978 - Cleaning up jackrabbit / oak versions and performed a larger cleanup / update of versions including syncing versions with the archetype

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

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit 4cd443f6670fc0c5cd700c2e41ee168d8e77250b
Author: Dan Klco <dk...@apache.org>
AuthorDate: Mon Dec 7 16:59:46 2020 -0500

    Fixes SLING-9978 - Cleaning up jackrabbit / oak versions and performed a larger cleanup / update of versions including syncing versions with the archetype
---
 api/pom.xml                                        |   2 +-
 archetype/pom.xml                                  |   2 +-
 .../META-INF/maven/archetype-metadata.xml          |  53 +++++--
 .../src/main/resources/archetype-resources/pom.xml |  43 ++----
 .../test/java/__package__/HelloWorldModelTest.java |   1 -
 core/pom.xml                                       |  10 +-
 .../internal/operations/UpdateStatusOperation.java |   4 +-
 .../sling/cms/core/helpers/SlingCMSTestHelper.java |   3 +-
 feature/pom.xml                                    |  14 +-
 feature/src/main/features/app/cms.json             |  78 +++++------
 feature/src/main/features/app/composum.json        |   8 +-
 feature/src/main/features/base.json                |  38 ++---
 feature/src/main/features/boot.json                | 154 +++++++++++----------
 feature/src/main/features/caconfig.json            |   2 +-
 feature/src/main/features/discovery.json           |   4 +-
 .../src/main/features/models-jacksonexporter.json  |   6 +-
 feature/src/main/features/oak/oak_base.json        |  52 +++----
 feature/src/main/features/scripting.json           |  24 ++--
 feature/src/main/features/webconsole.json          |   2 +-
 pom.xml                                            | 142 ++++++++++++-------
 reference/pom.xml                                  |  12 +-
 .../cms/reference/forms/impl/FormHandler.java      |  19 ++-
 .../cms/reference/forms/impl/FormRequestImpl.java  |  11 +-
 .../forms/impl/actions/SendEmailAction.java        |   9 +-
 .../cms/reference/form/impl/FormHandlerTest.java   |  53 ++++---
 .../reference/form/impl/FormRequestImplTest.java   |   5 +-
 .../reference/form/impl/SlingContextHelper.java    |   1 +
 .../form/impl/actions/SendEmailActionTest.java     |   3 +-
 reference/src/test/resources/form-no-actions.json  | 148 ++++++++++++++++++++
 .../transformer/helpers/SlingCMSContextHelper.java |   3 +-
 ui/pom.xml                                         |   6 +-
 31 files changed, 575 insertions(+), 337 deletions(-)

diff --git a/api/pom.xml b/api/pom.xml
index 07bbeda..eeab6cd 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -43,7 +43,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-api</artifactId>
+            <artifactId>oak-jackrabbit-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
diff --git a/archetype/pom.xml b/archetype/pom.xml
index 5d25d51..0f0f9dc 100644
--- a/archetype/pom.xml
+++ b/archetype/pom.xml
@@ -41,7 +41,7 @@ License. -->
       <extension>
         <groupId>org.apache.maven.archetype</groupId>
         <artifactId>archetype-packaging</artifactId>
-        <version>3.1.1</version>
+        <version>3.2.0</version>
       </extension>
     </extensions>
   </build>
diff --git a/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
index 6aa62f0..789c2b2 100644
--- a/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ b/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -2,18 +2,55 @@
 the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in
 writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the
 License. -->
-<archetype-descriptor
-  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0
-        http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
-  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  name="quickstart">
+<archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0
+        http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="quickstart">
   <requiredProperties>
-    <requiredProperty key="appName"/>
-    <requiredProperty key="package"/>
+
+
+    <requiredProperty key="appName" />
+    <requiredProperty key="package" />
     <requiredProperty key="slingcmsVersion">
       <defaultValue>${project.version}</defaultValue>
     </requiredProperty>
+
+    <!-- Used to share versions with parent -->
+    <requiredProperty key="commons-lang3-version">
+      <defaultValue>${commons-lang3-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="geronimo-atinject_1-0_spec-version">
+      <defaultValue>${geronimo-atinject_1-0_spec-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="javax-annotation-api-version">
+      <defaultValue>${javax-annotation-api-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="jsp-api-version">
+      <defaultValue>${jsp-api-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="jstl-version">
+      <defaultValue>${jstl-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="org-apache-sling-api-version">
+      <defaultValue>${org-apache-sling-api-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="org-apache-sling-models-api-version">
+      <defaultValue>${org-apache-sling-models-api-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="org-apache-sling-scripting-api-version">
+      <defaultValue>${org-apache-sling-scripting-api-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="org-apache-sling-scripting-jsp-taglib-version">
+      <defaultValue>${org-apache-sling-scripting-jsp-taglib-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="osgi-annotation-version">
+      <defaultValue>${osgi-annotation-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="servlet-api-version">
+      <defaultValue>${servlet-api-version}</defaultValue>
+    </requiredProperty>
+    <requiredProperty key="slf4j-version">
+      <defaultValue>${slf4j-version}</defaultValue>
+    </requiredProperty>
+
   </requiredProperties>
   <fileSets>
     <fileSet filtered="true">
diff --git a/archetype/src/main/resources/archetype-resources/pom.xml b/archetype/src/main/resources/archetype-resources/pom.xml
index e82eacd..7d73777 100644
--- a/archetype/src/main/resources/archetype-resources/pom.xml
+++ b/archetype/src/main/resources/archetype-resources/pom.xml
@@ -122,7 +122,7 @@ Sling-Model-Packages: ${package}
     <dependency>
       <groupId>javax.annotation</groupId>
       <artifactId>javax.annotation-api</artifactId>
-      <version>1.3.2</version>
+      <version>${javax-annotation-api-version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -134,7 +134,7 @@ Sling-Model-Packages: ${package}
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>jsp-api</artifactId>
-      <version>2.0</version>
+      <version>${jsp-api-version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -144,41 +144,33 @@ Sling-Model-Packages: ${package}
       <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>jstl</groupId>
+      <groupId>org.apache.geronimo.bundles</groupId>
       <artifactId>jstl</artifactId>
-      <version>1.2</version>
+      <version>${jstl-version}</version>
       <scope>provided</scope>
     </dependency>
-
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>servlet-api</artifactId>
-      <version>2.5</version>
+      <version>${servlet-api-version}</version>
       <scope>provided</scope>
     </dependency>
-
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
-      <version>3.4</version>
+      <version>${commons-lang3-version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-atinject_1.0_spec</artifactId>
-      <version>1.0</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jackrabbit</groupId>
-      <artifactId>jackrabbit-jcr-commons</artifactId>
-      <version>2.7.5</version>
+      <version>${geronimo-atinject_1-0_spec-version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.api</artifactId>
-      <version>2.18.0</version>
+      <version>${org-apache-sling-api-version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -190,22 +182,21 @@ Sling-Model-Packages: ${package}
     <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.models.api</artifactId>
-      <version>1.3.6</version>
+      <version>${org-apache-sling-models-api-version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.scripting.api</artifactId>
-      <version>2.2.0</version>
+      <version>${org-apache-sling-scripting-api-version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.scripting.jsp.taglib</artifactId>
-      <version>2.4.0</version>
+      <version>${org-apache-sling-scripting-jsp-taglib-version}</version>
       <scope>provided</scope>
     </dependency>
-
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.service.component.annotations</artifactId>
@@ -221,7 +212,7 @@ Sling-Model-Packages: ${package}
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>osgi.annotation</artifactId>
-      <version>6.0.1</version>
+      <version>${osgi-annotation-version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -236,11 +227,10 @@ Sling-Model-Packages: ${package}
       <version>6.0.0</version>
       <scope>provided</scope>
     </dependency>
-
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>1.7.25</version>
+      <version>${slf4j-version}</version>
       <scope>provided</scope>
     </dependency>
 
@@ -251,18 +241,13 @@ Sling-Model-Packages: ${package}
       <version>4.12</version>
       <scope>provided</scope>
     </dependency>
+    <!-- Fixed version due to Scanner issues with 2.6.x -->
     <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
       <version>2.3.0</version>
       <scope>provided</scope>
     </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <version>2.27.0</version>
-      <scope>provided</scope>
-    </dependency>
   </dependencies>
 
   <profiles>
diff --git a/archetype/src/main/resources/archetype-resources/src/test/java/__package__/HelloWorldModelTest.java b/archetype/src/main/resources/archetype-resources/src/test/java/__package__/HelloWorldModelTest.java
index edaf866..bae6eeb 100644
--- a/archetype/src/main/resources/archetype-resources/src/test/java/__package__/HelloWorldModelTest.java
+++ b/archetype/src/main/resources/archetype-resources/src/test/java/__package__/HelloWorldModelTest.java
@@ -23,7 +23,6 @@ import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.mockito.Mockito;
 
 public class HelloWorldModelTest {
     @Rule
diff --git a/core/pom.xml b/core/pom.xml
index 1644c53..21577fc 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -103,10 +103,6 @@
             <artifactId>org.apache.sling.models.api</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-jcr-commons</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.resource</artifactId>
         </dependency>
@@ -135,8 +131,8 @@
             <artifactId>org.apache.sling.caconfig.api</artifactId>
         </dependency>
         <dependency>
-            <artifactId>jackrabbit-api</artifactId>
             <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>oak-jackrabbit-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -245,5 +241,9 @@
             <groupId>com.github.jknack</groupId>
             <artifactId>handlebars</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.jetbrains</groupId>
+            <artifactId>annotations</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/operations/UpdateStatusOperation.java b/core/src/main/java/org/apache/sling/cms/core/internal/operations/UpdateStatusOperation.java
index 6068ae0..76b91ea 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/operations/UpdateStatusOperation.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/operations/UpdateStatusOperation.java
@@ -22,6 +22,7 @@ import java.util.Optional;
 
 import javax.jcr.RepositoryException;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.cms.AuthorizableWrapper;
@@ -29,7 +30,6 @@ import org.apache.sling.servlets.post.Modification;
 import org.apache.sling.servlets.post.PostOperation;
 import org.apache.sling.servlets.post.PostResponse;
 import org.apache.sling.servlets.post.SlingPostProcessor;
-import org.jsoup.helper.StringUtil;
 import org.osgi.service.component.annotations.Component;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,7 +61,7 @@ public class UpdateStatusOperation implements PostOperation {
             }
 
             User user = (User) authWrapper.getAuthorizable();
-            user.disable(StringUtil.isBlank(reason) ? null : reason);
+            user.disable(StringUtils.isBlank(reason) ? null : reason);
 
             // invoke processors
             if (processors != null) {
diff --git a/core/src/test/java/org/apache/sling/cms/core/helpers/SlingCMSTestHelper.java b/core/src/test/java/org/apache/sling/cms/core/helpers/SlingCMSTestHelper.java
index 393e21c..4c77c5f 100644
--- a/core/src/test/java/org/apache/sling/cms/core/helpers/SlingCMSTestHelper.java
+++ b/core/src/test/java/org/apache/sling/cms/core/helpers/SlingCMSTestHelper.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
@@ -41,8 +42,6 @@ import org.apache.sling.cms.ResourceTree;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.mockito.Mockito;
 
-import com.google.common.base.Function;
-
 public class SlingCMSTestHelper {
 
     public static final void initContext(SlingContext context) {
diff --git a/feature/pom.xml b/feature/pom.xml
index 46e9fe7..42fd519 100644
--- a/feature/pom.xml
+++ b/feature/pom.xml
@@ -25,20 +25,12 @@
     <properties>
         <sling.java.version>8</sling.java.version>
         <IT.expected.bundles.count>240</IT.expected.bundles.count>
-        <cms.version>${project.parent.version}</cms.version>
-        <composum.version>1.12.4</composum.version>
-        <groovy.version>3.0.6</groovy.version>
-        <jackrabbit.version>2.20.0</jackrabbit.version>
-        <jackson.version>2.11.1</jackson.version>
-        <oak.version>1.32.0</oak.version>
-        <slf4j.version>1.7.25</slf4j.version>
         <bnd.baseline.skip>true</bnd.baseline.skip>
         <run.sling.smoke.test>true</run.sling.smoke.test>
     </properties>
 
     <build>
         <plugins>
-
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>ianal-maven-plugin</artifactId>
@@ -153,7 +145,7 @@
                             <goal>attach-featurearchives</goal>
                         </goals>
                         <configuration>
-                            <replacePropertyVariables>cms.version,composum.version,groovy.version,jackrabbit.version,jackson.version,oak.version,slf4j.version</replacePropertyVariables>
+                            <replacePropertyVariables>cms-version,composum-version,groovy-version,jackrabbit-version,jackson-version,oak-version,slf4j-version,cocoon-serializers-charsets-version,org.apache.felix.webconsole-version,commons-lang3-version,jstl-version,org-apache-sling-models-api-version,org.apache.sling.scripting.jsp.taglib,geronimo-atinject_1-0_spec-version,commons-io-version,tika-version,pdfbox-version,httpclient-version,org-apache-sling-caconfig-api-version,jsoup-version [...]
                         </configuration>
                     </execution>
                 </executions>
@@ -313,13 +305,13 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.utils</artifactId>
-            <version>1.11.2</version>
+            <version>1.11.6</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.feature.launcher</artifactId>
-            <version>1.1.8</version>
+            <version>1.1.14</version>
         </dependency>
     </dependencies>
 </project>
diff --git a/feature/src/main/features/app/cms.json b/feature/src/main/features/app/cms.json
index 7b4a47d..6ed07b2 100644
--- a/feature/src/main/features/app/cms.json
+++ b/feature/src/main/features/app/cms.json
@@ -13,19 +13,19 @@
             "start-order": "5"
         },
         {
-            "id": "org.apache.sling:org.apache.sling.cms.api:${cms.version}",
+            "id": "org.apache.sling:org.apache.sling.cms.api:${cms-version}",
             "start-order": "20"
         },
         {
-            "id": "org.apache.sling:org.apache.sling.cms.ui:${cms.version}",
+            "id": "org.apache.sling:org.apache.sling.cms.ui:${cms-version}",
             "start-order": "20"
         },
         {
-            "id": "com.vladsch.flexmark:flexmark-osgi:0.61.24",
+            "id": "com.vladsch.flexmark:flexmark-osgi:0.62.2",
             "start-order": "15"
         },
         {
-            "id": "org.apache.cocoon:cocoon-serializers-charsets:1.0.2",
+            "id": "org.apache.cocoon:cocoon-serializers-charsets:${cocoon-serializers-charsets-version}",
             "start-order": "15"
         },
         {
@@ -45,19 +45,19 @@
             "start-order": "15"
         },
         {
-            "id": "org.apache.jackrabbit:oak-auth-external:${oak.version}",
+            "id": "org.apache.jackrabbit:oak-auth-external:${oak-version}",
             "start-order": "15"
         },
         {
-            "id": "org.apache.jackrabbit:oak-auth-ldap:${oak.version}",
+            "id": "org.apache.jackrabbit:oak-auth-ldap:${oak-version}",
             "start-order": "15"
         },
         {
-            "id": "org.apache.servicemix.bundles:org.apache.servicemix.bundles.xmlbeans:3.0.2_1",
+            "id": "org.apache.servicemix.bundles:org.apache.servicemix.bundles.xmlbeans:3.1.0_2",
             "start-order": "15"
         },
         {
-            "id": "org.apache.sling:org.apache.sling.fileoptim:0.9.4",
+            "id": "org.apache.sling:org.apache.sling.fileoptim:${org-apache-sling-fileoptim-version}",
             "start-order": "20"
         },
         {
@@ -65,7 +65,7 @@
             "start-order": "15"
         },
         {
-            "id": "org.jsoup:jsoup:1.13.1",
+            "id": "org.jsoup:jsoup:${jsoup-version}",
             "start-order": "15"
         },
         {
@@ -73,7 +73,7 @@
             "start-order": "15"
         },
         {
-            "id": "org.apache.commons:commons-text:1.8",
+            "id": "org.apache.commons:commons-text:${commons-text-version}",
             "start-order": "15"
         },
         {
@@ -81,23 +81,23 @@
             "start-order": "15"
         },
         {
-            "id": "org.apache.servicemix.bundles:org.apache.servicemix.bundles.poi:4.1.1_1",
+            "id": "org.apache.servicemix.bundles:org.apache.servicemix.bundles.poi:4.1.2_2",
             "start-order": "15"
         },
         {
-            "id": "org.apache.sling:org.apache.sling.cms.core:${cms.version}",
+            "id": "org.apache.sling:org.apache.sling.cms.core:${cms-version}",
             "start-order": "20"
         },
         {
-            "id": "org.apache.sling:org.apache.sling.cms.reference:${cms.version}",
+            "id": "org.apache.sling:org.apache.sling.cms.reference:${cms-version}",
             "start-order": "20"
         },
         {
-            "id": "org.apache.sling:org.apache.sling.cms.transformer:${cms.version}",
+            "id": "org.apache.sling:org.apache.sling.cms.transformer:${cms-version}",
             "start-order": "20"
         },
         {
-            "id": "org.apache.sling:org.apache.sling.cms.login:${cms.version}",
+            "id": "org.apache.sling:org.apache.sling.cms.login:${cms-version}",
             "start-order": "20"
         },
         {
@@ -145,95 +145,95 @@
             "start-order": "15"
         },
         {
-            "id": "org.apache.tika:tika-bundle:1.22",
+            "id": "org.apache.tika:tika-bundle:${tika-version}",
             "start-order": "15"
         },
         {
-            "id": "org.codehaus.groovy:groovy:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-ant:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-ant:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-astbuilder:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-astbuilder:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-cli-picocli:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-cli-picocli:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-console:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-console:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-datetime:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-datetime:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-docgenerator:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-docgenerator:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-groovydoc:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-groovydoc:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-groovysh:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-groovysh:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-jmx:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-jmx:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-json:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-json:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-jsr223:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-jsr223:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-macro:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-macro:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-nio:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-nio:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-servlet:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-servlet:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-sql:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-sql:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-swing:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-swing:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-templates:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-templates:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-test:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-test:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-test-junit5:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-test-junit5:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-testng:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-testng:${groovy-version}",
             "start-order": "20"
         },
         {
-            "id": "org.codehaus.groovy:groovy-xml:${groovy.version}",
+            "id": "org.codehaus.groovy:groovy-xml:${groovy-version}",
             "start-order": "20"
         }
     ],
@@ -436,7 +436,7 @@
         "end",
         "create service user sling-cms-versionmgr",
         "set ACL for sling-cms-versionmgr",
-        "allow   jcr:write,jcr:nodeTypeManagement,jcr:versionManagement    on /content",
+        "allow   jcr:write,jcr:nodeTypeManagement,jcr:versionManagement    on /",
         "end"
     ]
 }
\ No newline at end of file
diff --git a/feature/src/main/features/app/composum.json b/feature/src/main/features/app/composum.json
index 042e1de..e17efae 100644
--- a/feature/src/main/features/app/composum.json
+++ b/feature/src/main/features/app/composum.json
@@ -2,19 +2,19 @@
 {
     "bundles":[
         {
-            "id":"com.composum.sling.core:composum-sling-core-commons:${composum.version}",
+            "id":"com.composum.sling.core:composum-sling-core-commons:${composum-version}",
             "start-order":"20"
         },
         {
-            "id":"com.composum.sling.core:composum-sling-core-console:${composum.version}",
+            "id":"com.composum.sling.core:composum-sling-core-console:${composum-version}",
             "start-order":"20"
         },
         {
-            "id":"com.composum.sling.core:composum-sling-core-jslibs:${composum.version}",
+            "id":"com.composum.sling.core:composum-sling-core-jslibs:${composum-version}",
             "start-order":"20"
         },
         {
-            "id":"com.composum.sling.core:composum-sling-package-manager:${composum.version}",
+            "id":"com.composum.sling.core:composum-sling-package-manager:${composum-version}",
             "start-order":"20"
         }
     ],
diff --git a/feature/src/main/features/base.json b/feature/src/main/features/base.json
index d8d2969..77b8be4 100644
--- a/feature/src/main/features/base.json
+++ b/feature/src/main/features/base.json
@@ -2,7 +2,7 @@
 {
     "bundles":[
         {
-            "id":"commons-codec:commons-codec:1.14",
+            "id":"commons-codec:commons-codec:1.15",
             "start-order":"5"
         },
         {
@@ -22,15 +22,15 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.geronimo.bundles:jstl:1.2_1",
+            "id":"org.apache.geronimo.bundles:jstl:${jstl-version}",
             "start-order":"20"
         },
         {
-            "id":"org.apache.httpcomponents:httpclient-osgi:4.5.10",
+            "id":"org.apache.httpcomponents:httpclient-osgi:${httpclient-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.httpcomponents:httpcore-osgi:4.4.12",
+            "id":"org.apache.httpcomponents:httpcore-osgi:4.4.14",
             "start-order":"15"
         },
         {
@@ -62,7 +62,7 @@
             "start-order":"15"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.commons.scheduler:2.7.6",
+            "id":"org.apache.sling:org.apache.sling.commons.scheduler:2.7.12",
             "start-order":"20"
         },
         {
@@ -70,7 +70,7 @@
             "start-order":"15"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.engine:2.7.2",
+            "id":"org.apache.sling:org.apache.sling.engine:${org-apache-sling-engine-version}",
             "start-order":"20"
         },
         {
@@ -90,11 +90,11 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.models.api:1.3.8",
+            "id":"org.apache.sling:org.apache.sling.models.api:${org-apache-sling-models-api-version}",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.models.impl:1.4.12",
+            "id":"org.apache.sling:org.apache.sling.models.impl:1.4.16",
             "start-order":"20"
         },
         {
@@ -102,7 +102,7 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.serviceusermapper:1.4.4",
+            "id":"org.apache.sling:org.apache.sling.serviceusermapper:1.4.6",
             "start-order":"15"
         },
         {
@@ -114,11 +114,11 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.servlets.resolver:2.7.8",
+            "id":"org.apache.sling:org.apache.sling.servlets.resolver:2.7.10",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.xss:2.2.6",
+            "id":"org.apache.sling:org.apache.sling.xss:2.2.8",
             "start-order":"20"
         },
         {
@@ -130,7 +130,7 @@
             "start-order":"5"
         },
         {
-            "id":"commons-io:commons-io:2.6",
+            "id":"commons-io:commons-io:${commons-io-version}",
             "start-order":"5"
         },
         {
@@ -150,7 +150,7 @@
             "start-order":"5"
         },
         {
-            "id":"org.apache.felix:org.apache.felix.http.jetty:4.0.18",
+            "id":"org.apache.felix:org.apache.felix.http.jetty:4.1.4",
             "start-order":"5"
         },
         {
@@ -170,7 +170,7 @@
             "start-order":"5"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.api:2.22.0",
+            "id":"org.apache.sling:org.apache.sling.api:${org-apache-sling-api-version}",
             "start-order":"5"
         },
         {
@@ -186,7 +186,7 @@
             "start-order":"10"
         },
         {
-            "id":"org.apache.pdfbox:fontbox:2.0.17",
+            "id":"org.apache.pdfbox:fontbox:${pdfbox-version}",
             "start-order":"10"
         },
         {
@@ -194,15 +194,15 @@
             "start-order":"10"
         },
         {
-            "id":"org.apache.pdfbox:pdfbox:2.0.17",
+            "id":"org.apache.pdfbox:pdfbox:${pdfbox-version}",
             "start-order":"10"
         },
         {
-            "id":"org.apache.tika:tika-core:1.24",
+            "id":"org.apache.tika:tika-core:${tika-version}",
             "start-order":"10"
         },
         {
-            "id":"io.dropwizard.metrics:metrics-core:3.2.6",
+            "id":"io.dropwizard.metrics:metrics-core:3.2.5",
             "start-order":"15"
         },
         {
@@ -222,7 +222,7 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.jcr.repoinit:1.1.24",
+            "id":"org.apache.sling:org.apache.sling.jcr.repoinit:1.1.26",
             "start-order":"20"
         }
     ],
diff --git a/feature/src/main/features/boot.json b/feature/src/main/features/boot.json
index ca0c4ae..0671ec3 100644
--- a/feature/src/main/features/boot.json
+++ b/feature/src/main/features/boot.json
@@ -1,144 +1,146 @@
-
 {
     "variables": {
         "sling.home": null
     },
-    "bundles":[
+    "bundles": [
         {
-            "id":"org.apache.aries:org.apache.aries.util:1.1.3",
-            "start-order":"1"
+            "id": "org.apache.felix:org.apache.felix.cm.json:1.0.2",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.commons:commons-lang3:3.9",
-            "start-order":"1"
+            "id": "org.apache.aries:org.apache.aries.util:1.1.3",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.felix:org.apache.felix.configadmin:1.9.16",
-            "start-order":"1"
+            "id": "org.apache.commons:commons-lang3:${commons-lang3-version}",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.felix:org.apache.felix.converter:1.0.14",
-            "start-order":"1"
+            "id": "org.apache.felix:org.apache.felix.configadmin:1.9.18",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.felix:org.apache.felix.eventadmin:1.5.0",
-            "start-order":"1"
+            "id": "org.apache.felix:org.apache.felix.converter:1.0.14",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.geronimo.specs:geronimo-annotation_1.3_spec:1.1",
-            "start-order":"1"
+            "id": "org.apache.felix:org.apache.felix.eventadmin:1.5.0",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.geronimo.specs:geronimo-atinject_1.0_spec:1.1",
-            "start-order":"1"
+            "id": "org.apache.geronimo.specs:geronimo-annotation_1.3_spec:1.3",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.geronimo.specs:geronimo-ws-metadata_2.0_spec:1.1.3",
-            "start-order":"1"
+            "id": "org.apache.geronimo.specs:geronimo-atinject_1.0_spec:${geronimo-atinject_1-0_spec-version}",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.jaxb-impl:2.2.11_1",
-            "start-order":"1"
+            "id": "org.apache.geronimo.specs:geronimo-ws-metadata_2.0_spec:1.1.3",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.saaj-impl:1.3.23_2",
-            "start-order":"1"
+            "id": "org.apache.servicemix.bundles:org.apache.servicemix.bundles.jaxb-impl:2.2.11_1",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.servicemix.specs:org.apache.servicemix.specs.jaxb-api-2.2:2.9.0",
-            "start-order":"1"
+            "id": "org.apache.servicemix.bundles:org.apache.servicemix.bundles.saaj-impl:1.5.1_1",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.servicemix.specs:org.apache.servicemix.specs.jaxws-api-2.2:2.9.0",
-            "start-order":"1"
+            "id": "org.apache.servicemix.specs:org.apache.servicemix.specs.jaxb-api-2.2:2.9.0",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.servicemix.specs:org.apache.servicemix.specs.saaj-api-1.3:2.8.0",
-            "start-order":"1"
+            "id": "org.apache.servicemix.specs:org.apache.servicemix.specs.jaxws-api-2.2:2.9.0",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.commons.johnzon:1.2.4",
-            "start-order":"1"
+            "id": "org.apache.servicemix.specs:org.apache.servicemix.specs.saaj-api-1.3:2.9.0",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.commons.log:5.1.12",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.commons.johnzon:${org-apache-sling-commons-johnzon-version}",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.commons.logservice:1.1.0",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.commons.log:5.1.12",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.commons.osgi:2.4.0",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.commons.logservice:1.1.0",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.installer.core:3.11.2",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.commons.osgi:2.4.2",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.installer.factory.configuration:1.3.2",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.installer.core:3.11.4",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.installer.provider.file:1.3.0",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.installer.factory.configuration:1.3.2",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.javax.activation:0.1.0",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.installer.provider.file:1.3.0",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.settings:1.4.0",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.javax.activation:0.2.0",
+            "start-order": "1"
         },
         {
-            "id":"org.jvnet.staxex:stax-ex:1.7.6",
-            "start-order":"1"
+            "id": "org.apache.sling:org.apache.sling.settings:1.4.2",
+            "start-order": "1"
         },
         {
-            "id":"org.osgi:org.osgi.service.log:1.4.0",
-            "start-order":"1"
+            "id": "org.jvnet.staxex:stax-ex:1.8.3",
+            "start-order": "1"
         },
         {
-            "id":"org.osgi:org.osgi.util.function:1.1.0",
-            "start-order":"1"
+            "id": "org.osgi:org.osgi.service.log:1.4.0",
+            "start-order": "1"
         },
         {
-            "id":"org.osgi:org.osgi.util.promise:1.1.1",
-            "start-order":"1"
+            "id": "org.osgi:org.osgi.util.function:1.1.0",
+            "start-order": "1"
         },
         {
-            "id":"org.osgi:org.osgi.util.pushstream:1.0.1",
-            "start-order":"1"
+            "id": "org.osgi:org.osgi.util.promise:1.1.1",
+            "start-order": "1"
         },
         {
-            "id":"org.slf4j:jcl-over-slf4j:${slf4j.version}",
-            "start-order":"1"
+            "id": "org.osgi:org.osgi.util.pushstream:1.0.1",
+            "start-order": "1"
         },
         {
-            "id":"org.slf4j:log4j-over-slf4j:${slf4j.version}",
-            "start-order":"1"
+            "id": "org.slf4j:jcl-over-slf4j:${slf4j-version}",
+            "start-order": "1"
         },
         {
-            "id":"org.slf4j:slf4j-api:${slf4j.version}",
-            "start-order":"1"
+            "id": "org.slf4j:log4j-over-slf4j:${slf4j-version}",
+            "start-order": "1"
         },
         {
-            "id":"org.apache.felix:org.apache.felix.scr:2.1.20",
-            "start-order":"1"
+            "id": "org.slf4j:slf4j-api:${slf4j-version}",
+            "start-order": "1"
+        },
+        {
+            "id": "org.apache.felix:org.apache.felix.scr:2.1.24",
+            "start-order": "1"
         }
-
     ],
-    "framework-properties":{
-        "localIndexDir":"${sling.home}/repository/index",
-        "repository.home":"${sling.home}/repository",
-        "sling.jre.java.xml":",javax.xml;version=\"2.1.0\",javax.xml.datatype;uses:=\"javax.xml.namespace\";version=\"2.1.0\",javax.xml.namespace;version=\"2.1.0\",javax.xml.parsers;uses:=\"javax.xml.validation,org.w3c.dom,org.xml.sax,org.xml.sax.helpers\";version=\"2.1.0\",javax.xml.stream;uses:=\"javax.xml.namespace,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform\";version=\"1.0.0\",javax.xml.stream.events;uses:=\"javax.xml.namespace,javax.xml.stream\";version=\"1.0.0 [...]
-        "felix.systempackages.calculate.uses":"true",
-        "org.osgi.framework.system.packages":"org.osgi.framework;version=\"1.9\",org.osgi.framework.dto;version=\"1.8\";uses:=\"org.osgi.dto\",org.osgi.framework.hooks.bundle;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.framework.hooks.resolver;version=\"1.0\";uses:=\"org.osgi.framework.wiring\",org.osgi.framework.hooks.service;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.framework.hooks.weaving;version=\"1.1\";uses:=\"org.osgi.framework.wiring\",org.osgi.framework.laun [...]
-        "felix.systempackages.substitution":"true",
-        "sling.jre-jpms":"{dollar}{felix.jpms.java.base}{dollar}{felix.jpms.java.compiler}{dollar}{felix.jpms.java.datatransfer}{dollar}{felix.jpms.java.desktop}{dollar}{felix.jpms.java.instrument}{dollar}{felix.jpms.java.logging}{dollar}{felix.jpms.java.management}{dollar}{felix.jpms.java.management.rmi}{dollar}{felix.jpms.java.naming}{dollar}{felix.jpms.java.net.http}{dollar}{felix.jpms.java.prefs}{dollar}{felix.jpms.java.rmi}{dollar}{felix.jpms.java.scripting}{dollar}{felix.jpms.java. [...]
-        "sling.jpms.java.xml":"{dollar}{sling.jre.java.xml},javax.xml.catalog;uses:=\"javax.xml.namespace\";version=\"1.0.0\"",
-        "sling.jre-1.8":",java.applet;version=\"{dollar}{felix.detect.java.version}\",java.awt;version=\"{dollar}{felix.detect.java.version}\",java.awt.color;version=\"{dollar}{felix.detect.java.version}\",java.awt.datatransfer;version=\"{dollar}{felix.detect.java.version}\",java.awt.dnd;version=\"{dollar}{felix.detect.java.version}\",java.awt.event;version=\"{dollar}{felix.detect.java.version}\",java.awt.font;version=\"{dollar}{felix.detect.java.version}\",java.awt.geom;version=\"{dolla [...]
+    "framework-properties": {
+        "localIndexDir": "${sling.home}/repository/index",
+        "repository.home": "${sling.home}/repository",
+        "sling.jre.java.xml": ",javax.xml;version=\"2.1.0\",javax.xml.datatype;uses:=\"javax.xml.namespace\";version=\"2.1.0\",javax.xml.namespace;version=\"2.1.0\",javax.xml.parsers;uses:=\"javax.xml.validation,org.w3c.dom,org.xml.sax,org.xml.sax.helpers\";version=\"2.1.0\",javax.xml.stream;uses:=\"javax.xml.namespace,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform\";version=\"1.0.0\",javax.xml.stream.events;uses:=\"javax.xml.namespace,javax.xml.stream\";version=\"1.0. [...]
+        "felix.systempackages.calculate.uses": "true",
+        "org.osgi.framework.system.packages": "org.osgi.framework;version=\"1.9\",org.osgi.framework.dto;version=\"1.8\";uses:=\"org.osgi.dto\",org.osgi.framework.hooks.bundle;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.framework.hooks.resolver;version=\"1.0\";uses:=\"org.osgi.framework.wiring\",org.osgi.framework.hooks.service;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.framework.hooks.weaving;version=\"1.1\";uses:=\"org.osgi.framework.wiring\",org.osgi.framework.lau [...]
+        "felix.systempackages.substitution": "true",
+        "sling.jre-jpms": "{dollar}{felix.jpms.java.base}{dollar}{felix.jpms.java.compiler}{dollar}{felix.jpms.java.datatransfer}{dollar}{felix.jpms.java.desktop}{dollar}{felix.jpms.java.instrument}{dollar}{felix.jpms.java.logging}{dollar}{felix.jpms.java.management}{dollar}{felix.jpms.java.management.rmi}{dollar}{felix.jpms.java.naming}{dollar}{felix.jpms.java.net.http}{dollar}{felix.jpms.java.prefs}{dollar}{felix.jpms.java.rmi}{dollar}{felix.jpms.java.scripting}{dollar}{felix.jpms.java [...]
+        "sling.jpms.java.xml": "{dollar}{sling.jre.java.xml},javax.xml.catalog;uses:=\"javax.xml.namespace\";version=\"1.0.0\"",
+        "sling.jre-1.8": ",java.applet;version=\"{dollar}{felix.detect.java.version}\",java.awt;version=\"{dollar}{felix.detect.java.version}\",java.awt.color;version=\"{dollar}{felix.detect.java.version}\",java.awt.datatransfer;version=\"{dollar}{felix.detect.java.version}\",java.awt.dnd;version=\"{dollar}{felix.detect.java.version}\",java.awt.event;version=\"{dollar}{felix.detect.java.version}\",java.awt.font;version=\"{dollar}{felix.detect.java.version}\",java.awt.geom;version=\"{doll [...]
     }
-}
+}
\ No newline at end of file
diff --git a/feature/src/main/features/caconfig.json b/feature/src/main/features/caconfig.json
index 36ac153..4d34392 100644
--- a/feature/src/main/features/caconfig.json
+++ b/feature/src/main/features/caconfig.json
@@ -2,7 +2,7 @@
 {
     "bundles":[
         {
-            "id":"org.apache.sling:org.apache.sling.caconfig.api:1.2.0",
+            "id":"org.apache.sling:org.apache.sling.caconfig.api:${org-apache-sling-caconfig-api-version}",
             "start-order":"20"
         },
         {
diff --git a/feature/src/main/features/discovery.json b/feature/src/main/features/discovery.json
index af52a5b..7e0a558 100644
--- a/feature/src/main/features/discovery.json
+++ b/feature/src/main/features/discovery.json
@@ -14,11 +14,11 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.discovery.oak:1.2.28",
+            "id":"org.apache.sling:org.apache.sling.discovery.oak:1.2.30",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.discovery.support:1.0.4",
+            "id":"org.apache.sling:org.apache.sling.discovery.support:1.0.6",
             "start-order":"20"
         }
     ],
diff --git a/feature/src/main/features/models-jacksonexporter.json b/feature/src/main/features/models-jacksonexporter.json
index 1bc629a..ec1181e 100644
--- a/feature/src/main/features/models-jacksonexporter.json
+++ b/feature/src/main/features/models-jacksonexporter.json
@@ -2,15 +2,15 @@
 {
     "bundles":[
         {
-            "id":"com.fasterxml.jackson.core:jackson-annotations:${jackson.version}",
+            "id":"com.fasterxml.jackson.core:jackson-annotations:${jackson-version}",
             "start-order":"20"
         },
         {
-            "id":"com.fasterxml.jackson.core:jackson-core:${jackson.version}",
+            "id":"com.fasterxml.jackson.core:jackson-core:${jackson-version}",
             "start-order":"20"
         },
         {
-            "id":"com.fasterxml.jackson.core:jackson-databind:${jackson.version}",
+            "id":"com.fasterxml.jackson.core:jackson-databind:${jackson-version}",
             "start-order":"20"
         },
         {
diff --git a/feature/src/main/features/oak/oak_base.json b/feature/src/main/features/oak/oak_base.json
index 6ae0901..9b41098 100644
--- a/feature/src/main/features/oak/oak_base.json
+++ b/feature/src/main/features/oak/oak_base.json
@@ -10,91 +10,91 @@
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:jackrabbit-data:${jackrabbit.version}",
+            "id":"org.apache.jackrabbit:jackrabbit-data:${jackrabbit-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:jackrabbit-jcr-commons:${jackrabbit.version}",
+            "id":"org.apache.jackrabbit:jackrabbit-jcr-commons:${jackrabbit-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:jackrabbit-jcr-rmi:${jackrabbit.version}",
+            "id":"org.apache.jackrabbit:jackrabbit-jcr-rmi:${jackrabbit-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:jackrabbit-spi-commons:${jackrabbit.version}",
+            "id":"org.apache.jackrabbit:jackrabbit-spi-commons:${jackrabbit-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:jackrabbit-spi:${jackrabbit.version}",
+            "id":"org.apache.jackrabbit:jackrabbit-spi:${jackrabbit-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:jackrabbit-webdav:${jackrabbit.version}",
+            "id":"org.apache.jackrabbit:jackrabbit-webdav:${jackrabbit-version}",
             "start-order":"15"
         },        
         {
-            "id":"org.apache.jackrabbit:oak-api:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-api:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-blob-plugins:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-blob-plugins:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-blob:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-blob:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-commons:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-commons:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-core-spi:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-core-spi:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-core:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-core:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-jackrabbit-api:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-jackrabbit-api:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-jcr:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-jcr:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-lucene:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-lucene:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-query-spi:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-query-spi:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-security-spi:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-security-spi:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-segment-tar:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-segment-tar:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-store-composite:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-store-composite:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-store-document:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-store-document:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-store-spi:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-store-spi:${oak-version}",
             "start-order":"15"
         },
         {
-            "id":"org.apache.jackrabbit:oak-authorization-principalbased:${oak.version}",
+            "id":"org.apache.jackrabbit:oak-authorization-principalbased:${oak-version}",
             "start-order":"15"
         },
         {
@@ -102,7 +102,7 @@
             "start-order":"15"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.jcr.base:3.1.4",
+            "id":"org.apache.sling:org.apache.sling.jcr.base:3.1.6",
             "start-order":"15"
         },
         {
@@ -122,7 +122,7 @@
             "start-order":"15"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.jcr.oak.server:1.2.6",
+            "id":"org.apache.sling:org.apache.sling.jcr.oak.server:1.2.10",
             "start-order":"20"
         },
         {
@@ -142,11 +142,11 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.jcr.jackrabbit.accessmanager:3.0.6",
+            "id":"org.apache.sling:org.apache.sling.jcr.jackrabbit.accessmanager:3.0.8",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.jcr.jackrabbit.usermanager:2.2.10",
+            "id":"org.apache.sling:org.apache.sling.jcr.jackrabbit.usermanager:2.2.12",
             "start-order":"20"
         }
     ],
diff --git a/feature/src/main/features/scripting.json b/feature/src/main/features/scripting.json
index 45c4205..019a536 100644
--- a/feature/src/main/features/scripting.json
+++ b/feature/src/main/features/scripting.json
@@ -2,27 +2,27 @@
 {
     "bundles":[
         {
-            "id":"org.antlr:antlr4-runtime:4.7.2",
+            "id":"org.antlr:antlr4-runtime:4.9",
             "start-order":"20"
         },
         {
-            "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.rhino:1.7.10_1",
+            "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.rhino:1.7.13_1",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.api:2.2.0",
+            "id":"org.apache.sling:org.apache.sling.scripting.api:${org-apache-sling-scripting-api-version}",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.core:2.3.2",
+            "id":"org.apache.sling:org.apache.sling.scripting.core:2.3.4",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.el-api:1.0.2",
+            "id":"org.apache.sling:org.apache.sling.scripting.el-api:1.0.4",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.javascript:3.1.2",
+            "id":"org.apache.sling:org.apache.sling.scripting.javascript:3.1.4",
             "start-order":"20"
         },
         {
@@ -30,7 +30,7 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.jsp.taglib:2.4.0",
+            "id":"org.apache.sling:org.apache.sling.scripting.jsp.taglib:${org-apache-sling-scripting-jsp-taglib-version}",
             "start-order":"20"
         },
         {
@@ -38,15 +38,15 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.sightly.compiler.java:1.2.0-1.4.0",
+            "id":"org.apache.sling:org.apache.sling.scripting.sightly.compiler.java:1.2.2-1.4.0",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.sightly.compiler:1.2.6-1.4.0",
+            "id":"org.apache.sling:org.apache.sling.scripting.sightly.compiler:1.2.12-1.4.0",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.sightly.js.provider:1.2.0",
+            "id":"org.apache.sling:org.apache.sling.scripting.sightly.js.provider:1.2.6",
             "start-order":"20"
         },
         {
@@ -54,11 +54,11 @@
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.sightly.runtime:1.2.2-1.4.0",
+            "id":"org.apache.sling:org.apache.sling.scripting.sightly.runtime:1.2.4-1.4.0",
             "start-order":"20"
         },
         {
-            "id":"org.apache.sling:org.apache.sling.scripting.sightly:1.4.2-1.4.0",
+            "id":"org.apache.sling:org.apache.sling.scripting.sightly:1.4.6-1.4.0",
             "start-order":"20"
         }
     ],
diff --git a/feature/src/main/features/webconsole.json b/feature/src/main/features/webconsole.json
index 06156c5..be17373 100644
--- a/feature/src/main/features/webconsole.json
+++ b/feature/src/main/features/webconsole.json
@@ -1,7 +1,7 @@
 {
     "bundles": [
         {
-            "id":"org.apache.felix:org.apache.felix.webconsole:4.5.0",
+            "id":"org.apache.felix:org.apache.felix.webconsole:${org.apache.felix.webconsole-version}",
             "start-order":"5"
         },    
         {
diff --git a/pom.xml b/pom.xml
index 5305f8d..68018fd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,40 @@
         <sling.cms.java.version>8</sling.cms.java.version>
         <maven.compiler.source>1.${sling.cms.java.version}</maven.compiler.source>
         <maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
+
+        <!-- Common Versions -->
+        <cms-version>${project.parent.version}</cms-version>
+        <cocoon-serializers-charsets-version>1.0.2</cocoon-serializers-charsets-version>
+        <commons-io-version>2.8.0</commons-io-version>
+        <commons-lang3-version>3.11</commons-lang3-version>
+        <commons-text-version>1.9</commons-text-version>
+        <composum-version>1.12.4</composum-version>
+        <geronimo-atinject_1-0_spec-version>1.2</geronimo-atinject_1-0_spec-version>
+        <groovy-version>3.0.7</groovy-version>
+        <httpclient-version>4.5.13</httpclient-version>
+        <jackrabbit-version>2.20.0</jackrabbit-version>
+        <jackson-version>2.12.0</jackson-version>
+        <javax-annotation-api-version>1.3.2</javax-annotation-api-version>
+        <jsoup-version>1.13.1</jsoup-version>
+        <jsp-api-version>2.0</jsp-api-version>
+        <jstl-version>1.2_1</jstl-version>
+        <mockito-core-version>3.6.28</mockito-core-version>
+        <oak-version>1.36</oak-version>
+        <org-apache-sling-api-version>2.23.0</org-apache-sling-api-version>
+        <org-apache-sling-caconfig-api-version>1.2.0</org-apache-sling-caconfig-api-version>
+        <org-apache-sling-commons-johnzon-version>1.2.6</org-apache-sling-commons-johnzon-version>
+        <org-apache-sling-engine-version>2.7.2</org-apache-sling-engine-version>
+        <org-apache-sling-fileoptim-version>0.9.4</org-apache-sling-fileoptim-version>
+        <org-apache-sling-models-api-version>1.3.8</org-apache-sling-models-api-version>
+        <org-apache-sling-scripting-api-version>2.2.0</org-apache-sling-scripting-api-version>
+        <org-apache-sling-scripting-jsp-taglib-version>2.4.0</org-apache-sling-scripting-jsp-taglib-version>
+        <org-apache-sling-testing-sling-mock-junit4-version>2.6.2</org-apache-sling-testing-sling-mock-junit4-version>
+        <org.apache.felix.webconsole-version>4.5.4</org.apache.felix.webconsole-version>
+        <osgi-annotation-version>6.0.1</osgi-annotation-version>
+        <pdfbox-version>2.0.21</pdfbox-version>
+        <servlet-api-version>2.5</servlet-api-version>
+        <slf4j-version>1.7.25</slf4j-version>
+        <tika-version>1.25</tika-version>
     </properties>
 
     <modules>
@@ -57,55 +91,55 @@
             <dependency>
                 <groupId>org.apache.cocoon</groupId>
                 <artifactId>cocoon-serializers-charsets</artifactId>
-                <version>1.0.0</version>
+                <version>${cocoon-serializers-charsets-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>org.apache.felix.webconsole</artifactId>
-                <version>4.3.8</version>
+                <version>${org.apache.felix.webconsole-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.geronimo.bundles</groupId>
                 <artifactId>jstl</artifactId>
-                <version>1.2_1</version>
+                <version>${jstl-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.geronimo.specs</groupId>
                 <artifactId>geronimo-atinject_1.0_spec</artifactId>
-                <version>1.0</version>
+                <version>${geronimo-atinject_1-0_spec-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.httpcomponents</groupId>
                 <artifactId>httpclient</artifactId>
-                <version>4.5.6</version>
+                <version>${httpclient-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.jackrabbit</groupId>
-                <artifactId>jackrabbit-api</artifactId>
-                <version>2.18.2</version>
+                <artifactId>oak-jackrabbit-api</artifactId>
+                <version>${oak-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.jackrabbit</groupId>
                 <artifactId>jackrabbit-jcr-commons</artifactId>
-                <version>2.7.5</version>
+                <version>${jackrabbit-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.jackrabbit</groupId>
                 <artifactId>oak-core</artifactId>
-                <version>1.16.0</version>
+                <version>${oak-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.jackrabbit</groupId>
                 <artifactId>oak-jcr</artifactId>
-                <version>1.16.0</version>
+                <version>${oak-version}</version>
                 <scope>provided</scope>
             </dependency>
 
@@ -113,13 +147,13 @@
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.api</artifactId>
-                <version>2.20.0</version>
+                <version>${org-apache-sling-api-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.caconfig.api</artifactId>
-                <version>1.1.2</version>
+                <version>${org-apache-sling-caconfig-api-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -143,13 +177,13 @@
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.commons.johnzon</artifactId>
-                <version>1.1.2</version>
+                <version>${org-apache-sling-commons-johnzon-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <artifactId>org.apache.sling.discovery.api</artifactId>
-                <version>1.0.4</version>
                 <groupId>org.apache.sling</groupId>
+                <version>1.0.4</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -161,7 +195,7 @@
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.engine</artifactId>
-                <version>2.6.18</version>
+                <version>${org-apache-sling-engine-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -173,7 +207,7 @@
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.fileoptim</artifactId>
-                <version>0.9.2</version>
+                <version>${org-apache-sling-fileoptim-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -191,7 +225,7 @@
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.models.api</artifactId>
-                <version>1.3.8</version>
+                <version>${org-apache-sling-models-api-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -203,13 +237,13 @@
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.scripting.api</artifactId>
-                <version>2.2.0</version>
+                <version>${org-apache-sling-scripting-api-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.scripting.jsp.taglib</artifactId>
-                <version>2.4.0</version>
+                <version>${org-apache-sling-scripting-jsp-taglib-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -227,83 +261,89 @@
                 <scope>provided</scope>
             </dependency>
             <dependency>
+                <groupId>com.google.guava</groupId>
+                <artifactId>guava</artifactId>
+                <version>15.0</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
                 <groupId>com.sun.mail</groupId>
                 <artifactId>javax.mail</artifactId>
                 <version>1.6.2</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>${commons-io-version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
                 <groupId>javax.annotation</groupId>
                 <artifactId>javax.annotation-api</artifactId>
-                <version>1.3.2</version>
+                <version>${javax-annotation-api-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-lang3</artifactId>
-                <version>3.8.1</version>
+                <groupId>javax.servlet</groupId>
+                <artifactId>jsp-api</artifactId>
+                <version>${jsp-api-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-math</artifactId>
-                <version>2.2</version>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>
+                <version>${servlet-api-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.commons</groupId>
-                <artifactId>commons-text</artifactId>
-                <version>1.8</version>
+                <artifactId>commons-lang3</artifactId>
+                <version>${commons-lang3-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>commons-io</groupId>
-                <artifactId>commons-io</artifactId>
-                <version>2.6</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-math</artifactId>
+                <version>2.2</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>com.google.guava</groupId>
-                <artifactId>guava</artifactId>
-                <version>15.0</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-text</artifactId>
+                <version>${commons-text-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
-                <groupId>javax.servlet</groupId>
-                <artifactId>servlet-api</artifactId>
-                <version>2.5</version>
-                <scope>provided</scope>
+                <groupId>org.jetbrains</groupId>
+                <artifactId>annotations</artifactId>
+                <version>20.1.0</version>
+                <scope>compile</scope>
             </dependency>
             <dependency>
                 <groupId>org.osgi</groupId>
                 <artifactId>osgi.annotation</artifactId>
-                <version>6.0.1</version>
-                <scope>provided</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.jetbrains</groupId>
-                <artifactId>annotations</artifactId>
-                <version>16.0.2</version>
+                <version>${osgi-annotation-version}</version>
                 <scope>provided</scope>
             </dependency>
 
             <!-- Document Processing Dependencies -->
             <dependency>
                 <artifactId>jsoup</artifactId>
-                <version>1.11.3</version>
                 <groupId>org.jsoup</groupId>
+                <version>${jsoup-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>net.coobird</groupId>
                 <artifactId>thumbnailator</artifactId>
-                <version>0.4.8</version>
+                <version>0.4.13</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
                 <groupId>org.apache.pdfbox</groupId>
                 <artifactId>pdfbox</artifactId>
-                <version>2.0.16</version>
+                <version>${pdfbox-version}</version>
                 <scope>provided</scope>
             </dependency>
             <dependency>
@@ -321,7 +361,7 @@
             <dependency>
                 <groupId>org.apache.tika</groupId>
                 <artifactId>tika-core</artifactId>
-                <version>1.22</version>
+                <version>${tika-version}</version>
                 <scope>provided</scope>
             </dependency>
 
@@ -329,13 +369,13 @@
             <dependency>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
-                <version>2.3.16</version>
+                <version>${org-apache-sling-testing-sling-mock-junit4-version}</version>
                 <scope>test</scope>
             </dependency>
             <dependency>
                 <groupId>org.mockito</groupId>
                 <artifactId>mockito-core</artifactId>
-                <version>2.27.0</version>
+                <version>${mockito-core-version}</version>
                 <scope>test</scope>
             </dependency>
 
diff --git a/reference/pom.xml b/reference/pom.xml
index 79db357..6c4b682 100644
--- a/reference/pom.xml
+++ b/reference/pom.xml
@@ -103,6 +103,10 @@
             <artifactId>jackrabbit-jcr-commons</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.apache.jackrabbit</groupId>
+            <artifactId>oak-jackrabbit-api</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>osgi.annotation</artifactId>
         </dependency>
@@ -111,9 +115,8 @@
             <artifactId>javax.servlet-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>jstl</groupId>
+            <groupId>org.apache.geronimo.bundles</groupId>
             <artifactId>jstl</artifactId>
-            <version>1.2</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -122,7 +125,6 @@
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>jsp-api</artifactId>
-            <version>2.0</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -140,6 +142,10 @@
             <groupId>com.sun.mail</groupId>
             <artifactId>javax.mail</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.jetbrains</groupId>
+            <artifactId>annotations</artifactId>
+        </dependency>
 
         <!-- Testing dependencies -->
         <dependency>
diff --git a/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/FormHandler.java b/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/FormHandler.java
index 053098e..1e3ed93 100644
--- a/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/FormHandler.java
+++ b/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/FormHandler.java
@@ -37,6 +37,7 @@ import org.apache.sling.cms.ResourceTree;
 import org.apache.sling.cms.reference.forms.FormAction;
 import org.apache.sling.cms.reference.forms.FormException;
 import org.apache.sling.cms.reference.forms.FormRequest;
+import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferencePolicyOption;
@@ -49,11 +50,15 @@ public class FormHandler extends SlingAllMethodsServlet {
 
     private static final Logger log = LoggerFactory.getLogger(FormHandler.class);
 
-    @Reference(policyOption = ReferencePolicyOption.GREEDY)
-    private List<FormAction> formActions;
+    private transient List<FormAction> formActions;
 
     private static final long serialVersionUID = -8149443208959899098L;
 
+    @Activate
+    public FormHandler(@Reference(policyOption = ReferencePolicyOption.GREEDY) List<FormAction> formActions) {
+        this.formActions = formActions;
+    }
+
     @Override
     protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response)
             throws ServletException, IOException {
@@ -62,10 +67,13 @@ public class FormHandler extends SlingAllMethodsServlet {
                 .map(PageManager::getPage).map(Page::getPath)
                 .orElse(StringUtils.substringBefore(request.getResource().getPath(), "/" + JcrConstants.JCR_CONTENT));
 
-        List<Resource> actionResources = ResourceTree.stream(request.getResource().getChild("actions"))
-                .map(ResourceTree::getResource).collect(Collectors.toList());
-
         try {
+            if (request.getResource().getChild("actions") == null) {
+                throw new FormException("No actions provided to handle this form submission");
+            }
+            List<Resource> actionResources = ResourceTree.stream(request.getResource().getChild("actions"))
+                    .map(ResourceTree::getResource).collect(Collectors.toList());
+
             FormRequest formRequest = getFormRequest(request);
             if (formRequest == null) {
                 log.warn("Unable to create form request");
@@ -119,4 +127,5 @@ public class FormHandler extends SlingAllMethodsServlet {
             throw new FormException("Unable to adapt to a form request");
         }
     }
+
 }
diff --git a/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/FormRequestImpl.java b/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/FormRequestImpl.java
index c07cc2b..a822990 100644
--- a/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/FormRequestImpl.java
+++ b/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/FormRequestImpl.java
@@ -43,7 +43,6 @@ public class FormRequestImpl implements FormRequest {
 
     private static final Logger log = LoggerFactory.getLogger(FormRequestImpl.class);
 
-    @OSGiService(injectionStrategy = InjectionStrategy.OPTIONAL)
     private List<FieldHandler> fieldHandlers;
 
     private Map<String, Object> formData = new HashMap<>();
@@ -124,4 +123,14 @@ public class FormRequestImpl implements FormRequest {
         return "errorval-" + this.getOriginalRequest().getResource().getPath();
     }
 
+    @OSGiService(injectionStrategy = InjectionStrategy.OPTIONAL)
+    public void setFieldHandlers(List<FieldHandler> fieldHandlers) {
+        this.fieldHandlers = fieldHandlers;
+    }
+
+    @OSGiService(injectionStrategy = InjectionStrategy.OPTIONAL)
+    public void setFormValueProvider(List<FormValueProvider> formValueProvider) {
+        this.formValueProvider = formValueProvider;
+    }
+
 }
diff --git a/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/actions/SendEmailAction.java b/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/actions/SendEmailAction.java
index f4dedc7..630e129 100644
--- a/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/actions/SendEmailAction.java
+++ b/reference/src/main/java/org/apache/sling/cms/reference/forms/impl/actions/SendEmailAction.java
@@ -43,7 +43,6 @@ public class SendEmailAction implements FormAction {
     public static final String SUBJECT = "subject";
     public static final String TO = "to";
 
-    @Reference
     private MailService mailService;
 
     @Override
@@ -57,8 +56,7 @@ public class SendEmailAction implements FormAction {
         try {
             @NotNull
             final MimeMessage message = mailService.getMessageBuilder()
-                    .from(sub.replace(properties.get(FROM, String.class)))
-                    .to(to)
+                    .from(sub.replace(properties.get(FROM, String.class))).to(to)
                     .subject(sub.replace(properties.get(SUBJECT, String.class)))
                     .text(sub.replace(properties.get(MESSAGE, String.class))).build();
 
@@ -77,4 +75,9 @@ public class SendEmailAction implements FormAction {
         return "reference/components/forms/actions/sendemail".equals(actionResource.getResourceType());
     }
 
+    @Reference
+    public void setMailService(MailService mailService) {
+        this.mailService = mailService;
+    }
+
 }
diff --git a/reference/src/test/java/org/apache/sling/cms/reference/form/impl/FormHandlerTest.java b/reference/src/test/java/org/apache/sling/cms/reference/form/impl/FormHandlerTest.java
index cb601b5..030081d 100644
--- a/reference/src/test/java/org/apache/sling/cms/reference/form/impl/FormHandlerTest.java
+++ b/reference/src/test/java/org/apache/sling/cms/reference/form/impl/FormHandlerTest.java
@@ -16,10 +16,17 @@
  */
 package org.apache.sling.cms.reference.form.impl;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.never;
+
 import java.io.IOException;
 import java.util.Arrays;
 
 import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletResponse;
+
+import com.google.common.collect.ImmutableMap;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.cms.reference.forms.FormException;
@@ -36,57 +43,65 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.mockito.internal.util.reflection.FieldSetter;
-
-import com.google.common.collect.ImmutableMap;
 
 public class FormHandlerTest {
     @Rule
     public final SlingContext context = new SlingContext();
     private FormHandler formHandler;
     private MailService mailService;
+    private FormRequestImpl formRequest;
 
     @Before
     public void init() throws NoSuchFieldException, SecurityException, FormException {
         SlingContextHelper.initContext(context);
         context.request().setMethod("POST");
-        context.request().setResource(context.resourceResolver().getResource("/form/jcr:content/container/form"));
-
         context.request()
                 .setParameterMap(ImmutableMap.<String, Object>builder().put("requiredtextarea", "Hello World!")
                         .put("singleselect", "Hello World!").put("anotherkey", "Hello World!").put("money", "123")
                         .put("patternfield", "123").put("double", "2.7").put("integer", "2")
                         .put("datefield", "2019-02-02").build());
 
-        final FormRequestImpl formRequest = new FormRequestImpl(context.request());
+        formRequest = new FormRequestImpl(context.request());
 
-        FieldSetter.setField(formRequest, formRequest.getClass().getDeclaredField("fieldHandlers"),
-                Arrays.asList(new SelectionHandler(), new TextareaHandler(), new TextfieldHandler()));
+        formRequest
+                .setFieldHandlers(Arrays.asList(new SelectionHandler(), new TextareaHandler(), new TextfieldHandler()));
 
-        formRequest.init();
+        final SendEmailAction sendEmailAction = new SendEmailAction();
+        mailService = Mockito.mock(MailService.class);
+        Mockito.when(mailService.getMessageBuilder()).thenReturn(new MockMessageBuilder());
+        sendEmailAction.setMailService(mailService);
 
-        formHandler = new FormHandler() {
+        formHandler = new FormHandler(Arrays.asList(sendEmailAction)) {
             private static final long serialVersionUID = 1L;
 
             protected FormRequest getFormRequest(final SlingHttpServletRequest request) {
                 return formRequest;
             }
         };
+    }
 
-        final SendEmailAction sendEmailAction = new SendEmailAction();
-        mailService = Mockito.mock(MailService.class);
-        Mockito.when(mailService.getMessageBuilder()).thenReturn(new MockMessageBuilder());
-        FieldSetter.setField(sendEmailAction, sendEmailAction.getClass().getDeclaredField("mailService"), mailService);
+    @Test
+    public void testPost() throws ServletException, IOException, FormException {
 
-        FieldSetter.setField(formHandler, FormHandler.class.getDeclaredField("formActions"),
-                Arrays.asList(sendEmailAction));
-        context.request().setMethod("POST");
+        context.request().setResource(context.resourceResolver().getResource("/form/jcr:content/container/form"));
+        formRequest.init();
+
+        formHandler.service(context.request(), context.response());
+        Mockito.verify(mailService).sendMessage(Mockito.any());
     }
 
     @Test
-    public void testPost() throws ServletException, IOException {
+    public void testNoActions() throws ServletException, IOException, FormException {
+
+        context.request()
+                .setResource(context.resourceResolver().getResource("/form-no-actions/jcr:content/container/form"));
+        formRequest.init();
+
         formHandler.service(context.request(), context.response());
-        Mockito.verify(mailService).sendMessage(Mockito.any());
+
+        assertTrue(HttpServletResponse.SC_MOVED_TEMPORARILY == context.response().getStatus());
+        assertEquals("/form-no-actions.html?error=actions", context.response().getHeader("Location"));
+        Mockito.verify(mailService, never()).sendMessage(Mockito.any());
     }
 
 }
diff --git a/reference/src/test/java/org/apache/sling/cms/reference/form/impl/FormRequestImplTest.java b/reference/src/test/java/org/apache/sling/cms/reference/form/impl/FormRequestImplTest.java
index 90f9ba7..c4299b1 100644
--- a/reference/src/test/java/org/apache/sling/cms/reference/form/impl/FormRequestImplTest.java
+++ b/reference/src/test/java/org/apache/sling/cms/reference/form/impl/FormRequestImplTest.java
@@ -33,7 +33,6 @@ import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.mockito.internal.util.reflection.FieldSetter;
 
 import com.google.common.collect.ImmutableMap;
 
@@ -55,8 +54,8 @@ public class FormRequestImplTest {
 
         formRequest = new FormRequestImpl(context.request());
 
-        FieldSetter.setField(formRequest, formRequest.getClass().getDeclaredField("fieldHandlers"),
-                Arrays.asList(new SelectionHandler(), new TextareaHandler(), new TextfieldHandler()));
+        formRequest
+                .setFieldHandlers(Arrays.asList(new SelectionHandler(), new TextareaHandler(), new TextfieldHandler()));
 
         formRequest.initFields();
     }
diff --git a/reference/src/test/java/org/apache/sling/cms/reference/form/impl/SlingContextHelper.java b/reference/src/test/java/org/apache/sling/cms/reference/form/impl/SlingContextHelper.java
index 749aec5..8dafc09 100644
--- a/reference/src/test/java/org/apache/sling/cms/reference/form/impl/SlingContextHelper.java
+++ b/reference/src/test/java/org/apache/sling/cms/reference/form/impl/SlingContextHelper.java
@@ -23,6 +23,7 @@ public class SlingContextHelper {
     public static final void initContext(SlingContext context) {
 
         context.load().json("/form.json", "/form");
+        context.load().json("/form-no-actions.json", "/form-no-actions");
 
     }
 }
diff --git a/reference/src/test/java/org/apache/sling/cms/reference/form/impl/actions/SendEmailActionTest.java b/reference/src/test/java/org/apache/sling/cms/reference/form/impl/actions/SendEmailActionTest.java
index 7d713fe..81bdd08 100644
--- a/reference/src/test/java/org/apache/sling/cms/reference/form/impl/actions/SendEmailActionTest.java
+++ b/reference/src/test/java/org/apache/sling/cms/reference/form/impl/actions/SendEmailActionTest.java
@@ -33,7 +33,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.mockito.internal.util.reflection.FieldSetter;
 
 public class SendEmailActionTest {
 
@@ -54,7 +53,7 @@ public class SendEmailActionTest {
         mailService = Mockito.mock(MailService.class);
         Mockito.when(mailService.getMessageBuilder()).thenReturn(new MockMessageBuilder());
 
-        FieldSetter.setField(action, action.getClass().getDeclaredField("mailService"), mailService);
+        action.setMailService(mailService);
     }
 
     @Test
diff --git a/reference/src/test/resources/form-no-actions.json b/reference/src/test/resources/form-no-actions.json
new file mode 100644
index 0000000..8ffa62e
--- /dev/null
+++ b/reference/src/test/resources/form-no-actions.json
@@ -0,0 +1,148 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "jcr:primaryType": "nt:unstructured",
+        "jcr:title": "Test Form",
+        "sling:template": "/conf/site/site/templates/form",
+        "sling:resourceType": "test/components/pages/form",
+        "published": true,
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "invaliddate": {
+                "jcr:primaryType": "nt:unstructured",
+                "required": true,
+                "name": "datefield",
+                "type": "text",
+                "label": "Daty",
+                "saveAs": "date",
+                "sling:resourceType": "reference/components/forms/fields/textfield"
+            },
+            "form": {
+                "jcr:primaryType": "nt:unstructured",
+                "submitText": "Submit",
+                "formId": "Test Form",
+                "sling:resourceType": "reference/components/forms/form",
+                "fields": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "fieldset": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "legend": "Section 1",
+                        "sling:resourceType": "reference/components/forms/fieldset",
+                        "fields": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "textarea": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "required": false,
+                                "name": "textarea",
+                                "label": "Textarea",
+                                "sling:resourceType": "reference/components/forms/fields/textarea"
+                            },
+                            "requiredtextarea": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "required": true,
+                                "name": "requiredtextarea",
+                                "label": "Required Textarea",
+                                "sling:resourceType": "reference/components/forms/fields/textarea"
+                            },
+                            "multiselect": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "tagRoot": "/etc/taxonomy/forms/field",
+                                "addClasses": "",
+                                "required": false,
+                                "noSelection": "",
+                                "name": "multiselect",
+                                "label": "MultiSelect",
+                                "multiple": true,
+                                "sling:resourceType": "reference/components/forms/fields/selection",
+                                "display": "radioCheckbox"
+                            },
+                            "textfield": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "addClasses": "",
+                                "required": false,
+                                "name": "textfield",
+                                "type": "tel",
+                                "label": "Money Money Money",
+                                "value": "",
+                                "placeholder": "$",
+                                "sling:resourceType": "reference/components/forms/fields/textfield"
+                            },
+                            "requiredtextfield": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "addClasses": "",
+                                "additionalAttributes": [
+                                    "min=1",
+                                    "max=1000000",
+                                    "step=1"
+                                ],
+                                "pattern": "",
+                                "required": true,
+                                "name": "money",
+                                "type": "number",
+                                "label": "Money Money Money",
+                                "value": "",
+                                "saveAs": "integer",
+                                "placeholder": "$",
+                                "sling:resourceType": "reference/components/forms/fields/textfield"
+                            },
+                            "patternfield": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "required": true,
+                                "name": "patternfield",
+                                "pattern":"\\d+",
+                                "sling:resourceType": "reference/components/forms/fields/textfield"
+                            },
+                            "double": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "required": true,
+                                "name": "double",
+                                "type": "number",
+                                "label": "Daty",
+                                "saveAs": "double",
+                                "sling:resourceType": "reference/components/forms/fields/textfield"
+                            },
+                            "integer": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "required": true,
+                                "name": "integer",
+                                "type": "number",
+                                "label": "Daty",
+                                "saveAs": "integer",
+                                "sling:resourceType": "reference/components/forms/fields/textfield"
+                            },
+                            "datefield": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "required": true,
+                                "name": "datefield",
+                                "type": "date",
+                                "label": "Daty",
+                                "saveAs": "date",
+                                "sling:resourceType": "reference/components/forms/fields/textfield"
+                            },
+                            "singleselect": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "tagRoot": "/etc/taxonomy/forms/period",
+                                "addClasses": "",
+                                "required": true,
+                                "noSelection": "",
+                                "name": "singleselect",
+                                "label": "Single Select",
+                                "multiple": false,
+                                "sling:resourceType": "reference/components/forms/fields/selection",
+                                "display": "select"
+                            }
+                        }
+                    }
+                },
+                "providers": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "userprofile": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "reference/components/forms/providers/userprofile",
+                        "subpath": "jobprofile"
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/transformer/src/test/java/org/apache/sling/cms/transformer/helpers/SlingCMSContextHelper.java b/transformer/src/test/java/org/apache/sling/cms/transformer/helpers/SlingCMSContextHelper.java
index f2064f7..a0acb90 100644
--- a/transformer/src/test/java/org/apache/sling/cms/transformer/helpers/SlingCMSContextHelper.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/helpers/SlingCMSContextHelper.java
@@ -17,12 +17,11 @@
 package org.apache.sling.cms.transformer.helpers;
 
 import java.io.InputStream;
+import java.util.function.Function;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 
-import com.google.common.base.Function;
-
 public class SlingCMSContextHelper {
 
     public static final void initContext(SlingContext context) {
diff --git a/ui/pom.xml b/ui/pom.xml
index 39168e3..d4698cc 100644
--- a/ui/pom.xml
+++ b/ui/pom.xml
@@ -25,10 +25,8 @@ License. -->
       <artifactId>javax.servlet-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>jstl</groupId>
+      <groupId>org.apache.geronimo.bundles</groupId>
       <artifactId>jstl</artifactId>
-      <version>1.2</version>
-      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
@@ -37,8 +35,6 @@ License. -->
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>jsp-api</artifactId>
-      <version>2.0</version>
-      <scope>provided</scope>
     </dependency>
   </dependencies>