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

#
# Comma separated list of features repositories to register by default
#
featuresRepositories = \
    mvn:org.apache.sling/org.apache.sling.karaf-features/${project.version}/xml/features, \
    mvn:org.apache.karaf.features/framework/${org.apache.karaf.version}/xml/features, \
    mvn:org.apache.karaf.features/standard/${org.apache.karaf.version}/xml/features

#
# Comma separated list of features to install at startup
#
featuresBoot = \
    instance, \
    package, \
    log, \
    ssh, \
    framework, \
    system, \
    feature, \
    shell, \
    management, \
    service, \
    jaas, \
    deployer, \
    diagnostic, \
    bundle, \
    config, \
    eventadmin, \
    http, \
    http-whiteboard, \
    webconsole, \
    scr

#
# Resource repositories (OBR) that the features resolver can use
# to resolve requirements/capabilities
#
# The format of the resourceRepositories is
# resourceRepositories=[xml:url|json:url],...
# for Instance:
#
#resourceRepositories=xml:http://host/path/to/index.xml
# or
#resourceRepositories=json:http://host/path/to/index.json
#

#
# Defines if the boot features are started in asynchronous mode (in a dedicated thread)
#
featuresBootAsynchronous=false

#
# Service requirements enforcement
#
# By default, the feature resolver checks the service requirements/capabilities of
# bundles for new features (xml schema >= 1.3.0) in order to automatically installs
# the required bundles.
# The following flag can have those values:
#   - disable: service requirements are completely ignored
#   - default: service requirements are ignored for old features
#   - enforce: service requirements are always verified
#
serviceRequirements=disable

#
# Store cfg file for config element in feature
#
#configCfgStore=true
