#
#  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

[variables]
    slf4j.version=1.7.25

[artifacts]
    org.osgi/org.osgi.util.function/1.1.0
    org.osgi/org.osgi.util.promise/1.1.1
    org.osgi/org.osgi.util.pushstream/1.0.1
    org.osgi/org.osgi.service.log/1.4.0
    org.apache.sling/org.apache.sling.javax.activation/0.1.0
    org.apache.geronimo.specs/geronimo-annotation_1.3_spec/1.1
    org.apache.servicemix.specs/org.apache.servicemix.specs.jaxws-api-2.2/2.9.0
    org.apache.servicemix.specs/org.apache.servicemix.specs.saaj-api-1.3/2.8.0
    org.apache.servicemix.bundles/org.apache.servicemix.bundles.saaj-impl/1.3.23_2
    org.jvnet.staxex/stax-ex/1.7.6
    org.apache.geronimo.specs/geronimo-ws-metadata_2.0_spec/1.1.3
    org.apache.servicemix.specs/org.apache.servicemix.specs.jaxb-api-2.2/2.9.0
    org.apache.servicemix.bundles/org.apache.servicemix.bundles.jaxb-impl/2.2.11_1
    org.slf4j/slf4j-api/${slf4j.version}
    org.apache.sling/org.apache.sling.commons.log/5.1.10
    org.apache.sling/org.apache.sling.commons.logservice/1.1.0
    org.slf4j/jcl-over-slf4j/${slf4j.version}
    org.slf4j/log4j-over-slf4j/${slf4j.version}
    org.apache.sling/org.apache.sling.settings/1.3.10
    org.apache.sling/org.apache.sling.launchpad.installer/1.2.2
    org.apache.sling/org.apache.sling.installer.core/3.9.0
    org.apache.sling/org.apache.sling.installer.provider.file/1.1.0
    org.apache.sling/org.apache.sling.installer.factory.configuration/1.2.4
    org.apache.felix/org.apache.felix.configadmin/1.9.16
    org.apache.felix/org.apache.felix.eventadmin/1.5.0
    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.1
    org.apache.commons/commons-lang3/3.9
    
