#
#  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.
#
# The :boot feature contains all things to bootstrap the installation.
#
[feature name=:boot]

# additional entries for sling.properties
# ---------------------------------------
# oak_tar and oak_mongo run modes are mutually exclusive,
# and cannot be changed after the first startup
[settings]
    sling.run.mode.install.options=oak_tar,oak_mongo

[artifacts]
    org.slf4j/slf4j-api/1.7.6
    org.apache.sling/org.apache.sling.commons.log/4.0.6
    org.apache.sling/org.apache.sling.commons.logservice/1.0.6
    org.slf4j/jcl-over-slf4j/1.7.6
    org.slf4j/log4j-over-slf4j/1.7.6
    org.apache.sling/org.apache.sling.settings/1.3.8
    org.apache.sling/org.apache.sling.fragment.xml/1.0.2
    org.apache.sling/org.apache.sling.fragment.transaction/1.0.0
    org.apache.sling/org.apache.sling.javax.activation/0.1.0
    org.apache.sling/org.apache.sling.fragment.ws/1.0.2
    org.apache.sling/org.apache.sling.launchpad.installer/1.2.2
    org.apache.sling/org.apache.sling.installer.core/3.6.8
    org.apache.sling/org.apache.sling.installer.provider.file/1.1.0
    org.apache.sling/org.apache.sling.installer.factory.configuration/1.1.2
    org.apache.felix/org.apache.felix.configadmin/1.8.8
    org.apache.felix/org.apache.felix.eventadmin/1.4.4