Merge branch 'master' into feature/sling-cpconverter-maven-plugin
diff --git a/sling-cpconverter-maven-plugin/CODE_OF_CONDUCT.md b/sling-cpconverter-maven-plugin/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..0fa18e5
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/CODE_OF_CONDUCT.md
@@ -0,0 +1,22 @@
+<!--/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/-->
+Apache Software Foundation Code of Conduct
+====
+
+Being an Apache project, Apache Sling adheres to the Apache Software Foundation's [Code of Conduct](https://www.apache.org/foundation/policies/conduct.html).
diff --git a/sling-cpconverter-maven-plugin/CONTRIBUTING.md b/sling-cpconverter-maven-plugin/CONTRIBUTING.md
new file mode 100644
index 0000000..ac82a1a
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/CONTRIBUTING.md
@@ -0,0 +1,24 @@
+<!--/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/-->
+Contributing
+====
+
+Thanks for choosing to contribute!
+
+You will find all the necessary details about how you can do this at https://sling.apache.org/contributing.html.
diff --git a/sling-cpconverter-maven-plugin/Jenkinsfile b/sling-cpconverter-maven-plugin/Jenkinsfile
new file mode 100644
index 0000000..f582519
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/Jenkinsfile
@@ -0,0 +1,20 @@
+/**
+ * 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.
+ */
+
+slingOsgiBundleBuild()
diff --git a/sling-cpconverter-maven-plugin/LICENSE b/sling-cpconverter-maven-plugin/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
diff --git a/sling-cpconverter-maven-plugin/README.md b/sling-cpconverter-maven-plugin/README.md
new file mode 100644
index 0000000..8f46163
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/README.md
@@ -0,0 +1,65 @@
+[<img src="https://sling.apache.org/res/logos/sling.png"/>](https://sling.apache.org)
+
+ [![Build Status](https://builds.apache.org/buildStatus/icon?job=Sling/sling-slingfeature-maven-plugin/master)](https://builds.apache.org/job/Sling/job/sling-slingfeature-maven-plugin/job/master) [![Test Status](https://img.shields.io/jenkins/t/https/builds.apache.org/job/Sling/job/sling-slingfeature-maven-plugin/job/master.svg)](https://builds.apache.org/job/Sling/job/sling-slingfeature-maven-plugin/job/master/test_results_analyzer/) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.sling/slingfeature-maven-plugin/badge.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.sling%22%20a%3A%22slingfeature-maven-plugin%22) [![JavaDocs](https://www.javadoc.io/badge/org.apache.sling/slingfeature-maven-plugin.svg)](https://www.javadoc.io/doc/org.apache.sling/slingfeature-maven-plugin) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
+
+# Apache Sling Content Package to Feature Model Plugin
+
+This module is part of the [Apache Sling](https://sling.apache.org) project.
+
+Maven Plugin for Content Package to Feature Model Conversion:
+
+# Introduction
+
+This plugin is intended for a content package to also provide a Feature Model
+and its converted package / bundle. This plugin will only work on Content
+Package ZIP files artifacts.
+
+This plugin is a wrapper for the Sling Feature Content Package Converter
+**org.apache.sling.feature.cpconverter** over a content package the
+POM defines.
+
+The idea is to convert a Content Package at built time into a Feature
+Module so that it can be used both a regular Content Package in a
+traditional Sling Instance (Lauchpad) or in a Sling Instance in a Feature
+Model.
+The plugin will do the conversion and so a Content Package cna be used
+in a Feature Model w/o any changes in the Content Package.
+
+## Supported goals
+
+This plugin has only one goal called **convert-cp** which takes a few
+parameters:
+
+* **strictValidation**:
+ if set to true this will force the plugin to do a strict
+ conversion. Checkout the Content Package 2 Feature
+ Model Converter tool. Default: **false**
+* **mergeConfigurations**:
+ if set to true if will merge configurations with
+ the same PID. Not sure if that makes sense in
+ this plugin. Default: **false**
+* **bundleStartOrder**:
+ The bundle start order of the generated Feature
+ Model. Default **20**
+* **artifactIdOverride**:
+ An FM Artifact Id that overrides the one that
+ is set by default. **Atttention**: to avoid the
+ variable substitution for **${}** please add
+ a zero-width whitespace (​) in between.
+* **featureModelsOutputDirectory**:
+ Output folder of the Feature Model. Default
+ **target/cp-conversion**
+* **convertedContentPackageOutputDirectory**:
+ Output folder folder of the converted Content Package. Default
+ **target**
+* **installConvertedContentPackage**:
+ Install the Converted Content Package into the local Maven
+ Repository so that it can be used by the Feature Model without
+ a manual copy. Default: **true**
+* **systemProperties**:
+ List of strings that represents System Properties like the Java
+ **-D** option
+
+In order for the plugin to work the Content Package must be already
+created so this plugin must be started in a lifecycle phase after
+**package**.
diff --git a/sling-cpconverter-maven-plugin/pom.xml b/sling-cpconverter-maven-plugin/pom.xml
new file mode 100644
index 0000000..cbe35b3
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/pom.xml
@@ -0,0 +1,324 @@
+<?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>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling</artifactId>
+ <version>33</version>
+ <relativePath />
+ </parent>
+
+ <artifactId>sling-cpconverter-maven-plugin</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>maven-plugin</packaging>
+
+ <name>Apache Sling Content Package to Feature Model Converter Plugin</name>
+ <description>
+ Maven Plugin to convert Content Packages to Feature Models
+ </description>
+ <url>https://sling.apache.org/components/sling-cpconverter-maven-plugin/</url>
+
+ <properties>
+ <sling.java.version>8</sling.java.version>
+ <maven.version>3.5.0</maven.version>
+ <maven.scm.version>1.11.1</maven.scm.version>
+ <maven.site.path>${project.artifactId}-archives/${project.artifactId}-LATEST</maven.site.path>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-metadata</artifactId>
+ <version>1.7.1</version>
+ <executions>
+ <execution>
+ <id>generate-metadata</id>
+ <goals>
+ <goal>generate-metadata</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>mojo-descriptor</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>generated-helpmojo</id>
+ <goals>
+ <goal>helpmojo</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-scm-publish-plugin</artifactId>
+ <configuration>
+ <checkoutDirectory>${user.home}/maven-sites/${maven.site.path}</checkoutDirectory>
+ <tryUpdate>true</tryUpdate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>src/site/markdown/**</exclude>
+ <exclude>src/test/resources/**/*.txt</exclude>
+ <exclude>src/test/resources/**/*.feature</exclude>
+ <exclude>src/test/resources/META-INF/services/*</exclude>
+ <exclude>src/it/**/*.json</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-invoker-plugin</artifactId>
+ <configuration>
+ <debug>true</debug>
+ <projectsDirectory>src/it</projectsDirectory>
+ <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+<!-- TODO: it would great to install the test artifacts locally but this will only work if CP Converter is released -> Activate when it is released-->
+<!-- <localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath>-->
+ <pomIncludes>
+ <pomInclude>**/pom.xml</pomInclude>
+ </pomIncludes>
+ <postBuildHookScript>verify</postBuildHookScript>
+ </configuration>
+ <executions>
+ <execution>
+ <id>integration-test</id>
+ <goals>
+ <goal>install</goal>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.core</artifactId>
+ <version>6.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-text</artifactId>
+ <version>1.6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.converter</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.configurator</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.johnzon</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <version>2.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.feature.cpconverter</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.feature</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.feature.io</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.feature.analyser</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-artifact-transfer</artifactId>
+ <version>0.11.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-archiver</artifactId>
+ <version>3.3.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.5</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-osgi</artifactId>
+ <version>0.2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interactivity-api</artifactId>
+ <version>1.0-alpha-6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-archiver</artifactId>
+ <version>3.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>3.0.24</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.framework</artifactId>
+ <version>1.9.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>versions-maven-plugin</artifactId>
+ <version>2.7</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.5</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-filtering</artifactId>
+ <version>3.1.1</version>
+ </dependency>
+ <!-- schema validation -->
+ <dependency>
+ <groupId>com.github.java-json-tools</groupId>
+ <artifactId>json-schema-validator</artifactId>
+ <version>2.2.10</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ <version>2.2.3</version>
+ </dependency>
+ <!-- APIs JARs -->
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.utils</artifactId>
+ <version>1.11.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-api</artifactId>
+ <version>${maven.scm.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-manager-plexus</artifactId>
+ <version>${maven.scm.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-provider-gitexe</artifactId>
+ <version>${maven.scm.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-provider-svnexe</artifactId>
+ <version>${maven.scm.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model-builder</artifactId>
+ <version>3.6.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-exec</artifactId>
+ <version>1.3</version>
+ </dependency>
+ <!-- testing -->
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.10.19</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ </dependencies>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
+
+</project>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/pom.xml
new file mode 100644
index 0000000..cc7f813
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/pom.xml
@@ -0,0 +1,150 @@
+<?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>sling-cpconverter-maven-plugin-test-no-param</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sling-cpconverter-maven-plugin-test-no-param.core</artifactId>
+ <packaging>bundle</packaging>
+
+ <name>CQ Converter Test - 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>org.apache.sling.cpconverter.test.cqconverter</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>org.osgi</groupId>
+ <artifactId>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>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</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>
+
+ <!--
+ Attention: the autoInstallBundle was removed as deploying bundles directly and through a package is causing
+ issues with updates and can prevent the latest code of a bundle being deployed.
+ If you know what you are doing then you can use maven-sling-plugin directly from the Maven CLI.
+ -->
+</project>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java
new file mode 100644
index 0000000..a015bb8
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java
@@ -0,0 +1,53 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.cqconverter;
+
+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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java
new file mode 100644
index 0000000..27db4f4
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java
@@ -0,0 +1,71 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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 \"-//IETF//DTD HTML 2.0//EN\">");
+ 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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java
new file mode 100644
index 0000000..da24407
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java
@@ -0,0 +1,77 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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 \"-//IETF//DTD HTML 2.0//EN\">");
+ 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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java
new file mode 100644
index 0000000..f2f5286
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/invoker.properties b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/invoker.properties
new file mode 100644
index 0000000..209b6ef
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/invoker.properties
@@ -0,0 +1,17 @@
+# 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.
+
+invoker.goals = clean install
+invoker.debug = true
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/pom.xml
new file mode 100644
index 0000000..5ddd115
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/pom.xml
@@ -0,0 +1,418 @@
+<?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>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-no-param</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0.0-SNAPSHOT</version>
+ <name>Apache Sling Features Maven plugin test - no parameter</name>
+ <description>This is just an Apache Sling Content Package Maven plugin test to convert a package with a single
+ bundle
+ </description>
+ <organization>
+ <name>The Apache Software Foundation</name>
+ <url>https://www.apache.org/</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>Apache License, Version 2.0</name>
+ <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <properties>
+ <interpolated_variable>true</interpolated_variable>
+ <osgi.framework.version>1.9.0</osgi.framework.version>
+ <sling.framework.install.incremental>true</sling.framework.install.incremental>
+ <sling.framework.install.startlevel>1</sling.framework.install.startlevel>
+ <sling.ignoreSystemProperties>true</sling.ignoreSystemProperties>
+
+ <sling.host>localhost</sling.host>
+ <sling.port>8080</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.1.0</resource.plugin.version>
+ <jar.plugin.version>3.1.1</jar.plugin.version>
+ <enforcer.plugin.version>3.0.0-M2</enforcer.plugin.version>
+ <compiler.plugin.version>3.8.0</compiler.plugin.version>
+ <bundle.plugin.version>4.2.0</bundle.plugin.version>
+ <clean.plugin.version>3.1.0</clean.plugin.version>
+ <installer.plugin.version>3.0.0-M1</installer.plugin.version>
+ <surfire.plugin.version>3.0.0-M3</surfire.plugin.version>
+ <failsafe.plugin.version>3.0.0-M3</failsafe.plugin.version>
+ <deploy.plugin.version>3.0.0-M1</deploy.plugin.version>
+ <sling.plugin.version>2.4.0</sling.plugin.version>
+ <dependency.plugin.version>3.1.1</dependency.plugin.version>
+ <build.helper.plugin.version>3.0.0</build.helper.plugin.version>
+ <wcmio.plugin.version>1.6.18</wcmio.plugin.version>
+ <filevault-package.plugin.version>1.0.3</filevault-package.plugin.version>
+
+ <osgi.core.version>7.0.0</osgi.core.version>
+ <osgi.annotation.version>7.0.0</osgi.annotation.version>
+ <org.osgi.service.component.annotations.version>1.4.0</org.osgi.service.component.annotations.version>
+ <org.osgi.service.metatype.annotations.version>1.4.0</org.osgi.service.metatype.annotations.version>
+ <org.osgi.compendium.version>5.0.0</org.osgi.compendium.version>
+ <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
+ <javax.inject.version>1</javax.inject.version>
+ <jcr.version>2.0</jcr.version>
+ <sling.models.api.version>1.3.6</sling.models.api.version>
+ <jetbrains.annotations.version>16.0.2</jetbrains.annotations.version>
+ <sling.settings.version>1.3.10</sling.settings.version>
+ <sling.commons.osgi.version>2.4.0</sling.commons.osgi.version>
+ <jackrabbit-api.version>2.16.3</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>8</source>
+ <target>8</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>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>io.wcm.maven.plugins</groupId>
+ <artifactId>wcmio-content-package-maven-plugin</artifactId>
+ <version>${wcmio.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>cpconverter</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>osgi.core</artifactId>
+ <version>${osgi.core.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- OSGi annotations: @Version, @ProviderType, @ConsumerType -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.annotation</artifactId>
+ <version>${osgi.annotation.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- OSGi annotations for DS and metatype -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ <version>${org.osgi.service.component.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.metatype.annotations</artifactId>
+ <version>${org.osgi.service.metatype.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Needs to be placed after 'org.osgi.service.component.annotations' otherwise field @Reference will not work -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>${org.osgi.compendium.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Web Application API -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>${javax.servlet-api.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- dependency injection annotations -->
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>$[javax.inject.version</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- JCR API -->
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <version>${jcr.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Basic Logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.6</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>${jetbrains.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Apache Sling Dependencies -->
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ <version>2.9.0</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>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Basic dependencies for Unit Tests -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</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>1.7.6</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <modules>
+ <module>core</module>
+ <module>ui.apps</module>
+ </modules>
+</project>
+
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/pom.xml
new file mode 100644
index 0000000..4ec8713
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/pom.xml
@@ -0,0 +1,124 @@
+<?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>sling-cpconverter-maven-plugin-test-no-param</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sling-cpconverter-maven-plugin-test-no-param.ui.apps</artifactId>
+ <packaging>content-package</packaging>
+
+ <name>CQ Converter Test - UI Apps</name>
+ <description>
+ This is an empty JCR Package where the JCR Content
+ can be deployed with.
+ </description>
+ <!-- NOTE:
+ 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.
+ -->
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-no-param.core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.feature.cpconverter</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <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>
+ <embeddedTarget>/apps/cqconverter/install</embeddedTarget>
+ <embeddeds>
+ <embedded>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-no-param.core</artifactId>
+ <filter>true</filter>
+ </embedded>
+ </embeddeds>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>@project.groupId@</groupId>
+ <artifactId>@project.artifactId@</artifactId>
+ <version>@project.version@</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <id>convert-cp</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>convert-cp</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <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>
+</project>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/META-INF/vault/filter.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/META-INF/vault/filter.xml
new file mode 100644
index 0000000..e022dcc
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/META-INF/vault/filter.xml
@@ -0,0 +1,40 @@
+<?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/cqconverter/install
+ folder otherwise they wipe all installed bundles.
+ -->
+ <filter root="/content/cpconverter"/>
+ <!--
+ Need to exclude the Install folder otherwise the Bundle will be undeployed
+ as it is in the '/apps/cqconverter/install' folder (see the 'all'
+ package).
+ -->
+ <filter root="/apps/cqconverter">
+ <exclude pattern="/apps/cqconverter/install/.*"/>
+ </filter>
+</workspaceFilter>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/META-INF/vault/settings.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/META-INF/vault/settings.xml
new file mode 100644
index 0000000..b70c9b9
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/META-INF/vault/settings.xml
@@ -0,0 +1,17 @@
+<?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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml
new file mode 100644
index 0000000..1a8424c
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml
@@ -0,0 +1,24 @@
+<?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="CQ Converter Test Root"
+ jcr:description="CQ Converter Test Apps Root folder"
+/>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml
new file mode 100644
index 0000000..99124e4
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml
@@ -0,0 +1,20 @@
+<?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="CQ Converter Test Home Page Component"
+ jcr:description="CQ Converter Test Home Page Component with HTL"
+ sling:resourceSuperType="cqconverter/page"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html
new file mode 100644
index 0000000..dd8f148
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html
@@ -0,0 +1,24 @@
+<!-- /*
+ 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>${properties.jcr:title}</h2>
+<p>CQ Converter Test Home Page from Sling Project Archetype</p>
+<p><b><i>Description: </i></b>${properties.jcr:description}</p>
+<div data-sly-use.sampleRequest="org.apache.sling.cpconverter.test.cqconverter.SampleRequestModel">
+ <p>Current User: ${sampleRequest.currentUser}</p>
+</div>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html
new file mode 100644
index 0000000..67576c8
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html
@@ -0,0 +1,23 @@
+<!-- /*
+ 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>CQ Converter Test Home Page</title>
+<!-- ${properties.jcr:title} -->
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml
new file mode 100644
index 0000000..42debc9
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml
@@ -0,0 +1,23 @@
+<?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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml
new file mode 100644
index 0000000..b822f2a
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml
@@ -0,0 +1,19 @@
+<?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="CQ Converter Test Page Component"
+ jcr:description="CQ Converter Test Page Component with HTL"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html
new file mode 100644
index 0000000..35078a3
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html
@@ -0,0 +1,21 @@
+<!-- /*
+ 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>${properties.jcr:title}</h2>
+<p>CQ Converter Test Page from Sling Project Archetype</p>
+<p><b>Description: </b>${properties.jcr:description}</p>
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html
new file mode 100644
index 0000000..33f7cba
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html
@@ -0,0 +1,19 @@
+<!-- /*
+ 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.
+*/ -->
+CQ Converter Test Footer
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html
new file mode 100644
index 0000000..1e72971
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html
@@ -0,0 +1,23 @@
+<!-- /*
+ 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>CQ Converter Test Page</title>
+<!-- ${properties.jcr:title} -->
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html
new file mode 100644
index 0000000..5dad451
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html
@@ -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.
+*/ -->
+<!DOCTYPE html>
+<html>
+<head>
+ <sly data-sly-include="${'head.html'}"/>
+</head>
+ <body>
+ <h3>Navigation</h3>
+ <div data-sly-list.child="${resource.listChildren}">
+ <a href="${child.path}.html">${child.name}</a>
+ </div>
+ <br/>
+ <sly data-sly-include="${'body.html'}"/>
+ <footer>
+ <sly data-sly-include="${'footer.html'}"/>
+ </footer>
+ </body>
+</html>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml
new file mode 100644
index 0000000..61ba9d7
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml
@@ -0,0 +1,18 @@
+<?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="CQ Converter Test Content Root"
+ jcr:description="CQ Converter Test Content Root Page"
+/>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml
new file mode 100644
index 0000000..821a340
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml
@@ -0,0 +1,20 @@
+<?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="CQ Converter Test Home"
+ jcr:description="CQ Converter Test Home Page"
+ sling:resourceType="cqconverter/home"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/welcome/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/welcome/.content.xml
new file mode 100644
index 0000000..48e6832
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/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="CQ Converter Test Welcome"
+ jcr:description="CQ Converter Test Welcome Page"
+ sling:resourceType="cqconverter/page"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/verify.bsh b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/verify.bsh
new file mode 100644
index 0000000..88da15c
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-no-parameters/verify.bsh
@@ -0,0 +1,93 @@
+/*
+ * 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.io.*;
+import java.util.*;
+import org.codehaus.plexus.util.*;
+
+ boolean check() {
+ String projectName = "sling-cpconverter-maven-plugin-test-no-param.ui.apps";
+ String projectCoreName = "sling-cpconverter-maven-plugin-test-no-param.core";
+ String projectVersion = "1.0.0-SNAPSHOT";
+ String projectGroup = "org.apache.sling";
+ String projectGroupPath = projectGroup.replaceAll("\\.", "/");
+
+ File targetFolder = new File(basedir, "ui.apps/target");
+ File packageFile = new File(targetFolder, projectName + "-" + projectVersion + ".zip");
+ if(!packageFile.exists()) {
+ System.out.println("Content Package was not created: " + packageFile);
+ return false;
+ }
+ File outputFolder = new File(targetFolder, "cp-conversion");
+ File featureModelFolder = new File(outputFolder, "fm.out");
+ if(!featureModelFolder.exists()) {
+ System.out.println("Feature Model Folder was not created" + featureModelFolder);
+ return false;
+ }
+ File featureModelFile = new File(featureModelFolder, projectName + ".json");
+ if(!featureModelFile.exists()) {
+ System.out.println("Feature Model File was not created: " + featureModelFile);
+ return false;
+ }
+ String log = FileUtils.fileRead(featureModelFile);
+ System.out.println("Feature Model File Content: " + log);
+ String[] values = {
+ "\"id\":\"" + projectGroup + ":" + projectName + ":slingosgifeature:" + projectVersion + "\"",
+ "\"bundles\":[",
+ "\"id\":\"" + projectGroup + ":" + projectCoreName + ":" + projectVersion + "\"",
+ "\"content-packages:ARTIFACTS|true\":[",
+ "\"" + projectGroup + ":" + projectName + ":zip:cp2fm-converted:" + projectVersion + "\""
+ };
+ for (String value : values) {
+ if (log.indexOf(value) < 0) {
+ System.out.println("Did not find line: " + value + " -> FAILED!");
+ return false;
+ }
+ }
+ File convertedPackageFolder = new File(outputFolder, projectGroupPath + "/" + projectName + "/" + projectVersion);
+ if(!convertedPackageFolder.exists()) {
+ System.out.println("Converted Package Folder was not created: " + convertedPackageFolder);
+ return false;
+ }
+ File convertedPackageFile = new File(convertedPackageFolder, projectName + "-" + projectVersion + "-cp2fm-converted.zip");
+ if(!convertedPackageFile.exists()) {
+ System.out.println("Converted Package File was not created: " + convertedPackageFile);
+ return false;
+ }
+ // TODO: Adjust the code here to also support local repositories when this is activated
+ File userHomeFolder = new File(System.getProperty("user.home"));
+ File localMavenRepo = new File(userHomeFolder, ".m2/repository");
+ File convertedPackageTargetFolder = new File(localMavenRepo, projectGroupPath + "/" + projectName + "/" + projectVersion);
+ if(!convertedPackageTargetFolder.exists()) {
+ System.out.println("Converted Package Target (Maven) Folder was not created: " + convertedPackageTargetFolder);
+ return false;
+ }
+ File convertedPackageTargetFile = new File(convertedPackageTargetFolder, projectName + "-" + projectVersion + "-cp2fm-converted.zip");
+ if(!convertedPackageTargetFile.exists()) {
+ System.out.println("Converted Package Target File was not created: " + convertedPackageTargetFile);
+ return false;
+ }
+
+ return true;
+ }
+ try {
+ return check();
+ }
+ catch(Throwable t) {
+ t.printStackTrace();
+ return false;
+ }
+ return true;
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/pom.xml
new file mode 100644
index 0000000..e9a550d
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/pom.xml
@@ -0,0 +1,150 @@
+<?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>sling-cpconverter-maven-plugin-test-target-mode</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sling-cpconverter-maven-plugin-test-target-mode.core</artifactId>
+ <packaging>bundle</packaging>
+
+ <name>CQ Converter Test - 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>org.apache.sling.cpconverter.test.cqconverter</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>org.osgi</groupId>
+ <artifactId>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>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</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>
+
+ <!--
+ Attention: the autoInstallBundle was removed as deploying bundles directly and through a package is causing
+ issues with updates and can prevent the latest code of a bundle being deployed.
+ If you know what you are doing then you can use maven-sling-plugin directly from the Maven CLI.
+ -->
+</project>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java
new file mode 100644
index 0000000..a015bb8
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java
@@ -0,0 +1,53 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.cqconverter;
+
+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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java
new file mode 100644
index 0000000..27db4f4
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java
@@ -0,0 +1,71 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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 \"-//IETF//DTD HTML 2.0//EN\">");
+ 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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java
new file mode 100644
index 0000000..da24407
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java
@@ -0,0 +1,77 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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 \"-//IETF//DTD HTML 2.0//EN\">");
+ 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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java
new file mode 100644
index 0000000..f2f5286
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/fm.launcher/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/fm.launcher/pom.xml
new file mode 100644
index 0000000..ee2a9c9
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/fm.launcher/pom.xml
@@ -0,0 +1,98 @@
+<?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>sling-cpconverter-maven-plugin-test-target-mode</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sling-cpconverter-maven-plugin-test-target-mode.fm.launcher</artifactId>
+ <packaging>jar</packaging>
+
+ <name>CQ Converter Test - UI Apps</name>
+ <description>
+ This is an empty JCR Package where the JCR Content
+ can be deployed with.
+ </description>
+ <!-- NOTE:
+ 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.
+ -->
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-target-mode.ui.apps</artifactId>
+ <version>${project.version}</version>
+ <type>zip</type>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.feature.cpconverter</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>@project.groupId@</groupId>
+ <artifactId>@project.artifactId@</artifactId>
+ <version>@project.version@</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <id>convert-cp</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>convert-cp</goal>
+ </goals>
+ <configuration>
+ <!-- NOTE: ${} is replaced no matter what so this trick seems to work by adding a zero-width-whitespace character (​)-->
+ <artifactIdOverride>$​{project.groupId}:$​{project.artifactId}:slingosgifeature:@project.artifactId@:$​{project.version}</artifactIdOverride>
+ <installConvertedPackage>true</installConvertedPackage>
+ <contentPackages>
+ <contentPackage>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-target-mode.ui.apps</artifactId>
+ </contentPackage>
+ </contentPackages>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/invoker.properties b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/invoker.properties
new file mode 100644
index 0000000..209b6ef
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/invoker.properties
@@ -0,0 +1,17 @@
+# 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.
+
+invoker.goals = clean install
+invoker.debug = true
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/pom.xml
new file mode 100644
index 0000000..c671441
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/pom.xml
@@ -0,0 +1,419 @@
+<?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>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-target-mode</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0.0-SNAPSHOT</version>
+ <name>Apache Sling Features Maven plugin test - target mode</name>
+ <description>This is just an Apache Sling Content Package Maven plugin test to convert a package with a single
+ bundle
+ </description>
+ <organization>
+ <name>The Apache Software Foundation</name>
+ <url>https://www.apache.org/</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>Apache License, Version 2.0</name>
+ <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <properties>
+ <interpolated_variable>true</interpolated_variable>
+ <osgi.framework.version>1.9.0</osgi.framework.version>
+ <sling.framework.install.incremental>true</sling.framework.install.incremental>
+ <sling.framework.install.startlevel>1</sling.framework.install.startlevel>
+ <sling.ignoreSystemProperties>true</sling.ignoreSystemProperties>
+
+ <sling.host>localhost</sling.host>
+ <sling.port>8080</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.1.0</resource.plugin.version>
+ <jar.plugin.version>3.1.1</jar.plugin.version>
+ <enforcer.plugin.version>3.0.0-M2</enforcer.plugin.version>
+ <compiler.plugin.version>3.8.0</compiler.plugin.version>
+ <bundle.plugin.version>4.2.0</bundle.plugin.version>
+ <clean.plugin.version>3.1.0</clean.plugin.version>
+ <installer.plugin.version>3.0.0-M1</installer.plugin.version>
+ <surfire.plugin.version>3.0.0-M3</surfire.plugin.version>
+ <failsafe.plugin.version>3.0.0-M3</failsafe.plugin.version>
+ <deploy.plugin.version>3.0.0-M1</deploy.plugin.version>
+ <sling.plugin.version>2.4.0</sling.plugin.version>
+ <dependency.plugin.version>3.1.1</dependency.plugin.version>
+ <build.helper.plugin.version>3.0.0</build.helper.plugin.version>
+ <wcmio.plugin.version>1.6.18</wcmio.plugin.version>
+ <filevault-package.plugin.version>1.0.3</filevault-package.plugin.version>
+
+ <osgi.core.version>7.0.0</osgi.core.version>
+ <osgi.annotation.version>7.0.0</osgi.annotation.version>
+ <org.osgi.service.component.annotations.version>1.4.0</org.osgi.service.component.annotations.version>
+ <org.osgi.service.metatype.annotations.version>1.4.0</org.osgi.service.metatype.annotations.version>
+ <org.osgi.compendium.version>5.0.0</org.osgi.compendium.version>
+ <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
+ <javax.inject.version>1</javax.inject.version>
+ <jcr.version>2.0</jcr.version>
+ <sling.models.api.version>1.3.6</sling.models.api.version>
+ <jetbrains.annotations.version>16.0.2</jetbrains.annotations.version>
+ <sling.settings.version>1.3.10</sling.settings.version>
+ <sling.commons.osgi.version>2.4.0</sling.commons.osgi.version>
+ <jackrabbit-api.version>2.16.3</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>8</source>
+ <target>8</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>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>io.wcm.maven.plugins</groupId>
+ <artifactId>wcmio-content-package-maven-plugin</artifactId>
+ <version>${wcmio.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>cpconverter</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>osgi.core</artifactId>
+ <version>${osgi.core.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- OSGi annotations: @Version, @ProviderType, @ConsumerType -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.annotation</artifactId>
+ <version>${osgi.annotation.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- OSGi annotations for DS and metatype -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ <version>${org.osgi.service.component.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.metatype.annotations</artifactId>
+ <version>${org.osgi.service.metatype.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Needs to be placed after 'org.osgi.service.component.annotations' otherwise field @Reference will not work -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>${org.osgi.compendium.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Web Application API -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>${javax.servlet-api.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- dependency injection annotations -->
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>$[javax.inject.version</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- JCR API -->
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <version>${jcr.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Basic Logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.6</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>${jetbrains.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Apache Sling Dependencies -->
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ <version>2.9.0</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>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Basic dependencies for Unit Tests -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</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>1.7.6</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <modules>
+ <module>core</module>
+ <module>ui.apps</module>
+ <module>fm.launcher</module>
+ </modules>
+</project>
+
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/pom.xml
new file mode 100644
index 0000000..393a432
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/pom.xml
@@ -0,0 +1,108 @@
+<?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>sling-cpconverter-maven-plugin-test-target-mode</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sling-cpconverter-maven-plugin-test-target-mode.ui.apps</artifactId>
+ <packaging>content-package</packaging>
+
+ <name>CQ Converter Test - UI Apps</name>
+ <description>
+ This is an empty JCR Package where the JCR Content
+ can be deployed with.
+ </description>
+ <!-- NOTE:
+ 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.
+ -->
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-target-mode.core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.feature.cpconverter</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <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>
+ <embeddedTarget>/apps/cqconverter/install</embeddedTarget>
+ <embeddeds>
+ <embedded>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-target-mode.core</artifactId>
+ <filter>true</filter>
+ </embedded>
+ </embeddeds>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <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>
+</project>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/META-INF/vault/filter.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/META-INF/vault/filter.xml
new file mode 100644
index 0000000..e022dcc
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/META-INF/vault/filter.xml
@@ -0,0 +1,40 @@
+<?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/cqconverter/install
+ folder otherwise they wipe all installed bundles.
+ -->
+ <filter root="/content/cpconverter"/>
+ <!--
+ Need to exclude the Install folder otherwise the Bundle will be undeployed
+ as it is in the '/apps/cqconverter/install' folder (see the 'all'
+ package).
+ -->
+ <filter root="/apps/cqconverter">
+ <exclude pattern="/apps/cqconverter/install/.*"/>
+ </filter>
+</workspaceFilter>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/META-INF/vault/settings.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/META-INF/vault/settings.xml
new file mode 100644
index 0000000..b70c9b9
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/META-INF/vault/settings.xml
@@ -0,0 +1,17 @@
+<?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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml
new file mode 100644
index 0000000..1a8424c
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml
@@ -0,0 +1,24 @@
+<?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="CQ Converter Test Root"
+ jcr:description="CQ Converter Test Apps Root folder"
+/>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml
new file mode 100644
index 0000000..99124e4
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml
@@ -0,0 +1,20 @@
+<?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="CQ Converter Test Home Page Component"
+ jcr:description="CQ Converter Test Home Page Component with HTL"
+ sling:resourceSuperType="cqconverter/page"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html
new file mode 100644
index 0000000..dd8f148
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html
@@ -0,0 +1,24 @@
+<!-- /*
+ 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>${properties.jcr:title}</h2>
+<p>CQ Converter Test Home Page from Sling Project Archetype</p>
+<p><b><i>Description: </i></b>${properties.jcr:description}</p>
+<div data-sly-use.sampleRequest="org.apache.sling.cpconverter.test.cqconverter.SampleRequestModel">
+ <p>Current User: ${sampleRequest.currentUser}</p>
+</div>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html
new file mode 100644
index 0000000..67576c8
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html
@@ -0,0 +1,23 @@
+<!-- /*
+ 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>CQ Converter Test Home Page</title>
+<!-- ${properties.jcr:title} -->
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml
new file mode 100644
index 0000000..42debc9
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml
@@ -0,0 +1,23 @@
+<?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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml
new file mode 100644
index 0000000..b822f2a
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml
@@ -0,0 +1,19 @@
+<?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="CQ Converter Test Page Component"
+ jcr:description="CQ Converter Test Page Component with HTL"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html
new file mode 100644
index 0000000..35078a3
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html
@@ -0,0 +1,21 @@
+<!-- /*
+ 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>${properties.jcr:title}</h2>
+<p>CQ Converter Test Page from Sling Project Archetype</p>
+<p><b>Description: </b>${properties.jcr:description}</p>
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html
new file mode 100644
index 0000000..33f7cba
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html
@@ -0,0 +1,19 @@
+<!-- /*
+ 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.
+*/ -->
+CQ Converter Test Footer
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html
new file mode 100644
index 0000000..1e72971
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html
@@ -0,0 +1,23 @@
+<!-- /*
+ 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>CQ Converter Test Page</title>
+<!-- ${properties.jcr:title} -->
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html
new file mode 100644
index 0000000..5dad451
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html
@@ -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.
+*/ -->
+<!DOCTYPE html>
+<html>
+<head>
+ <sly data-sly-include="${'head.html'}"/>
+</head>
+ <body>
+ <h3>Navigation</h3>
+ <div data-sly-list.child="${resource.listChildren}">
+ <a href="${child.path}.html">${child.name}</a>
+ </div>
+ <br/>
+ <sly data-sly-include="${'body.html'}"/>
+ <footer>
+ <sly data-sly-include="${'footer.html'}"/>
+ </footer>
+ </body>
+</html>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml
new file mode 100644
index 0000000..61ba9d7
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml
@@ -0,0 +1,18 @@
+<?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="CQ Converter Test Content Root"
+ jcr:description="CQ Converter Test Content Root Page"
+/>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml
new file mode 100644
index 0000000..821a340
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml
@@ -0,0 +1,20 @@
+<?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="CQ Converter Test Home"
+ jcr:description="CQ Converter Test Home Page"
+ sling:resourceType="cqconverter/home"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/home/welcome/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/home/welcome/.content.xml
new file mode 100644
index 0000000..48e6832
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/ui.apps/src/main/content/jcr_root/content/cpconverter/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="CQ Converter Test Welcome"
+ jcr:description="CQ Converter Test Welcome Page"
+ sling:resourceType="cqconverter/page"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/verify.bsh b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/verify.bsh
new file mode 100644
index 0000000..0200786
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-target-mode/verify.bsh
@@ -0,0 +1,94 @@
+/*
+ * 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.io.*;
+import java.util.*;
+import org.codehaus.plexus.util.*;
+
+ boolean check() {
+ String projectName = "sling-cpconverter-maven-plugin-test-target-mode.ui.apps";
+ String projectCoreName = "sling-cpconverter-maven-plugin-test-target-mode.core";
+ String projectVersion = "1.0.0-SNAPSHOT";
+ String projectGroup = "org.apache.sling";
+ String projectGroupPath = projectGroup.replaceAll("\\.", "/");
+
+ File cpTargetFolder = new File(basedir, "ui.apps/target");
+ File packageFile = new File(cpTargetFolder, projectName + "-" + projectVersion + ".zip");
+ if(!packageFile.exists()) {
+ System.out.println("Content Package was not created: " + packageFile);
+ return false;
+ }
+ File targetFolder = new File(basedir, "fm.launcher/target");
+ File outputFolder = new File(targetFolder, "cp-conversion");
+ File featureModelFolder = new File(outputFolder, "fm.out");
+ if(!featureModelFolder.exists()) {
+ System.out.println("Feature Model Folder was not created" + featureModelFolder);
+ return false;
+ }
+ File featureModelFile = new File(featureModelFolder, projectName + ".json");
+ if(!featureModelFile.exists()) {
+ System.out.println("Feature Model File was not created: " + featureModelFile);
+ return false;
+ }
+ String log = FileUtils.fileRead(featureModelFile);
+ System.out.println("Feature Model File Content: " + log);
+ String[] values = {
+ "\"id\":\"${project.groupId}:${project.artifactId}:slingosgifeature:sling-cpconverter-maven-plugin:${project.version}\"",
+ "\"bundles\":[",
+ "\"id\":\"" + projectGroup + ":" + projectCoreName + ":" + projectVersion + "\"",
+ "\"content-packages:ARTIFACTS|true\":[",
+ "\"" + projectGroup + ":" + projectName + ":zip:cp2fm-converted:" + projectVersion + "\""
+ };
+ for (String value : values) {
+ if (log.indexOf(value) < 0) {
+ System.out.println("Did not find line: " + value + " -> FAILED!");
+ return false;
+ }
+ }
+ File convertedPackageFolder = new File(outputFolder, projectGroupPath + "/" + projectName + "/" + projectVersion);
+ if(!convertedPackageFolder.exists()) {
+ System.out.println("Converted Package Folder was not created: " + convertedPackageFolder);
+ return false;
+ }
+ File convertedPackageFile = new File(convertedPackageFolder, projectName + "-" + projectVersion + "-cp2fm-converted.zip");
+ if(!convertedPackageFile.exists()) {
+ System.out.println("Converted Package File was not created: " + convertedPackageFile);
+ return false;
+ }
+ // TODO: Adjust the code here to also support local repositories when this is activated
+ File userHomeFolder = new File(System.getProperty("user.home"));
+ File localMavenRepo = new File(userHomeFolder, ".m2/repository");
+ File convertedPackageTargetFolder = new File(localMavenRepo, projectGroupPath + "/" + projectName + "/" + projectVersion);
+ if(!convertedPackageTargetFolder.exists()) {
+ System.out.println("Converted Package Target (Maven) Folder was not created: " + convertedPackageTargetFolder);
+ return false;
+ }
+ File convertedPackageTargetFile = new File(convertedPackageTargetFolder, projectName + "-" + projectVersion + "-cp2fm-converted.zip");
+ if(!convertedPackageTargetFile.exists()) {
+ System.out.println("Converted Package Target File was not created: " + convertedPackageTargetFile);
+ return false;
+ }
+
+ return true;
+ }
+ try {
+ return check();
+ }
+ catch(Throwable t) {
+ t.printStackTrace();
+ return false;
+ }
+ return true;
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/pom.xml
new file mode 100644
index 0000000..1fc3757
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/pom.xml
@@ -0,0 +1,150 @@
+<?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>sling-cpconverter-maven-plugin-test-with-param</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sling-cpconverter-maven-plugin-test-with-param.core</artifactId>
+ <packaging>bundle</packaging>
+
+ <name>CQ Converter Test - 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>org.apache.sling.cpconverter.test.cqconverter</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>org.osgi</groupId>
+ <artifactId>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>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</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>
+
+ <!--
+ Attention: the autoInstallBundle was removed as deploying bundles directly and through a package is causing
+ issues with updates and can prevent the latest code of a bundle being deployed.
+ If you know what you are doing then you can use maven-sling-plugin directly from the Maven CLI.
+ -->
+</project>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java
new file mode 100644
index 0000000..a015bb8
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/cqconverter/SampleRequestModel.java
@@ -0,0 +1,53 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.cqconverter;
+
+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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java
new file mode 100644
index 0000000..27db4f4
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByPathServlet.java
@@ -0,0 +1,71 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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 \"-//IETF//DTD HTML 2.0//EN\">");
+ 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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java
new file mode 100644
index 0000000..da24407
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/main/java/org/apache/sling/cpconverter/test/servlet/ByResourceTypeServlet.java
@@ -0,0 +1,77 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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 \"-//IETF//DTD HTML 2.0//EN\">");
+ 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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java
new file mode 100644
index 0000000..f2f5286
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/core/src/test/java/org/apache/sling/cpconverter/test/org/apache/sling/cpconverter/test/servlet/ByPathServletTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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 org.apache.sling.cpconverter.test.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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/invoker.properties b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/invoker.properties
new file mode 100644
index 0000000..209b6ef
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/invoker.properties
@@ -0,0 +1,17 @@
+# 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.
+
+invoker.goals = clean install
+invoker.debug = true
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/pom.xml
new file mode 100644
index 0000000..5df12ef
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/pom.xml
@@ -0,0 +1,418 @@
+<?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>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-with-param</artifactId>
+ <packaging>pom</packaging>
+ <version>1.0.0-SNAPSHOT</version>
+ <name>Apache Sling Features Maven plugin test - with parameter</name>
+ <description>This is just an Apache Sling Content Package Maven plugin test to convert a package with a single
+ bundle
+ </description>
+ <organization>
+ <name>The Apache Software Foundation</name>
+ <url>https://www.apache.org/</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>Apache License, Version 2.0</name>
+ <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <properties>
+ <interpolated_variable>true</interpolated_variable>
+ <osgi.framework.version>1.9.0</osgi.framework.version>
+ <sling.framework.install.incremental>true</sling.framework.install.incremental>
+ <sling.framework.install.startlevel>1</sling.framework.install.startlevel>
+ <sling.ignoreSystemProperties>true</sling.ignoreSystemProperties>
+
+ <sling.host>localhost</sling.host>
+ <sling.port>8080</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.1.0</resource.plugin.version>
+ <jar.plugin.version>3.1.1</jar.plugin.version>
+ <enforcer.plugin.version>3.0.0-M2</enforcer.plugin.version>
+ <compiler.plugin.version>3.8.0</compiler.plugin.version>
+ <bundle.plugin.version>4.2.0</bundle.plugin.version>
+ <clean.plugin.version>3.1.0</clean.plugin.version>
+ <installer.plugin.version>3.0.0-M1</installer.plugin.version>
+ <surfire.plugin.version>3.0.0-M3</surfire.plugin.version>
+ <failsafe.plugin.version>3.0.0-M3</failsafe.plugin.version>
+ <deploy.plugin.version>3.0.0-M1</deploy.plugin.version>
+ <sling.plugin.version>2.4.0</sling.plugin.version>
+ <dependency.plugin.version>3.1.1</dependency.plugin.version>
+ <build.helper.plugin.version>3.0.0</build.helper.plugin.version>
+ <wcmio.plugin.version>1.6.18</wcmio.plugin.version>
+ <filevault-package.plugin.version>1.0.3</filevault-package.plugin.version>
+
+ <osgi.core.version>7.0.0</osgi.core.version>
+ <osgi.annotation.version>7.0.0</osgi.annotation.version>
+ <org.osgi.service.component.annotations.version>1.4.0</org.osgi.service.component.annotations.version>
+ <org.osgi.service.metatype.annotations.version>1.4.0</org.osgi.service.metatype.annotations.version>
+ <org.osgi.compendium.version>5.0.0</org.osgi.compendium.version>
+ <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
+ <javax.inject.version>1</javax.inject.version>
+ <jcr.version>2.0</jcr.version>
+ <sling.models.api.version>1.3.6</sling.models.api.version>
+ <jetbrains.annotations.version>16.0.2</jetbrains.annotations.version>
+ <sling.settings.version>1.3.10</sling.settings.version>
+ <sling.commons.osgi.version>2.4.0</sling.commons.osgi.version>
+ <jackrabbit-api.version>2.16.3</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>8</source>
+ <target>8</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>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>io.wcm.maven.plugins</groupId>
+ <artifactId>wcmio-content-package-maven-plugin</artifactId>
+ <version>${wcmio.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>cpconverter</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>osgi.core</artifactId>
+ <version>${osgi.core.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- OSGi annotations: @Version, @ProviderType, @ConsumerType -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.annotation</artifactId>
+ <version>${osgi.annotation.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- OSGi annotations for DS and metatype -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ <version>${org.osgi.service.component.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.metatype.annotations</artifactId>
+ <version>${org.osgi.service.metatype.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Needs to be placed after 'org.osgi.service.component.annotations' otherwise field @Reference will not work -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>${org.osgi.compendium.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Web Application API -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>${javax.servlet-api.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- dependency injection annotations -->
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>$[javax.inject.version</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- JCR API -->
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <version>${jcr.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Basic Logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.6</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>${jetbrains.annotations.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Apache Sling Dependencies -->
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ <version>2.9.0</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>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Basic dependencies for Unit Tests -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</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>1.7.6</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <modules>
+ <module>core</module>
+ <module>ui.apps</module>
+ </modules>
+</project>
+
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/pom.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/pom.xml
new file mode 100644
index 0000000..a3d1a68
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/pom.xml
@@ -0,0 +1,129 @@
+<?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>sling-cpconverter-maven-plugin-test-with-param</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>sling-cpconverter-maven-plugin-test-with-param.ui.apps</artifactId>
+ <packaging>content-package</packaging>
+
+ <name>CQ Converter Test - UI Apps</name>
+ <description>
+ This is an empty JCR Package where the JCR Content
+ can be deployed with.
+ </description>
+ <!-- NOTE:
+ 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.
+ -->
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-with-param.core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.feature.cpconverter</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <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>
+ <embeddedTarget>/apps/cqconverter/install</embeddedTarget>
+ <embeddeds>
+ <embedded>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sling-cpconverter-maven-plugin-test-with-param.core</artifactId>
+ <filter>true</filter>
+ </embedded>
+ </embeddeds>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>@project.groupId@</groupId>
+ <artifactId>@project.artifactId@</artifactId>
+ <version>@project.version@</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <id>convert-cp</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>convert-cp</goal>
+ </goals>
+ <configuration>
+ <!-- NOTE: ${} is replaced no matter what so this trick seems to work by adding a zero-width-whitespace character (​)-->
+ <artifactIdOverride>$​{project.groupId}:$​{project.artifactId}:slingosgifeature:@project.artifactId@:$​{project.version}</artifactIdOverride>
+ <installConvertedPackage>true</installConvertedPackage>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <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>
+</project>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/META-INF/vault/filter.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/META-INF/vault/filter.xml
new file mode 100644
index 0000000..e022dcc
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/META-INF/vault/filter.xml
@@ -0,0 +1,40 @@
+<?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/cqconverter/install
+ folder otherwise they wipe all installed bundles.
+ -->
+ <filter root="/content/cpconverter"/>
+ <!--
+ Need to exclude the Install folder otherwise the Bundle will be undeployed
+ as it is in the '/apps/cqconverter/install' folder (see the 'all'
+ package).
+ -->
+ <filter root="/apps/cqconverter">
+ <exclude pattern="/apps/cqconverter/install/.*"/>
+ </filter>
+</workspaceFilter>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/META-INF/vault/settings.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/META-INF/vault/settings.xml
new file mode 100644
index 0000000..b70c9b9
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/META-INF/vault/settings.xml
@@ -0,0 +1,17 @@
+<?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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml
new file mode 100644
index 0000000..1a8424c
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/.content.xml
@@ -0,0 +1,24 @@
+<?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="CQ Converter Test Root"
+ jcr:description="CQ Converter Test Apps Root folder"
+/>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml
new file mode 100644
index 0000000..99124e4
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/.content.xml
@@ -0,0 +1,20 @@
+<?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="CQ Converter Test Home Page Component"
+ jcr:description="CQ Converter Test Home Page Component with HTL"
+ sling:resourceSuperType="cqconverter/page"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html
new file mode 100644
index 0000000..dd8f148
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/body.html
@@ -0,0 +1,24 @@
+<!-- /*
+ 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>${properties.jcr:title}</h2>
+<p>CQ Converter Test Home Page from Sling Project Archetype</p>
+<p><b><i>Description: </i></b>${properties.jcr:description}</p>
+<div data-sly-use.sampleRequest="org.apache.sling.cpconverter.test.cqconverter.SampleRequestModel">
+ <p>Current User: ${sampleRequest.currentUser}</p>
+</div>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html
new file mode 100644
index 0000000..67576c8
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/home/head.html
@@ -0,0 +1,23 @@
+<!-- /*
+ 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>CQ Converter Test Home Page</title>
+<!-- ${properties.jcr:title} -->
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml
new file mode 100644
index 0000000..42debc9
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/install/.content.xml
@@ -0,0 +1,23 @@
+<?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/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml
new file mode 100644
index 0000000..b822f2a
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/.content.xml
@@ -0,0 +1,19 @@
+<?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="CQ Converter Test Page Component"
+ jcr:description="CQ Converter Test Page Component with HTL"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html
new file mode 100644
index 0000000..35078a3
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/body.html
@@ -0,0 +1,21 @@
+<!-- /*
+ 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>${properties.jcr:title}</h2>
+<p>CQ Converter Test Page from Sling Project Archetype</p>
+<p><b>Description: </b>${properties.jcr:description}</p>
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html
new file mode 100644
index 0000000..33f7cba
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/footer.html
@@ -0,0 +1,19 @@
+<!-- /*
+ 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.
+*/ -->
+CQ Converter Test Footer
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html
new file mode 100644
index 0000000..1e72971
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/head.html
@@ -0,0 +1,23 @@
+<!-- /*
+ 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>CQ Converter Test Page</title>
+<!-- ${properties.jcr:title} -->
\ No newline at end of file
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html
new file mode 100644
index 0000000..5dad451
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/apps/cqconverter/page/page.html
@@ -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.
+*/ -->
+<!DOCTYPE html>
+<html>
+<head>
+ <sly data-sly-include="${'head.html'}"/>
+</head>
+ <body>
+ <h3>Navigation</h3>
+ <div data-sly-list.child="${resource.listChildren}">
+ <a href="${child.path}.html">${child.name}</a>
+ </div>
+ <br/>
+ <sly data-sly-include="${'body.html'}"/>
+ <footer>
+ <sly data-sly-include="${'footer.html'}"/>
+ </footer>
+ </body>
+</html>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml
new file mode 100644
index 0000000..61ba9d7
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/.content.xml
@@ -0,0 +1,18 @@
+<?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="CQ Converter Test Content Root"
+ jcr:description="CQ Converter Test Content Root Page"
+/>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml
new file mode 100644
index 0000000..821a340
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/.content.xml
@@ -0,0 +1,20 @@
+<?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="CQ Converter Test Home"
+ jcr:description="CQ Converter Test Home Page"
+ sling:resourceType="cqconverter/home"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/welcome/.content.xml b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/home/welcome/.content.xml
new file mode 100644
index 0000000..48e6832
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/ui.apps/src/main/content/jcr_root/content/cpconverter/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="CQ Converter Test Welcome"
+ jcr:description="CQ Converter Test Welcome Page"
+ sling:resourceType="cqconverter/page"
+>
+</jcr:root>
diff --git a/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/verify.bsh b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/verify.bsh
new file mode 100644
index 0000000..d512198
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/it/package-with-single-bundle-with-parameters/verify.bsh
@@ -0,0 +1,93 @@
+/*
+ * 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.io.*;
+import java.util.*;
+import org.codehaus.plexus.util.*;
+
+ boolean check() {
+ String projectName = "sling-cpconverter-maven-plugin-test-with-param.ui.apps";
+ String projectCoreName = "sling-cpconverter-maven-plugin-test-with-param.core";
+ String projectVersion = "1.0.0-SNAPSHOT";
+ String projectGroup = "org.apache.sling";
+ String projectGroupPath = projectGroup.replaceAll("\\.", "/");
+
+ File targetFolder = new File(basedir, "ui.apps/target");
+ File packageFile = new File(targetFolder, projectName + "-" + projectVersion + ".zip");
+ if(!packageFile.exists()) {
+ System.out.println("Content Package was not created: " + packageFile);
+ return false;
+ }
+ File outputFolder = new File(targetFolder, "cp-conversion");
+ File featureModelFolder = new File(outputFolder, "fm.out");
+ if(!featureModelFolder.exists()) {
+ System.out.println("Feature Model Folder was not created" + featureModelFolder);
+ return false;
+ }
+ File featureModelFile = new File(featureModelFolder, projectName + ".json");
+ if(!featureModelFile.exists()) {
+ System.out.println("Feature Model File was not created: " + featureModelFile);
+ return false;
+ }
+ String log = FileUtils.fileRead(featureModelFile);
+ System.out.println("Feature Model File Content: " + log);
+ String[] values = {
+ "\"id\":\"${project.groupId}:${project.artifactId}:slingosgifeature:sling-cpconverter-maven-plugin:${project.version}\"",
+ "\"bundles\":[",
+ "\"id\":\"" + projectGroup + ":" + projectCoreName + ":" + projectVersion + "\"",
+ "\"content-packages:ARTIFACTS|true\":[",
+ "\"" + projectGroup + ":" + projectName + ":zip:cp2fm-converted:" + projectVersion + "\""
+ };
+ for (String value : values) {
+ if (log.indexOf(value) < 0) {
+ System.out.println("Did not find line: " + value + " -> FAILED!");
+ return false;
+ }
+ }
+ File convertedPackageFolder = new File(outputFolder, projectGroupPath + "/" + projectName + "/" + projectVersion);
+ if(!convertedPackageFolder.exists()) {
+ System.out.println("Converted Package Folder was not created: " + convertedPackageFolder);
+ return false;
+ }
+ File convertedPackageFile = new File(convertedPackageFolder, projectName + "-" + projectVersion + "-cp2fm-converted.zip");
+ if(!convertedPackageFile.exists()) {
+ System.out.println("Converted Package File was not created: " + convertedPackageFile);
+ return false;
+ }
+ // TODO: Adjust the code here to also support local repositories when this is activated
+ File userHomeFolder = new File(System.getProperty("user.home"));
+ File localMavenRepo = new File(userHomeFolder, ".m2/repository");
+ File convertedPackageTargetFolder = new File(localMavenRepo, projectGroupPath + "/" + projectName + "/" + projectVersion);
+ if(!convertedPackageTargetFolder.exists()) {
+ System.out.println("Converted Package Target (Maven) Folder was not created: " + convertedPackageTargetFolder);
+ return false;
+ }
+ File convertedPackageTargetFile = new File(convertedPackageTargetFolder, projectName + "-" + projectVersion + "-cp2fm-converted.zip");
+ if(!convertedPackageTargetFile.exists()) {
+ System.out.println("Converted Package Target File was not created: " + convertedPackageTargetFile);
+ return false;
+ }
+
+ return true;
+ }
+ try {
+ return check();
+ }
+ catch(Throwable t) {
+ t.printStackTrace();
+ return false;
+ }
+ return true;
diff --git a/sling-cpconverter-maven-plugin/src/main/java/org/apache/sling/cpconverter/maven/mojos/ContentPackage.java b/sling-cpconverter-maven-plugin/src/main/java/org/apache/sling/cpconverter/maven/mojos/ContentPackage.java
new file mode 100644
index 0000000..0b2b36c
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/main/java/org/apache/sling/cpconverter/maven/mojos/ContentPackage.java
@@ -0,0 +1,114 @@
+/*
+ * 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 org.apache.sling.cpconverter.maven.mojos;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+public class ContentPackage {
+
+ /**
+ * The content package Group Id
+ */
+ private String groupId = "";
+
+ /**
+ * The content package Artifact Id
+ */
+ private String artifactId = "";
+
+ private String type = "zip";
+
+ // TODO: Classifier should not be set as we have the one from the converter
+ private String classifier = "";
+
+ private boolean excludeTransitive;
+
+ public void setGroupId(String groupId) {
+ this.groupId = groupId == null ? "" : groupId;
+ }
+
+ public void setArtifactId(String artifactId) {
+ this.artifactId = artifactId == null ? "" : artifactId;
+ }
+
+ public void setExcludeTransitive(boolean excludeTransitive) {
+ this.excludeTransitive = excludeTransitive;
+ }
+
+ public boolean isExcludeTransitive() {
+ return excludeTransitive;
+ }
+
+ public Collection<Artifact> getMatchingArtifacts(final MavenProject project) {
+ // get artifacts depending on whether we exclude transitives or not
+ final Set<Artifact> artifacts;
+ // TODO: when I ran the tests the artifacts where only available in the Dependency Artifacts and
+ // getArtifacts() returned an empty set
+ if (excludeTransitive) {
+ // only direct dependencies, transitives excluded
+ artifacts = project.getDependencyArtifacts();
+ } else {
+ // all dependencies, transitives included
+ artifacts = project.getArtifacts();
+ }
+ return getMatchingArtifacts(artifacts);
+ }
+
+ public Collection<Artifact> getMatchingArtifacts(final Collection<Artifact> artifacts) {
+ final List<Artifact> matches = new ArrayList<Artifact>();
+ for (Artifact artifact : artifacts) {
+ if(groupId.equals(artifact.getGroupId())
+ && artifactId.equals(artifact.getArtifactId())
+ && type.equals(artifact.getType())
+ && (classifier.equals(artifact.getClassifier()) || (classifier.equals("") && artifact.getClassifier() == null))
+ ) {
+ matches.add(artifact);
+ }
+ }
+ return matches;
+ }
+
+ @Nonnull
+ public StringBuilder toString(@Nullable StringBuilder builder) {
+ if (builder == null) {
+ builder = new StringBuilder();
+ }
+ builder.append("groupId=").append(groupId).append(",");
+ builder.append("artifactId=").append(artifactId).append(",");
+
+ if (type != null) {
+ builder.append("type=").append(type).append(",");
+ }
+ if (classifier != null) {
+ builder.append("classifier=").append(classifier).append(",");
+ }
+ builder.append(",excludeTransitive=").append(excludeTransitive);
+ return builder;
+ }
+
+ public String toString() {
+ return toString(null).toString();
+ }
+}
diff --git a/sling-cpconverter-maven-plugin/src/main/java/org/apache/sling/cpconverter/maven/mojos/ConvertCPMojo.java b/sling-cpconverter-maven-plugin/src/main/java/org/apache/sling/cpconverter/maven/mojos/ConvertCPMojo.java
new file mode 100644
index 0000000..ad3dc60
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/main/java/org/apache/sling/cpconverter/maven/mojos/ConvertCPMojo.java
@@ -0,0 +1,282 @@
+/*
+ * 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 org.apache.sling.cpconverter.maven.mojos;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.transfer.artifact.install.ArtifactInstaller;
+import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerException;
+import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter;
+import org.apache.sling.feature.cpconverter.acl.DefaultAclManager;
+import org.apache.sling.feature.cpconverter.artifacts.DefaultArtifactsDeployer;
+import org.apache.sling.feature.cpconverter.features.DefaultFeaturesManager;
+import org.apache.sling.feature.cpconverter.handlers.DefaultEntryHandlersManager;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter.PACKAGE_CLASSIFIER;
+import static org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter.ZIP_TYPE;
+
+@Mojo(
+ name = "convert-cp",
+ requiresProject = true,
+ threadSafe = true
+)
+public final class ConvertCPMojo extends AbstractMojo {
+ public static final String CFG_STRICT_VALIDATION = "strictValidation";
+
+ public static final String CFG_MERGE_CONFIGURATIONS = "mergeConfigurations";
+
+ public static final String CFG_BUNDLE_START_ORDER = "bundleStartOrder";
+
+ public static final String CFG_ARTIFACT_ID_OVERRIDE = "artifactIdOverride";
+
+ public static final String CFG_INSTALL_CONVERTED_PACKAGE = "installConvertedContentPackage";
+
+ public static final String CFG_FM_OUTPUT_DIRECTORY = "featureModelsOutputDirectory";
+
+ public static final String CFG_CONVERTED_CP_OUTPUT_DIRECTORY = "convertedContentPackageOutputDirectory";
+
+ public static final String CFG_SYSTEM_PROPERTIES = "cpSystemProperties";
+
+ public static final String CFG_CONTENT_PACKAGES = "packages";
+
+ public static final boolean DEFAULT_STRING_VALIDATION = false;
+
+ public static final boolean DEFAULT_MERGE_CONFIGURATIONS = false;
+
+ public static final int DEFAULT_BUNDLE_START_ORDER = 20;
+
+ public static final boolean DEFAULT_INSTALL_CONVERTED_PACKAGE = true;
+
+ public static final String DEFAULT_CONVERTED_CP_OUTPUT_DIRECTORY = "${project.build.directory}/cp-conversion";
+
+ public static final String DEFAULT_FM_OUTPUT_DIRECTORY = DEFAULT_CONVERTED_CP_OUTPUT_DIRECTORY + "/fm.out";
+
+ /**
+ * If set to {@code true} the Content Package is strictly validated.
+ */
+ @Parameter(property = CFG_STRICT_VALIDATION, defaultValue = DEFAULT_STRING_VALIDATION + "")
+ private boolean strictValidation;
+
+ //AS TODO: Is that applicable to a single CP ?
+ /**
+ * If set to {@code true} the OSGi Configurations with same PID are merged.
+ */
+ @Parameter(property = CFG_MERGE_CONFIGURATIONS, defaultValue = DEFAULT_MERGE_CONFIGURATIONS + "")
+ private boolean mergeConfigurations;
+
+ /**
+ * If set to {@code true} the Content Package is strictly validated.
+ */
+ @Parameter(property = CFG_BUNDLE_START_ORDER, defaultValue = DEFAULT_BUNDLE_START_ORDER + "")
+ private int bundleStartOrder;
+
+ /**
+ * If set to {@code true} the Content Package is strictly validated.
+ */
+ @Parameter(property = CFG_ARTIFACT_ID_OVERRIDE)
+ private String artifactIdOverride;
+
+ /**
+ * Target directory for the converted Content Package Feature Model file
+ */
+ @Parameter(property = CFG_FM_OUTPUT_DIRECTORY, defaultValue = DEFAULT_FM_OUTPUT_DIRECTORY)
+ private File fmOutput;
+
+ /**
+ * Target directory for the Converted Content Package file
+ */
+ @Parameter(property = CFG_CONVERTED_CP_OUTPUT_DIRECTORY, defaultValue = DEFAULT_CONVERTED_CP_OUTPUT_DIRECTORY)
+ private File convertedCPOutput;
+
+ /**
+ * If set to {@code true} the converted Content Package will be installed in the local Maven Repository
+ */
+ @Parameter(property = CFG_INSTALL_CONVERTED_PACKAGE, defaultValue = DEFAULT_INSTALL_CONVERTED_PACKAGE + "")
+ private boolean installConvertedCP;
+
+ /**
+ * System Properties to hand over to the Content Package Converter
+ */
+ @Parameter(property = CFG_SYSTEM_PROPERTIES)
+ private List<String> systemProperties;
+
+ /**
+ * List of Content Packages to be converted
+ */
+ @Parameter(property = CFG_CONTENT_PACKAGES)
+ private List<ContentPackage> contentPackages;
+ /**
+ * The Maven project.
+ */
+ @Parameter( defaultValue = "${project}", readonly = true )
+ private MavenProject project;
+
+ @Parameter(property = "session", readonly = true, required = true)
+ protected MavenSession mavenSession;
+
+ @Component
+ protected MavenProjectHelper projectHelper;
+
+ @Component
+ private ArtifactInstaller installer;
+
+ @Component
+ private ArtifactHandlerManager artifactHandlerManager;
+
+ @Override
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ // Parse the System Properties if provided
+ Map<String,String> properties = new HashMap<>();
+ if(systemProperties != null) {
+ for(String systemProperty: systemProperties) {
+ if(systemProperty != null) {
+ int index = systemProperty.indexOf("=");
+ if(index > 0 && index < systemProperty.length() - 1) {
+ String key = systemProperty.substring(0, index);
+ String value = systemProperty.substring(index + 1);
+ properties.put(key, value);
+ }
+ }
+ }
+ }
+ try {
+ ContentPackage2FeatureModelConverter converter = new ContentPackage2FeatureModelConverter(strictValidation)
+ .setFeaturesManager(
+ new DefaultFeaturesManager(
+ mergeConfigurations,
+ bundleStartOrder,
+ fmOutput,
+ artifactIdOverride,
+ properties
+ )
+ )
+ .setBundlesDeployer(
+ new DefaultArtifactsDeployer(
+ convertedCPOutput
+ )
+ )
+ .setEntryHandlersManager(
+ new DefaultEntryHandlersManager()
+ )
+ .setAclManager(
+ new DefaultAclManager()
+ );
+
+ if(contentPackages == null || contentPackages.isEmpty()) {
+ getLog().info("Project Artifact File: " + project.getArtifact());
+ String targetPath = project.getModel().getBuild().getDirectory() + "/"
+ + project.getModel().getBuild().getFinalName()
+ + "." + ZIP_TYPE;
+ File targetFile = new File(targetPath);
+ if (targetFile.exists() && targetFile.isFile() && targetFile.canRead()) {
+ converter.convert(project.getArtifact().getFile());
+ Artifact convertedPackage = new DefaultArtifact(
+ project.getGroupId(), project.getArtifactId(), project.getVersion(),
+ "compile", ZIP_TYPE, PACKAGE_CLASSIFIER, artifactHandlerManager.getArtifactHandler(ZIP_TYPE)
+ );
+ installConvertedCP(convertedPackage);
+ } else {
+ getLog().error("Artifact is not found: " + targetPath);
+ }
+ } else {
+ for(ContentPackage contentPackage: contentPackages) {
+ getLog().info("Content Package Artifact File: " + contentPackage.toString());
+ contentPackage.setExcludeTransitive(true);
+ final Collection<Artifact> artifacts = contentPackage.getMatchingArtifacts(project);
+ if (artifacts.isEmpty()) {
+ getLog().warn("No matching artifacts for " + contentPackage);
+ continue;
+ }
+ getLog().info("Target Convert CP of --- " + contentPackage + " ---");
+ for (final Artifact artifact : artifacts) {
+ final File source = artifact.getFile();
+ if (source.exists() && source.isFile() && source.canRead()) {
+ converter.convert(source);
+ Artifact convertedPackage = new DefaultArtifact(
+ artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
+ "compile", ZIP_TYPE, PACKAGE_CLASSIFIER, artifactHandlerManager.getArtifactHandler(ZIP_TYPE)
+ );
+ installConvertedCP(convertedPackage);
+ } else {
+ getLog().error("Artifact is not found: " + artifact);
+ }
+ }
+ }
+ }
+ } catch (Throwable t) {
+ throw new MojoExecutionException("Content Package Converter Exception", t);
+ }
+
+ }
+
+ private void installConvertedCP(Artifact artifact) throws MojoFailureException, MojoExecutionException {
+ if(installConvertedCP) {
+ Collection<Artifact> artifacts = Collections.synchronizedCollection(new ArrayList<>());
+ // Rebuild the converted package path
+ String convertedPackagePath = artifact.getGroupId().replaceAll("\\.", "/")
+ + "/" + artifact.getArtifactId()
+ + "/" + artifact.getVersion()
+ + "/" + artifact.getArtifactId()
+ + "-" + artifact.getVersion()
+ + "-" + PACKAGE_CLASSIFIER
+ + "." + ZIP_TYPE;
+ File convertedPackageFile = new File(convertedCPOutput, convertedPackagePath);
+ if(convertedPackageFile.exists() && convertedPackageFile.canRead()) {
+ artifact.setFile(convertedPackageFile);
+ artifacts.add(artifact);
+ installArtifact(mavenSession.getProjectBuildingRequest(), artifacts);
+ } else {
+ getLog().error("Could not find Converted Package: " + convertedPackageFile);
+ }
+ }
+ }
+
+ private void installArtifact(ProjectBuildingRequest pbr, Collection<Artifact> artifacts )
+ throws MojoFailureException, MojoExecutionException
+ {
+ try
+ {
+ installer.install(pbr, artifacts);
+ }
+ catch ( ArtifactInstallerException e )
+ {
+ throw new MojoExecutionException( "ArtifactInstallerException", e );
+ }
+ }
+
+}
diff --git a/sling-cpconverter-maven-plugin/src/site/markdown/index.md b/sling-cpconverter-maven-plugin/src/site/markdown/index.md
new file mode 100644
index 0000000..24e3c5e
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/site/markdown/index.md
@@ -0,0 +1,6 @@
+Content Package to Feature Model Maven Plugin
+=============================================
+
+Maven Plugin to Convert Content Packages to Feature Models
+
+See [Goals](plugin-info.html) for a list of supported goals.
diff --git a/sling-cpconverter-maven-plugin/src/site/site.xml b/sling-cpconverter-maven-plugin/src/site/site.xml
new file mode 100644
index 0000000..9abab11
--- /dev/null
+++ b/sling-cpconverter-maven-plugin/src/site/site.xml
@@ -0,0 +1,35 @@
+<?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>
+ <skin>
+ <groupId>org.apache.maven.skins</groupId>
+ <artifactId>maven-fluido-skin</artifactId>
+ <version>1.6</version>
+ </skin>
+ <body>
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ <item name="Goals" href="plugin-info.html"/>
+ </menu>
+ <menu ref="reports"/>
+ </body>
+</project>