#
#  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
    repository.home=${sling.home}/repository
    localIndexDir=${sling.home}/repository/index
    
[settings runModes=:b]
    special=true    
    
[settings runModes=a]
    something=else    

[variables]
    slf4j.version=1.7.25

[artifacts]
    org.slf4j/slf4j-api/${slf4j.version}
    org.apache.sling/org.apache.sling.commons.log/5.1.0
    org.apache.sling/org.apache.sling.commons.logservice/1.0.6
    org.slf4j/jcl-over-slf4j/${slf4j.version}
    org.slf4j/log4j-over-slf4j/${slf4j.version}
    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.8.12
    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.16
    org.apache.felix/org.apache.felix.eventadmin/1.4.10
    org.apache.aries/org.apache.aries.util/1.1.3
    # dependency with javax.inject - required for Sling Models (SLING-4710)
    org.apache.geronimo.specs/geronimo-atinject_1.0_spec/1.0
