<?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>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>18</version>
    </parent>

    <groupId>org.apache.sling</groupId>
    <artifactId>sling-samples-builder</artifactId>
    <packaging>pom</packaging>
    <version>2-SNAPSHOT</version>

    <name>Apache Sling Samples (Builder)</name>
    <description>
        Pseudo project to build all sample modules.
    </description>

    <inceptionYear>2007</inceptionYear>

    <prerequisites>
        <maven>3.3.9</maven>
    </prerequisites>


    <issueManagement>
        <system>Jira</system>
        <url>http://issues.apache.org/jira/browse/SLING</url>
    </issueManagement>


    <scm>
        <connection>
            scm:svn:http://svn.apache.org/repos/asf/sling/trunk/samples
        </connection>
        <developerConnection>
            scm:svn:https://svn.apache.org/repos/asf/sling/trunk/samples
        </developerConnection>
        <url>http://svn.apache.org/viewvc/sling/trunk/samples</url>
    </scm>


    <!-- List modules to be included in the build here ! -->
    <modules>
          <module>accessmanager-ui</module>
          <module>custom-login-form</module>
          <module>espblog</module>
          <module>fling</module>
          <module>htlblog</module>
          <module>javashell</module>
          <module>mail-archive</module>
          <module>path-based-rtp</module>
          <module>post-servlet-extensions</module>
          <module>slingbucks</module>
          <module>slingshot</module>
          <module>testing/bundle-with-it</module>
          <module>testing/module-with-it</module>
          <module>usermanager-ui</module>
          <module>webloader/service</module>
          <module>webloader/ui</module>
  </modules>
</project>
