You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by an...@apache.org on 2018/01/21 22:02:50 UTC
[sling-whiteboard] 01/01: Added the Sling Project Archetype to the
Whiteboard
This is an automated email from the ASF dual-hosted git repository.
andysch pushed a commit to branch feature/sling-7276
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
commit 429f87de491b88e277489ed11b1ee786854fc004
Author: Andreas Schaefer <as...@headwire.com>
AuthorDate: Sun Jan 21 14:00:30 2018 -0800
Added the Sling Project Archetype to the Whiteboard
---
project-archetype/README.md | 78 ++++
project-archetype/build.run.and.deploy.test.sh | 58 +++
project-archetype/pom.xml | 77 ++++
.../META-INF/archetype-post-generate.groovy | 140 +++++++
.../META-INF/maven/archetype-metadata.xml | 167 +++++++++
.../.archetype-config/archetype.properties | 34 ++
.../resources/archetype-resources/README.All.md | 130 +++++++
.../resources/archetype-resources/README.NotAll.md | 90 +++++
.../main/resources/archetype-resources/all/pom.xml | 108 ++++++
.../archetype-resources/core.example/pom.xml | 177 +++++++++
.../SampleRequestModel.java | 56 +++
.../src/main/java/servlet/ByPathServlet.java | 74 ++++
.../main/java/servlet/ByResourceTypeServlet.java | 80 ++++
.../servlet/ByPathServletTest.java | 36 ++
.../resources/archetype-resources/core/pom.xml | 171 +++++++++
.../src/main/resources/archetype-resources/pom.xml | 416 +++++++++++++++++++++
.../archetype-resources/ui.apps.example/README.md | 32 ++
.../archetype-resources/ui.apps.example/pom.xml | 120 ++++++
.../src/main/content/META-INF/vault/filter.xml | 43 +++
.../src/main/content/META-INF/vault/settings.xml | 20 +
.../jcr_root/apps/__appsFolderName__/.content.xml | 27 ++
.../apps/__appsFolderName__/home/.content.xml | 23 ++
.../apps/__appsFolderName__/home/body.html | 27 ++
.../apps/__appsFolderName__/home/head.html | 26 ++
.../apps/__appsFolderName__/install/.content.xml | 26 ++
.../apps/__appsFolderName__/page/.content.xml | 22 ++
.../apps/__appsFolderName__/page/body.html | 24 ++
.../apps/__appsFolderName__/page/footer.html | 22 ++
.../apps/__appsFolderName__/page/head.html | 26 ++
.../apps/__appsFolderName__/page/page.html | 38 ++
.../content/__contentFolderName__/.content.xml | 21 ++
.../__contentFolderName__/home/.content.xml | 23 ++
.../home/welcome/.content.xml | 25 ++
.../resources/archetype-resources/ui.apps/pom.xml | 120 ++++++
.../src/main/content/META-INF/vault/filter.xml | 42 +++
.../src/main/content/META-INF/vault/settings.xml | 20 +
.../jcr_root/apps/__appsFolderName__/.content.xml | 27 ++
.../apps/__appsFolderName__/install/.content.xml | 26 ++
.../content/__contentFolderName__/.content.xml | 27 ++
.../resources/projects/all/archetype.properties | 35 ++
.../src/test/resources/projects/all/goal.txt | 0
.../projects/allDeleted/archetype.properties | 35 ++
.../test/resources/projects/allDeleted/goal.txt | 0
.../projects/allMerged/archetype.properties | 35 ++
.../src/test/resources/projects/allMerged/goal.txt | 0
.../resources/projects/notAll/archetype.properties | 35 ++
.../src/test/resources/projects/notAll/goal.txt | 0
.../projects/notAllDeleted/archetype.properties | 35 ++
.../test/resources/projects/notAllDeleted/goal.txt | 0
.../projects/notAllMerged/archetype.properties | 35 ++
.../test/resources/projects/notAllMerged/goal.txt | 0
51 files changed, 2909 insertions(+)
diff --git a/project-archetype/README.md b/project-archetype/README.md
new file mode 100644
index 0000000..3e1f1ea
--- /dev/null
+++ b/project-archetype/README.md
@@ -0,0 +1,78 @@
+### Sling Template through Maven Archetype
+
+#### Introduction
+
+This archetype will create a Sling project that can be deployed on the Sling 10. In contrast to
+the Apache Sling Maven Archetypes this one is geared towards creating a full project and not
+just a single module.
+
+The **core** and **ui.apps** are empty Maven modules that are ready for you code.
+
+There are also **example** modules with the extension of **.exmaple**. Please copy whatever you
+want from these module into the appropriate module. The example modules are not intended to be
+installed into Sling.
+Both type (regular and example) have the same structure and so you can copy them over without
+any problems.
+
+If this archetype was generated with the **optionAll** property set to **y** then an **all** package
+will be created that contains both the **core** and the **ui.apps**. This enables the developer
+to easily deploy all modules in that project as a single unit (see below).
+
+If this archetype was generated with the **optionAll** property set to **n** then the **core**
+bundle will be deployed as embedded bundle of the **ui.apps** package.
+
+#### Why a Separate All Package
+
+For a simple project that only contains one or two modules (bundle and content package) this seems
+like overkill and the same can be accomplished using the ui.apps as single deployment package.
+
+That said for a more serious project where there are multiple bundles and content packages this
+becomes difficult to handle. Not only needs one Content Package to take the role of the single
+deployment package which requires it to add the other modules as dependencies. This can be confusing
+and so the dedicated All content package solves that. It contains the dependencies and the logic
+how to build and deploy the entire project in one step.
+
+#### Archetype Properties
+
+|Name |Description |
+|:--------------------|:-----------------------------------------------------------------------------|
+|groupId |Maven Group Id|
+|artifactId |Maven Artifact Id|
+|version |Version of your project|
+|artifactName |Project Label used in the Descriptions and Module Name|
+|packageGroup |Name of the Package Folder where the ui.apps is installed in (/etc/packages)|
+|appsFolderName |Folder name under /apps where components etc are installed|
+|contentFolderName |Folder name under /content where the content is added to|
+|package |Root Package of the Java Code|
+|slingModelSubPackage |Sub Package where Sling Models should be place in with no trailing dots|
+|slingHostName |Host Name or IP Address of the server where Sling is hosted|
+|slingPort |Port to which your Sling instance is bound to|
+|optionAll |Determines if the project is created with an **all** package as single deployed unit (y/n)|
+|optionExample |Determines if the examples are kept separate (s), merged into the regular modules (m) or deleted (d)|
+
+#### Usage
+
+Until this project is fully released in the public Maven Repo this is how to use it:
+
+* Build this project locally
+
+ mvn clean install
+
+* Go to your folder where you want your generated project to be
+* Generate it with:
+
+ mvn archetype:generate -DarchetypeCatalog=local
+
+* Select this Archetype from a given list
+* Provide the requested properties
+
+#### Build and Install Integration Test
+
+There is a simple integration test setup with this archetype.
+You can run this one using the attached Unix shell script:
+
+ sh build.run.and.deploy.test.sh
+
+The properties for the integration test can be found under
+**/test/resources/projects/[all/notAll]/archetype.properties**.
+
diff --git a/project-archetype/build.run.and.deploy.test.sh b/project-archetype/build.run.and.deploy.test.sh
new file mode 100755
index 0000000..98908ab
--- /dev/null
+++ b/project-archetype/build.run.and.deploy.test.sh
@@ -0,0 +1,58 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+dir=`pwd`
+echo "Build the Sling Project Archetype in folder: $dir"
+mvn clean install
+
+testFolder=$dir/target/test-classes/projects/allMerged/project/sample-test-all
+
+echo
+echo
+echo "--------------------------------------------------"
+echo " Build and Deploy the All (Merged) Test Project"
+echo "--------------------------------------------------"
+echo
+echo
+
+cd $testFolder
+mvn clean install -P autoInstallAll
+
+testFolder=$dir/target/test-classes/projects/notAllMerged/project/sample-test-ui
+
+echo
+echo
+echo "---------------------------------------------------"
+echo "Build and Deploy the Not All (Merged) Test Project"
+echo "---------------------------------------------------"
+echo
+echo
+
+cd $testFolder
+mvn clean install -P autoInstallPackage
+
+echo
+echo
+echo "------------------------------------------"
+echo " Done"
+echo "------------------------------------------"
+echo
+echo
+
+cd $dir
diff --git a/project-archetype/pom.xml b/project-archetype/pom.xml
new file mode 100644
index 0000000..2084a4e
--- /dev/null
+++ b/project-archetype/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling-archetype-parent</artifactId>
+ <version>6-SNAPSHOT</version>
+ <relativePath />
+ </parent>
+
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling-project-archetype</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>maven-archetype</packaging>
+
+ <name>Sling Project Archetype</name>
+
+ <build>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.archetype</groupId>
+ <artifactId>archetype-packaging</artifactId>
+ <version>${archetype.version}</version>
+ </extension>
+ </extensions>
+
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-archetype-plugin</artifactId>
+ <version>3.0.1</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.4</version>
+ </dependency>
+ </dependencies>
+
+ <description>
+ This archetype is creating a full Sling Project composed of
+ a OSGi Bundle and a Content Package which can be deployed
+ to the Sling using specific profiles. It also contains two shadow
+ folders that provide example code / files which are not part
+ of the default build but can be easily copied into the active modules.
+
+ If the project was created with the **optionAll** property set
+ to **y** (yes) then an **All** package is created with acts as
+ the single deployment unit of all bundles and packages in that
+ project.
+ Otherwise the **ui.apps** package is the deployment unit.
+ </description>
+</project>
diff --git a/project-archetype/src/main/resources/META-INF/archetype-post-generate.groovy b/project-archetype/src/main/resources/META-INF/archetype-post-generate.groovy
new file mode 100644
index 0000000..e8d3975
--- /dev/null
+++ b/project-archetype/src/main/resources/META-INF/archetype-post-generate.groovy
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.regex.Pattern
+import org.apache.commons.io.FileUtils
+
+def rootDir = new File(request.getOutputDirectory() + "/" + request.getArtifactId())
+
+def coreBundle = new File(rootDir, "core")
+def coreSrc = new File(coreBundle, "src")
+def coreExampleBundle = new File(rootDir, "core.example")
+def coreExampleSrc = new File(coreExampleBundle, "src")
+
+def uiAppsPackage = new File(rootDir, "ui.apps")
+def uiAppsSrc = new File(uiAppsPackage, "src")
+def uiAppsExamplePackage = new File(rootDir, "ui.apps.example")
+def uiAppsExampleSrc = new File(uiAppsExamplePackage, "src")
+
+def uiAppsPom = new File(uiAppsPackage, "pom.xml")
+def allPackage = new File(rootDir, "all")
+def rootPom = new File(rootDir, "pom.xml")
+def readme = new File(rootDir, "README.md")
+def readmeAll = new File(rootDir, "README.All.md")
+def readmeNotAll = new File(rootDir, "README.NotAll.md")
+
+def optionAll = request.getProperties().get("optionAll")
+def optionExample = request.getProperties().get("optionExample")
+
+
+// helper methods
+
+// Remove the given Module from the parent POM
+def removeModule(pomFile, moduleName) {
+ def pattern = Pattern.compile("\\s*<module>" + Pattern.quote(moduleName) + "</module>", Pattern.MULTILINE)
+ def pomContent = pomFile.getText("UTF-8")
+ pomContent = pomContent.replaceAll(pattern, "")
+ pomFile.newWriter().withWriter { w ->
+ w << pomContent
+ }
+}
+
+// Either remove the tag lines or the line plus the content in between
+// forAll = true: removes all content between @startForNotAll@ and @endForNotAll@
+// forAll = false: emoves all content between @startForAll@ and @endForAll@
+def removeTags(pomFile, forAll) {
+ if(!forAll) {
+ // Remove all lines for Not All and remove all content inside for All
+ def startPattern = Pattern.compile("\\s*<!-- @startForNotAll@ .*-->")
+ def endPattern = Pattern.compile("\\s*<!-- @endForNotAll@ .*-->")
+ def wrapPattern = Pattern.compile("\\s*<!-- @startForAll@ [\\s\\S]*?<!-- @endForAll@ .*-->")
+
+ def pomContent = pomFile.getText("UTF-8")
+ pomContent = pomContent.replaceAll(startPattern, "")
+ pomContent = pomContent.replaceAll(endPattern, "")
+ pomContent = pomContent.replaceAll(wrapPattern, "")
+ pomFile.newWriter().withWriter { w ->
+ w << pomContent
+ }
+ } else {
+ // Remove all lines for All and remove all content inside for Not All
+ def wrapPattern = Pattern.compile("\\s*<!-- @startForNotAll@ [\\s\\S]*?<!-- @endForNotAll@ .*-->")
+ def startPattern = Pattern.compile("\\s*<!-- @startForAll@ .*-->")
+ def endPattern = Pattern.compile("\\s*<!-- @endForAll@ .*-->")
+
+ def pomContent = pomFile.getText("UTF-8")
+ pomContent = pomContent.replaceAll(wrapPattern, "")
+ pomContent = pomContent.replaceAll(startPattern, "")
+ pomContent = pomContent.replaceAll(endPattern, "")
+ pomFile.newWriter().withWriter { w ->
+ w << pomContent
+ }
+ }
+}
+
+if(optionAll == "n") {
+ // Remove All Package / Module
+ assert allPackage.deleteDir()
+ removeModule(rootPom, "all")
+ // Remove content for 'All' and remove tag lines for Not All
+ removeTags(uiAppsPom, false)
+ // Delete the Readme.md for All
+ assert readmeAll.delete()
+ // Rename the Not For All Readme to the Readme.md file
+ assert readmeNotAll.renameTo(readme)
+} else {
+ // Remove content for 'Not All' and remove tag lines for All
+ removeTags(uiAppsPom, true)
+ // Delete the Readme.md for Not All
+ assert readmeNotAll.delete()
+ // Rename the For All Readme to the Readme.md file
+ assert readmeAll.renameTo(readme)
+}
+
+if(optionExample == "m") {
+ // Examples should be merged into the regular modules and then the example folders removed
+ // Delete core source folder (if exists) and then rename core example source to core source
+ if(coreSrc.exists()) {
+ FileUtils.deleteDirectory(coreSrc)
+ }
+ if(coreExampleBundle.exists()) {
+ assert coreExampleSrc.renameTo(coreSrc);
+ FileUtils.deleteDirectory(coreExampleBundle)
+ }
+ removeModule(rootPom, "core.example")
+ // Delete ui.apps source folder (if exists) and then rename ui.apps example source to ui.apps source
+ if(uiAppsSrc.exists()) {
+ FileUtils.deleteDirectory(uiAppsSrc)
+ }
+ if(uiAppsExamplePackage.exists()) {
+ assert uiAppsExampleSrc.renameTo(uiAppsSrc);
+ FileUtils.deleteDirectory(uiAppsExamplePackage)
+ }
+ removeModule(rootPom, "ui.apps.example")
+} else if(optionExample == "d") {
+ // Examples should be deleted
+ // Remove core.example
+ if(coreExampleBundle.exists()) {
+ FileUtils.deleteDirectory(coreExampleBundle)
+ }
+ removeModule(rootPom, "core.example")
+ // Remove ui.apps.example
+ if(uiAppsExamplePackage.exists()) {
+ FileUtils.deleteDirectory(uiAppsExamplePackage)
+ }
+ removeModule(rootPom, "ui.apps.example")
+}
diff --git a/project-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/project-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
new file mode 100644
index 0000000..d8fac86
--- /dev/null
+++ b/project-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<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"
+ name="sling-project-archetype"
+ xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+>
+ <requiredProperties>
+ <requiredProperty key="version">
+ <defaultValue>1.0.0-SNAPSHOT</defaultValue>
+ </requiredProperty>
+
+ <!--
+ The Project Label used a prefix to the name of modules and is part of the descriptions
+ -->
+ <requiredProperty key="artifactName"/>
+ <!--
+ This is the folder name of the group underneath of /etc/packages where the content package
+ is installed
+ -->
+ <requiredProperty key="packageGroup">
+ <defaultValue>${groupId}</defaultValue>
+ </requiredProperty>
+ <!--
+ The folder name underneath /apps where components etc is installed from content packages.
+ This folder separates projects from each other and should be unique within your deployment
+ environment to avoid overrides
+ -->
+ <requiredProperty key="appsFolderName"/>
+ <!--
+ The folder name underneath /content where content is installed. In general this is the same
+ value as the appsFolderName but can be different
+ -->
+ <requiredProperty key="contentFolderName"/>
+ <!--
+ Package of the generated Service classes
+ -->
+ <requiredProperty key="package">
+ <defaultValue>${groupId}</defaultValue>
+ </requiredProperty>
+ <!--
+ Sub Package for the Sling Models (it is prepended with the package specified above)
+ -->
+ <requiredProperty key="slingModelSubPackage">
+ <!--<defaultValue>models</defaultValue>-->
+ </requiredProperty>
+ <!--
+ Target Host Name or IP Address of the Deployment Sling Server
+ -->
+ <requiredProperty key="slingHostName">
+ <defaultValue>localhost</defaultValue>
+ </requiredProperty>
+ <!--
+ Target Port of the Deployment Sling Server
+ -->
+ <requiredProperty key="slingPort">
+ <defaultValue>8080</defaultValue>
+ </requiredProperty>
+ <!-- If set to yes a project is created with an All Packager rather than deploying the bundle inside ui.apps -->
+ <requiredProperty key="optionAll">
+ <defaultValue>n</defaultValue>
+ <validationRegex>^(y|n)$</validationRegex>
+ </requiredProperty>
+ <!-- Indicates if the examples should be a separate module, merged into or ditched -->
+ <requiredProperty key="optionExample">
+ <defaultValue>s</defaultValue>
+ <validationRegex>^(s|m|d)$</validationRegex>
+ </requiredProperty>
+ </requiredProperties>
+ <fileSets>
+ <fileSet encoding="UTF-8">
+ <directory></directory>
+ <includes>
+ <include>README.*.md</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+
+ <!--AS NOTE: the only dynamic change that can be made here is to add ${rootArtifactId} to the id and name
+ as the dir must map the folder we have in archetype-resources.
+ -->
+ <modules>
+ <module id="core" dir="core" name="core">
+ <fileSets>
+ <fileSet filtered="true" packaged="true" encoding="UTF-8">
+ <directory>src/main/java</directory>
+ <includes>
+ <include>**/*.java</include>
+ </includes>
+ </fileSet>
+ <fileSet filtered="true" packaged="true" encoding="UTF-8">
+ <directory>src/test/java</directory>
+ <includes>
+ <include>**/*.java</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+ </module>
+ <module id="core.example" dir="core.example" name="core.example">
+ <fileSets>
+ <fileSet filtered="true" packaged="true" encoding="UTF-8">
+ <directory>src/main/java</directory>
+ <includes>
+ <include>**/*.java</include>
+ </includes>
+ </fileSet>
+ <fileSet filtered="true" packaged="true" encoding="UTF-8">
+ <directory>src/test/java</directory>
+ <includes>
+ <include>**/*.java</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+ </module>
+ <module id="ui.apps" dir="ui.apps" name="ui.apps">
+ <fileSets>
+ <fileSet filtered="true" encoding="UTF-8">
+ <directory>src/main/content</directory>
+ <includes>
+ <include>**/*.xml</include>
+ <include>**/*.html</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+ </module>
+ <module id="ui.apps.example" dir="ui.apps.example" name="ui.apps.example">
+ <fileSets>
+ <fileSet filtered="true" encoding="UTF-8">
+ <directory>src/main/content</directory>
+ <includes>
+ <include>**/*.xml</include>
+ <include>**/*.html</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+ </module>
+ <module id="all" dir="all" name="all">
+ <!--<fileSets>-->
+ <!--<fileSet filtered="true" encoding="UTF-8">-->
+ <!--<directory>src/main/content</directory>-->
+ <!--<includes>-->
+ <!--<include>**/*.xml</include>-->
+ <!--<include>**/*.html</include>-->
+ <!--</includes>-->
+ <!--</fileSet>-->
+ <!--</fileSets>-->
+ </module>
+ </modules>
+</archetype-descriptor>
diff --git a/project-archetype/src/main/resources/archetype-resources/.archetype-config/archetype.properties b/project-archetype/src/main/resources/archetype-resources/.archetype-config/archetype.properties
new file mode 100644
index 0000000..062882a
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/.archetype-config/archetype.properties
@@ -0,0 +1,34 @@
+#####################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#####################################################################
+
+#
+# This file contains all the properties you used
+# to build your project from the archetype
+#
+package=${package}
+version=${version}
+groupId=${groupId}
+artifactName=${artifactName}
+packageGroup=${packageGroup}
+appsFolderName=${appsFolderName}
+contentFolderName=${contentFolderName}
+slingModelSubPackage=${slingModelSubPackage}
+slingHostName=${slingHostName}
+slingPort=${slingPort}
+optionAll=${optionAll}
diff --git a/project-archetype/src/main/resources/archetype-resources/README.All.md b/project-archetype/src/main/resources/archetype-resources/README.All.md
new file mode 100644
index 0000000..6c5e7ba
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/README.All.md
@@ -0,0 +1,130 @@
+### Maven Project generated from Maven Archetype
+
+#### License
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+#### Introduction
+
+This project was created by the Full Project Sling Maven Archetype which created
+three modules:
+
+1. **core**: OSGi Bundle which is deployed as OSGi Bundle to Sling which includes your
+ Servlets, Filters, Sling Models and much more. This module is **not intended**
+ to contain Sling Content.
+2. **ui.apps**: JCR Content Module which is used to install a JCR Package into Sling
+ by using **Composum**. For that it must be installed and the Composum
+ Package Manager must be whitelisted.
+3. **all**: This is another JCR Content Module but it is only used to install the
+ other two modules.
+
+There are also two more modules that provide some examples with the same name plus
+the **.example** extension. This modules should not be deployed as is but rather
+examples that you want to use should be copied to the core or ui.apps module.
+The structure of both modules are the same and so copying them over just be
+quite simple.
+
+#### Why the All Package
+
+Most real projects have many different OSGi bundles, Content Packages, Configuration
+Modules and many more. Deploying them one by one is cumbersome and can lead to
+inconsitency and to a lot of overhead in a Continious Integration system.
+The **All** package allows you to deploy all theses artifacts in one swoop or it allows
+you to deploy them to multiple targets by just repeating the **All** deployment.
+
+##### Adding a new Module
+
+If you create a new Maven module then you need to add them to the **All** POM as
+well to include them into the All deployment. These are the steps:
+
+1. Add the dependency to the new module in the All POM
+2. Add the module to the **maven-vault-plugin** definition
+ 1. If this is a content package then into the **subPackages**
+ 2. If this is an OSGi Bundle then into the **embeddeds**
+
+##### Package Filter
+
+In any multi-content-package environment the developer needs to pay close attention
+to the **content filtering** in the **META-INF/vault/filter.xml** as this can lead
+to hard to detect issues. Please make sure that:
+
+1. Exclude **/apps/<apps-folder-name>/install** from any of your content package
+ as in that folder the **All** package is installing the bundles into
+2. Make sure that content packages are not removing each other contents. The rule is
+ that each content package has their own sub folder inside **/apps/<apps-folder-name>**
+ and avoid overlap.
+3. Any shared folders like **overlays** need to be separated from each other.
+ It is a good idea to limit your filter to smallest subset possible to avoid
+ future issues if another package needs to place their overlays into the
+ same folder.
+
+The package filter is a **mask** that tells Sling which part of the JCR tree
+your package maintains and after the deployment that part of the JCR tree will
+be the same as in your package. All missing ndoes in Sling will be created, all
+existing nodes will be updated and all missing nodes in your package will be
+deleted in Sling.
+
+
+#### Why a JCR Package instead of a Content Bundle
+
+There a several reasons to use a JCR Package instead of a Content Bundle
+but for the most important reason is that a JCR Package allows the **Sling
+Tooling** to update a single file rather than an entire Bundle and also
+to import a Node from Sling into the project.
+
+
+#### Attention:
+
+Due to the way Apache Maven Archetypes work both **example** modules are added
+to the parent POM's module list. Please **remove** them after you created them
+to avoid the installation of these modules into Sling.
+At the end of the parent POM you will find the lines below. Remove the lines
+with **core.example** and **ui.apps.example**.
+
+ <modules>
+ <module>core</module>
+ <module>core.example</module>
+ <module>ui.apps</module>
+ <module>ui.apps.example</module>
+ <module>all</module>
+ </modules>
+
+#### Build and Installation
+
+The project is built quite simple:
+
+ mvn clean install
+
+To install the project **autoInstallAll**:
+
+ mvn clean install -P autoInstallAll
+
+##### ATTENTION
+
+It is not a good idea to deploy code with both approaches.
+Choose one and stick with it as you can either loose a bundle
+or the bundle is not updated during installation.
+
+In case of a mishape the package and bundles needs to deinstalled
+manullay:
+
+1. Rmove /apps/${appsFolderName}/install folder
+2. Uninstall the package using the package manager
+3. Remove the package from /etc/packages including the snapshots if they are still there
+4. Rmove the Bundle using the OSGi Console (/system/console/bundles)
+
diff --git a/project-archetype/src/main/resources/archetype-resources/README.NotAll.md b/project-archetype/src/main/resources/archetype-resources/README.NotAll.md
new file mode 100644
index 0000000..3e69d10
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/README.NotAll.md
@@ -0,0 +1,90 @@
+### Maven Project generated from Maven Archetype
+
+#### License
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+#### Introduction
+
+This project was created by the Sling Project Maven Archetype which created
+two modules:
+
+1. **core**: OSGi Bundle which is deployed as OSGi Bundle to Sling which includes your
+ Servlets, Filters, Sling Models and much more. This module is **not intended**
+ to contain Sling Content.
+2. **ui.apps**: JCR Content Module which is used to install a JCR Package into Sling
+ by using **Composum**. For that it must be installed and the Composum
+ Package Manager must be whitelisted.
+
+There are also two more modules that provide some examples with the same name plus
+the **.example** extension. This modules should not be deployed as is but rather
+examples that you want to use should be copied to the core or ui.apps module.
+The structure of both modules are the same and so copying them over just be
+quite simple.
+
+#### Attention:
+
+Due to the way Apache Maven Archetypes work both **example** modules are added
+to the parent POM's module list. Please **remove** them after you created them
+to avoid the installation of these modules into Sling.
+At the end of the parent POM you will find the lines below. Remove the lines
+with **core.example** and **ui.apps.example**.
+
+ <modules>
+ <module>core</module>
+ <module>core.example</module>
+ <module>ui.apps</module>
+ <module>ui.apps.example</module>
+ </modules>
+
+#### Why a JCR Package instead of a Content Bundle
+
+There a several reasons to use a JCR Package instead of a Content Bundle
+but for the most important reason is that a JCR Package allows the **Sling
+Tooling** to update a single file rather than an entire Bundle and also
+to import a Node from Sling into the project.
+
+
+#### Build and Installation
+
+The project is built quite simple:
+
+ mvn clean install
+
+To install the OSGi bundle use the project **autoInstallBundle**:
+
+ mvn clean install -P autoInstallBundle
+
+To install the Content together with the core bundle
+use the project **autoInstallPackage**:
+
+ mvn clean install -P autoInstallPackage
+
+##### ATTENTION
+
+It is probably best not to deploy the OSGi Bundle alone as this
+may lead to conflicts with the package deployment.
+
+In case of a mishape the package and bundles needs to deinstalled
+manullay:
+
+1. Rmove /apps/${appsFolderName}/install folder
+2. Uninstall the package using the package manager
+3. Remove the package from /etc/packages including the snapshots if they are still there
+4. Rmove the Bundle using the OSGi Console (/system/console/bundles)
+
diff --git a/project-archetype/src/main/resources/archetype-resources/all/pom.xml b/project-archetype/src/main/resources/archetype-resources/all/pom.xml
new file mode 100644
index 0000000..b567044
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/all/pom.xml
@@ -0,0 +1,108 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <artifactId>\${rootArtifactId}</artifactId>
+ <groupId>\${groupId}</groupId>
+ <version>\${version}</version>
+ </parent>
+
+ <artifactId>all</artifactId>
+ <packaging>content-package</packaging>
+
+ <name>\${artifactName} - All</name>
+ <description>\${package} - \${artifactName}: All-in-one deployment content package</description>
+
+ <properties>
+ <maven.test.skip>true</maven.test.skip>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>\${project.groupId}</groupId>
+ <artifactId>core</artifactId>
+ <version>\${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>\${project.groupId}</groupId>
+ <artifactId>ui.apps</artifactId>
+ <version>\${project.version}</version>
+ <type>content-package</type>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>filevault-package-maven-plugin</artifactId>
+ <configuration>
+ <packageType>container</packageType>
+ <embeddedTarget>/apps/\${appsFolderName}/install</embeddedTarget>
+ <embeddeds>
+ <embedded>
+ <groupId>\${project.groupId}</groupId>
+ <artifactId>core</artifactId>
+ <filter>true</filter>
+ </embedded>
+ </embeddeds>
+ <subPackages>
+ <subPackage>
+ <groupId>\${project.groupId}</groupId>
+ <artifactId>ui.apps</artifactId>
+ <filter>true</filter>
+ </subPackage>
+ </subPackages>
+ <!-- This gives the Package a recognizable name in the Package Manager by prepending the Artifact Id of the Project -->
+ <name>\${rootArtifactId}-\${artifactId}</name>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>autoInstallAll</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.wcm.maven.plugins</groupId>
+ <artifactId>wcmio-content-package-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>install-package</id>
+ <goals>
+ <goal>install</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/project-archetype/src/main/resources/archetype-resources/core.example/pom.xml b/project-archetype/src/main/resources/archetype-resources/core.example/pom.xml
new file mode 100644
index 0000000..7125281
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/core.example/pom.xml
@@ -0,0 +1,177 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <artifactId>\${rootArtifactId}</artifactId>
+ <groupId>\${groupId}</groupId>
+ <version>\${version}</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>\${artifactId}</artifactId>
+ <packaging>bundle</packaging>
+
+ <name>\${artifactName} - Core Example</name>
+ <description>
+ This is the Example Module for the Sample Core module (core).
+ The basic idea is to have a clean 'core' module in which you
+ can choose what examples you want to use rather than having
+ to delete a bunch of examples.
+
+ Pleaes copy examples from this module into your 'core' module
+ if you want it to use it in your project. The project structure
+ is the same and so you can copy the files from the source to
+ the target folder wihtout having to adjust paths or packages.
+ This module is not part of the Root Project's build and you can
+ either keep it around or you delete it if you don't need
+ it anymore.
+
+ The profile to deploy the bundle is removed to avoid accidental
+ deployments.
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Embed-Dependency>*;scope=compile;inline=true</Embed-Dependency>
+ <Sling-Model-Packages>\${package}.\${slingModelSubPackage}</Sling-Model-Packages>
+ <_dsannotations>*</_dsannotations>
+ <_metatypeannotations>*</_metatypeannotations>
+ <_removeheaders>
+ Embed-Dependency,
+ Private-Package,
+ Include-Resource
+ </_removeheaders>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>7</source>
+ <target>7</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>maven-sling-plugin</artifactId>
+ <configuration>
+ <slingUrl>http://\${sling.host}:\${sling.port}/system/console</slingUrl>
+ <user>\${sling.user}</user>
+ <password>\${sling.password}</password>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.annotation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.metatype.annotations</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.models.api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ </dependencies>
+
+ <!--Commented out to avoid accidental deployment -->
+ <!--<profiles>-->
+ <!--<profile>-->
+ <!--<id>autoInstallBundle</id>-->
+ <!--<build>-->
+ <!--<plugins>-->
+ <!--<plugin>-->
+ <!--<groupId>org.apache.sling</groupId>-->
+ <!--<artifactId>maven-sling-plugin</artifactId>-->
+ <!--<executions>-->
+ <!--<execution>-->
+ <!--<id>install-bundle</id>-->
+ <!--<goals>-->
+ <!--<goal>install</goal>-->
+ <!--</goals>-->
+ <!--</execution>-->
+ <!--</executions>-->
+ <!--</plugin>-->
+ <!--</plugins>-->
+ <!--</build>-->
+ <!--</profile>-->
+ <!--</profiles>-->
+</project>
diff --git a/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/__slingModelSubPackage__/SampleRequestModel.java b/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/__slingModelSubPackage__/SampleRequestModel.java
new file mode 100644
index 0000000..33c71aa
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/__slingModelSubPackage__/SampleRequestModel.java
@@ -0,0 +1,56 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ${package}.${slingModelSubPackage};
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.SlingObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.Session;
+
+@Model(adaptables = {Resource.class, SlingHttpServletRequest.class})
+public class SampleRequestModel {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(SampleRequestModel.class);
+
+ @SlingObject
+ private ResourceResolver resourceResolver;
+
+ public SampleRequestModel() {
+ LOGGER.trace("Model Instance created");
+ }
+
+ /** @return User Name of the Current User **/
+ public String getCurrentUser() {
+ String answer = "No User";
+
+ // Adapt to a session and get the current User ID.
+ Session session = resourceResolver.adaptTo(Session.class);
+ LOGGER.trace("Found Session from Resolver: '{}'", session);
+ if(session != null) {
+ answer = session.getUserID();
+ }
+ return answer;
+ }
+}
\ No newline at end of file
diff --git a/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/servlet/ByPathServlet.java b/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/servlet/ByPathServlet.java
new file mode 100644
index 0000000..44dc8b6
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/servlet/ByPathServlet.java
@@ -0,0 +1,74 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ${package}.servlet;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Hello World Servlet registered by path
+ */
+@Component(
+ service = Servlet.class,
+ property = {
+ Constants.SERVICE_DESCRIPTION + "=Hello World Path Servlet",
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+ "sling.servlet.paths=/hello-world-servlet"
+ }
+)
+@SuppressWarnings("serial")
+public class ByPathServlet extends SlingSafeMethodsServlet {
+
+ private final Logger log = LoggerFactory.getLogger(ByPathServlet.class);
+
+ @Override
+ protected void doGet(SlingHttpServletRequest request,
+ SlingHttpServletResponse response) throws ServletException,
+ IOException {
+
+ Writer w = response.getWriter();
+ w.write("<!DOCTYPE html PUBLIC ${symbol_escape}"-//IETF//DTD HTML 2.0//EN${symbol_escape}">");
+ w.write("<html>");
+ w.write("<head>");
+ w.write("<title>Hello World Servlet</title>");
+ w.write("</head>");
+ w.write("<body>");
+ w.write("<h1>Hello World!</h1>");
+ w.write("</body>");
+ w.write("</html>");
+
+ log.info("Hello World Servlet");
+
+ }
+
+}
+
diff --git a/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/servlet/ByResourceTypeServlet.java b/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/servlet/ByResourceTypeServlet.java
new file mode 100644
index 0000000..cde87c9
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/core.example/src/main/java/servlet/ByResourceTypeServlet.java
@@ -0,0 +1,80 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ${package}.servlet;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Hello World Servlet registered by resource type
+ */
+@Component(
+ service = Servlet.class,
+ property = {
+ Constants.SERVICE_DESCRIPTION + "=Hello World Path Servlet",
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+ "sling.servlet.resourceTypes=sling/servlet/default",
+ "sling.servlet.selectors=hello",
+ "sling.servlet.extensions=html",
+ }
+)
+@SuppressWarnings("serial")
+public class ByResourceTypeServlet extends SlingSafeMethodsServlet {
+
+ private final Logger log = LoggerFactory.getLogger(ByResourceTypeServlet.class);
+
+ @Override
+ protected void doGet(SlingHttpServletRequest request,
+ SlingHttpServletResponse response) throws ServletException,
+ IOException {
+ Resource resource = request.getResource();
+
+ Writer w = response.getWriter();
+ w.write("<!DOCTYPE html PUBLIC ${symbol_escape}"-//IETF//DTD HTML 2.0//EN${symbol_escape}">");
+ w.write("<html>");
+ w.write("<head>");
+ w.write("<title>Hello World Servlet</title>");
+ w.write("</head>");
+ w.write("<body>");
+ w.write("<h1>Hello ");
+ w.write(resource.getPath());
+ w.write("</h1>");
+ w.write("</body>");
+ w.write("</html>");
+
+ log.info("Hello World Servlet");
+
+ }
+
+}
+
diff --git a/project-archetype/src/main/resources/archetype-resources/core.example/src/test/java/__packageInPathFormat__/servlet/ByPathServletTest.java b/project-archetype/src/main/resources/archetype-resources/core.example/src/test/java/__packageInPathFormat__/servlet/ByPathServletTest.java
new file mode 100644
index 0000000..91cfe03
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/core.example/src/test/java/__packageInPathFormat__/servlet/ByPathServletTest.java
@@ -0,0 +1,36 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package ${package}.servlet;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for By Path Servlet.
+ */
+public class ByPathServletTest extends TestCase {
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testByPathServlet() {
+ assertTrue(true);
+ }
+
+}
diff --git a/project-archetype/src/main/resources/archetype-resources/core/pom.xml b/project-archetype/src/main/resources/archetype-resources/core/pom.xml
new file mode 100644
index 0000000..8a81b01
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/core/pom.xml
@@ -0,0 +1,171 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <artifactId>\${rootArtifactId}</artifactId>
+ <groupId>\${groupId}</groupId>
+ <version>\${version}</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>\${artifactId}</artifactId>
+ <packaging>bundle</packaging>
+
+ <name>\${artifactName} - Core</name>
+ <description>
+ This is an empty OSGi Bundle which can be used
+ to compile and deploy OSGi Services to Sling.
+
+ This Bundle can be deployed using the Profile
+ "autoInstallBundle" but that should not be used
+ together with the "ui.apps" Profile "autoInstallAll"
+ as they are not deployed the same way and can lead
+ to undesired issues during deployment (bundle not
+ updated or not working at all).
+ </description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Embed-Dependency>*;scope=compile;inline=true</Embed-Dependency>
+ <Sling-Model-Packages>\${package}.\${slingModelSubPackage}</Sling-Model-Packages>
+ <_dsannotations>*</_dsannotations>
+ <_metatypeannotations>*</_metatypeannotations>
+ <_removeheaders>
+ Embed-Dependency,
+ Private-Package,
+ Include-Resource
+ </_removeheaders>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>7</source>
+ <target>7</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>maven-sling-plugin</artifactId>
+ <configuration>
+ <slingUrl>http://\${sling.host}:\${sling.port}/system/console</slingUrl>
+ <user>\${sling.user}</user>
+ <password>\${sling.password}</password>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.annotation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.metatype.annotations</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.models.api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ </dependencies>
+
+ <profiles>
+ <!-- ATTENTION: It is highly recomended not to deploy this with this Profile if this Bundle was or will be deployed with the All package -->
+ <profile>
+ <id>autoInstallBundle</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>maven-sling-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>install-bundle</id>
+ <goals>
+ <goal>install</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
diff --git a/project-archetype/src/main/resources/archetype-resources/pom.xml b/project-archetype/src/main/resources/archetype-resources/pom.xml
new file mode 100644
index 0000000..0e7369d
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/pom.xml
@@ -0,0 +1,416 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>\${groupId}</groupId>
+ <artifactId>\${rootArtifactId}</artifactId>
+ <version>\${version}</version>
+ <packaging>pom</packaging>
+
+ <description>\${artifactName} Parent POM</description>
+
+ <!--
+ ATTENTION: This archetype creates two modules: 'core' and 'ui.apps'
+ Both of these modules are empty and you can start filling
+ it in with your files.
+ There are two other modules: 'core.example' and 'ui.apps.example'
+ with have the same structure but have provide examples
+ for showing a Page with the usage of a Sling Model. The
+ idea is that a developer can copy any file he wants into
+ the regular module. Unfortunately the Maven Archetype
+ generating this project is adding all four modules to
+ this POM. Even though the POMs for the example modules
+ will not deploy it is best to remove them from this POM.
+
+ Look for the modules at the end of this file.
+ -->
+
+ <properties>
+ <sling.host>\${slingHostName}</sling.host>
+ <sling.port>\${slingPort}</sling.port>
+ <sling.user>admin</sling.user>
+
+ <sling.password>admin</sling.password>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
+ <release.plugin.version>2.5.3</release.plugin.version>
+ <source.plugin.version>3.0.1</source.plugin.version>
+ <resource.plugin.version>3.0.2</resource.plugin.version>
+ <jar.plugin.version>3.0.2</jar.plugin.version>
+ <enforcer.plugin.version>1.4.1</enforcer.plugin.version>
+ <compiler.plugin.version>3.6.1</compiler.plugin.version>
+ <bundle.plugin.version>2.5.4</bundle.plugin.version>
+ <clean.plugin.version>3.0.0</clean.plugin.version>
+ <installer.plugin.version>2.5.2</installer.plugin.version>
+ <surfire.plugin.version>2.20</surfire.plugin.version>
+ <failsafe.plugin.version>2.20</failsafe.plugin.version>
+ <deploy.plugin.version>2.8.2</deploy.plugin.version>
+ <sling.plugin.version>2.3.2</sling.plugin.version>
+ <dependency.plugin.version>3.0.0</dependency.plugin.version>
+ <build.helper.plugin.version>3.0.0</build.helper.plugin.version>
+ <vcmio.plugin.version>1.6.0</vcmio.plugin.version>
+ <filevault-package.plugin.version>1.0.0</filevault-package.plugin.version>
+
+ <sling.models.api.version>1.3.6</sling.models.api.version>
+ <jsr305.version>3.0.2</jsr305.version>
+ <sling.settings.version>1.3.8</sling.settings.version>
+ <sling.commons.osgi.version>2.4.0</sling.commons.osgi.version>
+ <jackrabbit-api.version>2.14.4</jackrabbit-api.version>
+ <commons-lang.version>2.6</commons-lang.version>
+ <jmock-junit4.version>2.8.2</jmock-junit4.version>
+ </properties>
+
+ <build>
+ <plugins>
+ <!-- Maven Release Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <scmCommentPrefix>[maven-scm] :</scmCommentPrefix>
+ <preparationGoals>clean install</preparationGoals>
+ <goals>install</goals>
+ <releaseProfiles>release</releaseProfiles>
+ </configuration>
+ </plugin>
+ <!-- Maven Source Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <inherited>true</inherited>
+ </plugin>
+ <!-- Maven Resources Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ <!-- Maven Jar Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ <!-- Maven Enforcer Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>enforce-maven</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireMavenVersion>
+ <message>Project must be built with Maven 3.1.0 or higher</message>
+ <version>[3.1.0,)</version>
+ </requireMavenVersion>
+ <requireJavaVersion>
+ <message>Project must be compiled with Java 7 or higher</message>
+ <version>1.7.0</version>
+ </requireJavaVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- Maven Compiler Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>${archetype.java.version}</source>
+ <target>${archetype.java.version}</target>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <!-- Maven Release Plugin -->
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>${release.plugin.version}</version>
+ </plugin>
+ <!-- Maven Source Plugin -->
+ <plugin>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>${source.plugin.version}</version>
+ </plugin>
+ <!-- Maven Resources Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>${resource.plugin.version}</version>
+ </plugin>
+ <!-- Maven Jar Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>${jar.plugin.version}</version>
+ </plugin>
+ <!-- Maven Enforcer Plugin -->
+ <plugin>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>${enforcer.plugin.version}</version>
+ </plugin>
+ <!-- Maven Compiler Plugin -->
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${compiler.plugin.version}</version>
+ </plugin>
+
+ <!-- Maven Clean Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>${clean.plugin.version}</version>
+ </plugin>
+ <!-- Maven Installer Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>${installer.plugin.version}</version>
+ </plugin>
+ <!-- Maven Surefire Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${surfire.plugin.version}</version>
+ </plugin>
+ <!-- Maven Failsafe Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>${failsafe.plugin.version}</version>
+ </plugin>
+ <!-- Maven Deploy Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>${deploy.plugin.version}</version>
+ </plugin>
+ <!-- Apache Sling Plugin -->
+ <plugin>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>maven-sling-plugin</artifactId>
+ <version>${sling.plugin.version}</version>
+ </plugin>
+ <!-- Content Package Plugin -->
+ <plugin>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>filevault-package-maven-plugin</artifactId>
+ <version>${filevault-package.plugin.version}</version>
+ <extensions>true</extensions>
+ <configuration>
+ <failOnMissingEmbed>true</failOnMissingEmbed>
+ <force>true</force>
+ <group>\${packageGroup}</group>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>io.wcm.maven.plugins</groupId>
+ <artifactId>wcmio-content-package-maven-plugin</artifactId>
+ <version>${vcmio.plugin.version}</version>
+ <configuration>
+ <serviceURL>http://${sling.host}:${sling.port}/bin/cpm/</serviceURL>
+ <userId>${sling.user}</userId>
+ <password>${sling.password}</password>
+ <failOnMissingEmbed>true</failOnMissingEmbed>
+ <force>true</force>
+ <group>\${packageGroup}</group>
+ </configuration>
+ </plugin>
+ <!-- Apache Felix Bundle Plugin -->
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>${bundle.plugin.version}</version>
+ <inherited>true</inherited>
+ </plugin>
+ <!-- Maven Dependency Plugin -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>${dependency.plugin.version}</version>
+ </plugin>
+ <!-- Build Helper Maven Plugin -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>${build.helper.plugin.version}</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+
+ <!-- ====================================================================== -->
+ <!-- D E P E N D E N C I E S -->
+ <!-- ====================================================================== -->
+ <dependencyManagement>
+ <dependencies>
+ <!-- OSGi Dependencies -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>6.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- OSGi annotations: @Version, @ProviderType, @ConsumerType -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.annotation</artifactId>
+ <version>6.0.1</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- OSGi annotations for DS and metatype -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ <version>1.3.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.metatype.annotations</artifactId>
+ <version>1.3.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>4.2.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Web Application API -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.1.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- dependency injection annotations -->
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>1</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- JCR API -->
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Basic Logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4japi.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ <version>${jsr305.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Apache Sling Dependencies -->
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ <version>${slingapi.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.settings</artifactId>
+ <version>${sling.settings.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.osgi</artifactId>
+ <version>${sling.commons.osgi.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.models.api</artifactId>
+ <version>${sling.models.api.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-api</artifactId>
+ <version>${jackrabbit-api.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Support -->
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>${commons-lang.version}</version>
+ </dependency>
+
+ <!-- Basic dependencies for Unit Tests -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jmock</groupId>
+ <artifactId>jmock-junit4</artifactId>
+ <version>${jmock-junit4.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>${slf4japi.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/README.md b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/README.md
new file mode 100644
index 0000000..01c4a48
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/README.md
@@ -0,0 +1,32 @@
+### ui.apps Example
+
+#### License
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+#### Introduction
+
+This is a Content Package rather than an OSGi Content Bundle meaning
+that JCR Nodes are described with **.content.xml** files rather than with
+**.json** files. This example provides a content node home page together
+with the Home and Page resource type HTML code.
+
+#### Dependencies
+
+This content package depends on the Sling Model **SampleRequestModel**
+from the **core.example**.
\ No newline at end of file
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/pom.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/pom.xml
new file mode 100644
index 0000000..dd9d029
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/pom.xml
@@ -0,0 +1,120 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <artifactId>\${rootArtifactId}</artifactId>
+ <groupId>\${groupId}</groupId>
+ <version>\${version}</version>
+ </parent>
+
+ <artifactId>\${artifactId}</artifactId>
+ <packaging>content-package</packaging>
+
+ <name>\${artifactName} - UI Apps Example</name>
+ <description>
+ This is the Example Module for the Sample UI Apps module (ui.apps).
+ The basic idea is to have a clean 'ui.apps' module in which you
+ can choose what examples you want to use rather than having
+ to delete a bunch of examples.
+
+ Pleaes copy examples from this module into your 'ui.apps' module
+ if you want it to use it in your project. The project structure
+ is the same and so you can copy the files from the source to
+ the target folder wihtout having to adjust paths or packages.
+ This module is not part of the Root Project's build and you can
+ either keep it around or you delete it if you don't need
+ it anymore.
+
+ The profile to deploy the bundle is removed to avoid accidental
+ deployments.
+ </description>
+
+ <!-- @startForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+ <dependencies>
+ <dependency>
+ <groupId>\${project.groupId}</groupId>
+ <artifactId>core</artifactId>
+ <version>\${project.version}</version>
+ </dependency>
+ </dependencies>
+ <!-- @endForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>filevault-package-maven-plugin</artifactId>
+ <configuration>
+ <filterSource>\${basedir}/src/main/content/META-INF/vault/filter.xml</filterSource>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>package</goal>
+ </goals>
+ <!-- @startForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+ <configuration>
+ <embeddedTarget>/apps/\${appsFolderName}/install</embeddedTarget>
+ <embeddeds>
+ <embedded>
+ <groupId>\${project.groupId}</groupId>
+ <artifactId>core</artifactId>
+ <filter>true</filter>
+ </embedded>
+ </embeddeds>
+ </configuration>
+ <!-- @endForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <!-- @startForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+ <!--Commented out to avoid accidental deployment -->
+ <!--<profiles>-->
+ <!--<profile>-->
+ <!--<id>autoInstallPackage</id>-->
+ <!--<build>-->
+ <!--<plugins>-->
+ <!--<plugin>-->
+ <!--<groupId>io.wcm.maven.plugins</groupId>-->
+ <!--<artifactId>wcmio-content-package-maven-plugin</artifactId>-->
+ <!--<executions>-->
+ <!--<execution>-->
+ <!--<id>install-package</id>-->
+ <!--<goals>-->
+ <!--<goal>install</goal>-->
+ <!--</goals>-->
+ <!--</execution>-->
+ <!--</executions>-->
+ <!--</plugin>-->
+ <!--</plugins>-->
+ <!--</build>-->
+ <!--</profile>-->
+ <!--</profiles>-->
+ <!-- @endForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+</project>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/META-INF/vault/filter.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/META-INF/vault/filter.xml
new file mode 100644
index 0000000..8b0461e
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/META-INF/vault/filter.xml
@@ -0,0 +1,43 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ agreements. See the NOTICE file distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ either express or implied. See the License for the specific language governing permissions
+ and limitations under the License.
+-->
+
+<workspaceFilter version="1.0">
+ <!--
+ Any node that will contain customer data needs to be excluded
+ otherwise a Pacakge Installation will wipe them.
+
+ If there is a mix then all provided nodes must be included and
+ all custom nodes excluded.
+
+ If unsure what to do then go to the Composum Package Manager
+ (/bin/packages.html) and create a test package. To to the package
+ filter list and add filter entries until all of the app provides
+ nodes are included but none of the customer generatedd nodes.
+
+ Also any sub pckage of this module needs to exclude /apps/${appsFolderName}/install
+ folder otherwise they wipe all installed bundles.
+ -->
+ <filter root="/content/${contentFolderName}"/>
+ <!--
+ Need to exclude the Install folder otherwise the Bundle will be undeployed
+ as it is in the '/apps/${appsFolderName}/install' folder (see the 'all'
+ package).
+ -->
+ <filter root="/apps/${appsFolderName}">
+ <exclude pattern="/apps/${appsFolderName}/install/.*"/>
+ </filter>
+</workspaceFilter>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/META-INF/vault/settings.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/META-INF/vault/settings.xml
new file mode 100644
index 0000000..3424413
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/META-INF/vault/settings.xml
@@ -0,0 +1,20 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ agreements. See the NOTICE file distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ either express or implied. See the License for the specific language governing permissions
+ and limitations under the License.
+-->
+<vault version="1.0">
+ <ignore name=".svn"/>
+ <ignore name=".git"/>
+</vault>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/.content.xml
new file mode 100644
index 0000000..8f9da39
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/.content.xml
@@ -0,0 +1,27 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="${artifactName} Root"
+ jcr:description="${artifactName} Apps Root folder"
+/>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/.content.xml
new file mode 100644
index 0000000..9dcbf39
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/.content.xml
@@ -0,0 +1,23 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ agreements. See the NOTICE file distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ either express or implied. See the License for the specific language governing permissions
+ and limitations under the License.
+-->
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="${artifactName} Home Page Component"
+ jcr:description="${artifactName} Home Page Component with HTL"
+ sling:resourceSuperType="${appsFolderName}/page"
+>
+</jcr:root>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/body.html b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/body.html
new file mode 100644
index 0000000..aa6ce9d
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/body.html
@@ -0,0 +1,27 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<!-- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/ -->
+<h2>${symbol_dollar}{properties.jcr:title}</h2>
+<p>${artifactName} Home Page from Sling Project Archetype</p>
+<p><b><i>Description: </i></b>${symbol_dollar}{properties.jcr:description}</p>
+<div data-sly-use.sampleRequest="${package}.${slingModelSubPackage}.SampleRequestModel">
+ <p>Current User: ${symbol_dollar}{sampleRequest.currentUser}</p>
+</div>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/head.html b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/head.html
new file mode 100644
index 0000000..cbf8586
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/home/head.html
@@ -0,0 +1,26 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<!-- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/ -->
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>${artifactName} Home Page</title>
+<!-- ${symbol_dollar}{properties.jcr:title} -->
\ No newline at end of file
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/install/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/install/.content.xml
new file mode 100644
index 0000000..5f7ce25
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/install/.content.xml
@@ -0,0 +1,26 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="Install Folder"
+/>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/.content.xml
new file mode 100644
index 0000000..5b4a278
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/.content.xml
@@ -0,0 +1,22 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ agreements. See the NOTICE file distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ either express or implied. See the License for the specific language governing permissions
+ and limitations under the License.
+-->
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="${artifactName} Page Component"
+ jcr:description="${artifactName} Page Component with HTL"
+>
+</jcr:root>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/body.html b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/body.html
new file mode 100644
index 0000000..7741f7a
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/body.html
@@ -0,0 +1,24 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<!-- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/ -->
+<h2>${symbol_dollar}{properties.jcr:title}</h2>
+<p>${artifactName} Page from Sling Project Archetype</p>
+<p><b>Description: </b>${symbol_dollar}{properties.jcr:description}</p>
\ No newline at end of file
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/footer.html b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/footer.html
new file mode 100644
index 0000000..b1c2e6b
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/footer.html
@@ -0,0 +1,22 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<!-- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/ -->
+${artifactName} Footer
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/head.html b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/head.html
new file mode 100644
index 0000000..0dd5a53
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/head.html
@@ -0,0 +1,26 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<!-- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/ -->
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>${artifactName} Page</title>
+<!-- ${symbol_dollar}{properties.jcr:title} -->
\ No newline at end of file
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/page.html b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/page.html
new file mode 100644
index 0000000..b0d2d52
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/apps/__appsFolderName__/page/page.html
@@ -0,0 +1,38 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<!-- /*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/ -->
+<!DOCTYPE html>
+<html>
+<head>
+ <sly data-sly-include="${symbol_dollar}{'head.html'}"/>
+</head>
+ <body>
+ <h3>Navigation</h3>
+ <div data-sly-list.child="${symbol_dollar}{resource.listChildren}">
+ <a href="${symbol_dollar}{child.path}.html">${symbol_dollar}{child.name}</a>
+ </div>
+ <br/>
+ <sly data-sly-include="${symbol_dollar}{'body.html'}"/>
+ <footer>
+ <sly data-sly-include="${symbol_dollar}{'footer.html'}"/>
+ </footer>
+ </body>
+</html>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/.content.xml
new file mode 100644
index 0000000..0b21be7
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/.content.xml
@@ -0,0 +1,21 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ agreements. See the NOTICE file distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ either express or implied. See the License for the specific language governing permissions
+ and limitations under the License.
+-->
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="${artifactName} Content Root"
+ jcr:description="${artifactName} Content Root Page"
+/>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/home/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/home/.content.xml
new file mode 100644
index 0000000..ddda733
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/home/.content.xml
@@ -0,0 +1,23 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ agreements. See the NOTICE file distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ either express or implied. See the License for the specific language governing permissions
+ and limitations under the License.
+-->
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="${artifactName} Home"
+ jcr:description="${artifactName} Home Page"
+ sling:resourceType="${appsFolderName}/home"
+>
+</jcr:root>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/home/welcome/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/home/welcome/.content.xml
new file mode 100644
index 0000000..acdc0f8
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps.example/src/main/content/jcr_root/content/__contentFolderName__/home/welcome/.content.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="${artifactName} Welcome"
+ jcr:description="${artifactName} Welcome Page"
+ sling:resourceType="${appsFolderName}/page"
+>
+</jcr:root>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps/pom.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps/pom.xml
new file mode 100644
index 0000000..1a10ede
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps/pom.xml
@@ -0,0 +1,120 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <artifactId>\${rootArtifactId}</artifactId>
+ <groupId>\${groupId}</groupId>
+ <version>\${version}</version>
+ </parent>
+
+ <artifactId>\${artifactId}</artifactId>
+ <packaging>content-package</packaging>
+
+ <name>\${artifactName} - UI Apps</name>
+ <description>
+ This is an empty JCR Package where the JCR Content
+ can be deployed with.
+
+ For a "not all" package this JCR Package will embedd
+ the "core" bundle. It can be deployed with the
+ "autoInstallPackage" profile.
+
+ For an "all" package this only provides the content
+ of the project which is deployed in the root with
+ the "autoInstallAll" profile.
+
+ It is advisable to deploy any bundles or packages
+ in one manner as deploying bundles inside a package
+ and through the System Console can lead to unexpected
+ and errorneous situations.
+ </description>
+
+ <!-- @startForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+ <dependencies>
+ <dependency>
+ <groupId>\${project.groupId}</groupId>
+ <artifactId>core</artifactId>
+ <version>\${project.version}</version>
+ </dependency>
+ </dependencies>
+ <!-- @endForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>filevault-package-maven-plugin</artifactId>
+ <configuration>
+ <filterSource>\${basedir}/src/main/content/META-INF/vault/filter.xml</filterSource>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>package</goal>
+ </goals>
+ <!-- @startForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+ <configuration>
+ <embeddedTarget>/apps/\${appsFolderName}/install</embeddedTarget>
+ <embeddeds>
+ <embedded>
+ <groupId>\${project.groupId}</groupId>
+ <artifactId>core</artifactId>
+ <filter>true</filter>
+ </embedded>
+ </embeddeds>
+ </configuration>
+ <!-- @endForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <!-- @startForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+ <profiles>
+ <!-- ATTENTION: It is highly recomended not to deploy this with this Profile if this Package was or will be deployed with the All package -->
+ <profile>
+ <id>autoInstallPackage</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.wcm.maven.plugins</groupId>
+ <artifactId>wcmio-content-package-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>install-package</id>
+ <goals>
+ <goal>install</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <!-- @endForNotAll@ This is used for the Post Generation Handling. Do not alter or remove -->
+</project>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/META-INF/vault/filter.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/META-INF/vault/filter.xml
new file mode 100644
index 0000000..207c148
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/META-INF/vault/filter.xml
@@ -0,0 +1,42 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ agreements. See the NOTICE file distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ either express or implied. See the License for the specific language governing permissions
+ and limitations under the License.
+-->
+<workspaceFilter version="1.0">
+ <!--
+ Any node that will contain customer data needs to be excluded
+ otherwise a Pacakge Installation will wipe them.
+
+ If there is a mix then all provided nodes must be included and
+ all custom nodes excluded.
+
+ If unsure what to do then go to the Composum Package Manager
+ (/bin/packages.html) and create a test package. To to the package
+ filter list and add filter entries until all of the app provides
+ nodes are included but none of the customer generatedd nodes.
+
+ Also any sub pckage of this module needs to exclude /apps/${appsFolderName}/install
+ folder otherwise they wipe all installed bundles.
+ -->
+ <filter root="/content/${contentFolderName}"/>
+ <!--
+ Need to exclude the Install folder otherwise the Bundle will be undeployed
+ as it is in the '/apps/${appsFolderName}/install' folder (see the 'all'
+ package).
+ -->
+ <filter root="/apps/${appsFolderName}">
+ <exclude pattern="/apps/${appsFolderName}/install/.*"/>
+ </filter>
+</workspaceFilter>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/META-INF/vault/settings.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/META-INF/vault/settings.xml
new file mode 100644
index 0000000..3424413
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/META-INF/vault/settings.xml
@@ -0,0 +1,20 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ agreements. See the NOTICE file distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+ Version 2.0 (the "License"); you may not use this file except in compliance with the
+ License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ either express or implied. See the License for the specific language governing permissions
+ and limitations under the License.
+-->
+<vault version="1.0">
+ <ignore name=".svn"/>
+ <ignore name=".git"/>
+</vault>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/apps/__appsFolderName__/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/apps/__appsFolderName__/.content.xml
new file mode 100644
index 0000000..7155879
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/apps/__appsFolderName__/.content.xml
@@ -0,0 +1,27 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="${artifactName} Root"
+ jcr:description="${artifactName} Apps Root folder"
+/>
\ No newline at end of file
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/apps/__appsFolderName__/install/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/apps/__appsFolderName__/install/.content.xml
new file mode 100644
index 0000000..5f7ce25
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/apps/__appsFolderName__/install/.content.xml
@@ -0,0 +1,26 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="Install Folder"
+/>
diff --git a/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/content/__contentFolderName__/.content.xml b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/content/__contentFolderName__/.content.xml
new file mode 100644
index 0000000..1abc513
--- /dev/null
+++ b/project-archetype/src/main/resources/archetype-resources/ui.apps/src/main/content/jcr_root/content/__contentFolderName__/.content.xml
@@ -0,0 +1,27 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
+ jcr:primaryType="sling:Folder"
+ jcr:title="${artifactName}"
+ jcr:description="${artifactName} Content Root"
+/>
\ No newline at end of file
diff --git a/project-archetype/src/test/resources/projects/all/archetype.properties b/project-archetype/src/test/resources/projects/all/archetype.properties
new file mode 100644
index 0000000..b408de5
--- /dev/null
+++ b/project-archetype/src/test/resources/projects/all/archetype.properties
@@ -0,0 +1,35 @@
+#####################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#####################################################################
+
+#
+# Test Project Configuration
+#
+package=org.apache.sling.all
+version=1.0.0-SNAPSHOT
+groupId=org.apache.sling.all.group
+artifactId=sample-test-all
+artifactName=Sample Test All
+packageGroup=org.apache.sling.all.install
+appsFolderName=testAppsAll
+contentFolderName=testContentAll
+slingModelSubPackage=testModelAll
+slingHostName=localhost
+slingPort=8080
+optionAll=y
+optionExample=s
\ No newline at end of file
diff --git a/project-archetype/src/test/resources/projects/all/goal.txt b/project-archetype/src/test/resources/projects/all/goal.txt
new file mode 100644
index 0000000..e69de29
diff --git a/project-archetype/src/test/resources/projects/allDeleted/archetype.properties b/project-archetype/src/test/resources/projects/allDeleted/archetype.properties
new file mode 100644
index 0000000..3005eaf
--- /dev/null
+++ b/project-archetype/src/test/resources/projects/allDeleted/archetype.properties
@@ -0,0 +1,35 @@
+#####################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#####################################################################
+
+#
+# Test Project Configuration
+#
+package=org.apache.sling.all
+version=1.0.0-SNAPSHOT
+groupId=org.apache.sling.all.group
+artifactId=sample-test-all
+artifactName=Sample Test All
+packageGroup=org.apache.sling.all.install
+appsFolderName=testAppsAll
+contentFolderName=testContentAll
+slingModelSubPackage=testModelAll
+slingHostName=localhost
+slingPort=8080
+optionAll=y
+optionExample=d
\ No newline at end of file
diff --git a/project-archetype/src/test/resources/projects/allDeleted/goal.txt b/project-archetype/src/test/resources/projects/allDeleted/goal.txt
new file mode 100644
index 0000000..e69de29
diff --git a/project-archetype/src/test/resources/projects/allMerged/archetype.properties b/project-archetype/src/test/resources/projects/allMerged/archetype.properties
new file mode 100644
index 0000000..f7ee987
--- /dev/null
+++ b/project-archetype/src/test/resources/projects/allMerged/archetype.properties
@@ -0,0 +1,35 @@
+#####################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#####################################################################
+
+#
+# Test Project Configuration
+#
+package=org.apache.sling.all
+version=1.0.0-SNAPSHOT
+groupId=org.apache.sling.all.group
+artifactId=sample-test-all
+artifactName=Sample Test All
+packageGroup=org.apache.sling.all.install
+appsFolderName=testAppsAll
+contentFolderName=testContentAll
+slingModelSubPackage=testModelAll
+slingHostName=localhost
+slingPort=8080
+optionAll=y
+optionExample=m
\ No newline at end of file
diff --git a/project-archetype/src/test/resources/projects/allMerged/goal.txt b/project-archetype/src/test/resources/projects/allMerged/goal.txt
new file mode 100644
index 0000000..e69de29
diff --git a/project-archetype/src/test/resources/projects/notAll/archetype.properties b/project-archetype/src/test/resources/projects/notAll/archetype.properties
new file mode 100644
index 0000000..3c15d8a
--- /dev/null
+++ b/project-archetype/src/test/resources/projects/notAll/archetype.properties
@@ -0,0 +1,35 @@
+#####################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#####################################################################
+
+#
+# Test Project Configuration
+#
+package=org.apache.sling.ui
+version=1.0.0-SNAPSHOT
+groupId=org.apache.sling.ui.group
+artifactId=sample-test-ui
+artifactName=Sample Test UI
+packageGroup=org.apache.sling.ui.install
+appsFolderName=testAppsUI
+contentFolderName=testContentUI
+slingModelSubPackage=testModelUI
+slingHostName=localhost
+slingPort=8080
+optionAll=n
+optionExample=s
\ No newline at end of file
diff --git a/project-archetype/src/test/resources/projects/notAll/goal.txt b/project-archetype/src/test/resources/projects/notAll/goal.txt
new file mode 100644
index 0000000..e69de29
diff --git a/project-archetype/src/test/resources/projects/notAllDeleted/archetype.properties b/project-archetype/src/test/resources/projects/notAllDeleted/archetype.properties
new file mode 100644
index 0000000..d814e01
--- /dev/null
+++ b/project-archetype/src/test/resources/projects/notAllDeleted/archetype.properties
@@ -0,0 +1,35 @@
+#####################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#####################################################################
+
+#
+# Test Project Configuration
+#
+package=org.apache.sling.ui
+version=1.0.0-SNAPSHOT
+groupId=org.apache.sling.ui.group
+artifactId=sample-test-ui
+artifactName=Sample Test UI
+packageGroup=org.apache.sling.ui.install
+appsFolderName=testAppsUI
+contentFolderName=testContentUI
+slingModelSubPackage=testModelUI
+slingHostName=localhost
+slingPort=8080
+optionAll=n
+optionExample=d
\ No newline at end of file
diff --git a/project-archetype/src/test/resources/projects/notAllDeleted/goal.txt b/project-archetype/src/test/resources/projects/notAllDeleted/goal.txt
new file mode 100644
index 0000000..e69de29
diff --git a/project-archetype/src/test/resources/projects/notAllMerged/archetype.properties b/project-archetype/src/test/resources/projects/notAllMerged/archetype.properties
new file mode 100644
index 0000000..0b0d291
--- /dev/null
+++ b/project-archetype/src/test/resources/projects/notAllMerged/archetype.properties
@@ -0,0 +1,35 @@
+#####################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#####################################################################
+
+#
+# Test Project Configuration
+#
+package=org.apache.sling.ui
+version=1.0.0-SNAPSHOT
+groupId=org.apache.sling.ui.group
+artifactId=sample-test-ui
+artifactName=Sample Test UI
+packageGroup=org.apache.sling.ui.install
+appsFolderName=testAppsUI
+contentFolderName=testContentUI
+slingModelSubPackage=testModelUI
+slingHostName=localhost
+slingPort=8080
+optionAll=n
+optionExample=m
\ No newline at end of file
diff --git a/project-archetype/src/test/resources/projects/notAllMerged/goal.txt b/project-archetype/src/test/resources/projects/notAllMerged/goal.txt
new file mode 100644
index 0000000..e69de29
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.