<?xml version="1.0"?>
<!--
  ~ 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.
  -->

<bundles>
  <startLevel level="0">
    <!-- felix httpservice whiteboard -->
    <bundle>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.http.whiteboard</artifactId>
      <version>2.2.0</version>
    </bundle>
    <bundle>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.4</version>
    </bundle>
    <bundle>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.2.2</version>
    </bundle>

    <bundle>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.jaas</artifactId>
      <version>${jaas.example.version}</version>
    </bundle>
    <bundle>
      <groupId>org.apache.felix.example</groupId>
      <artifactId>org.apache.felix.example.jaas.app</artifactId>
      <version>${jaas.example.version}</version>
    </bundle>
    <bundle>
      <groupId>org.apache.felix.example</groupId>
      <artifactId>org.apache.felix.example.jaas.lm-config</artifactId>
      <version>${jaas.example.version}</version>
    </bundle>
    <bundle>
      <groupId>org.apache.felix.example</groupId>
      <artifactId>org.apache.felix.example.jaas.lm-jdbc</artifactId>
      <version>${jaas.example.version}</version>
    </bundle>
    <bundle>
      <groupId>org.apache.felix.example</groupId>
      <artifactId>org.apache.felix.example.jaas.jdbc-h2</artifactId>
      <version>${jaas.example.version}</version>
    </bundle>

    <!-- Bundles lrequired for Sling Installer Support -->
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.settings</artifactId>
      <version>1.2.2</version>
    </bundle>
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.launchpad.installer</artifactId>
      <version>1.2.0</version>
    </bundle>
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.installer.api</artifactId>
      <version>1.0.0</version>
    </bundle>
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.installer.core</artifactId>
      <version>3.4.6</version>
    </bundle>
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.installer.console</artifactId>
      <version>1.0.0</version>
    </bundle>
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.installer.factory.configuration</artifactId>
      <version>1.0.10</version>
    </bundle>
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.installer.provider.file</artifactId>
      <version>1.0.2</version>
    </bundle>
  </startLevel>
  <startLevel level="1">
    <bundle>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.4</version>
    </bundle>
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.commons.log</artifactId>
      <version>3.0.0</version>
    </bundle>
    <bundle>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.commons.logservice</artifactId>
      <version>1.0.2</version>
    </bundle>
    <bundle>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>1.6.4</version>
    </bundle>
    <bundle>
      <groupId>org.slf4j</groupId>
      <artifactId>log4j-over-slf4j</artifactId>
      <version>1.6.4</version>
    </bundle>
  </startLevel>

  <startLevel level="5">
    <bundle>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.webconsole</artifactId>
      <version>4.2.0</version>
    </bundle>
    <bundle>
      <groupId>org.apache.geronimo.bundles</groupId>
      <artifactId>json</artifactId>
      <version>20090211_1</version>
    </bundle>
    <bundle>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.webconsole.plugins.ds</artifactId>
      <version>1.0.0</version>
    </bundle>
  </startLevel>

  <startLevel level="10">
    <bundle>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.scr</artifactId>
      <version>1.6.0</version>
    </bundle>
    <bundle>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.configadmin</artifactId>
      <version>1.6.0</version>
    </bundle>
    <bundle>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.metatype</artifactId>
      <version>1.0.6</version>
    </bundle>

  </startLevel>
</bundles>
