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

[feature name=oak]

[variables]
    oak.version=1.16.0

[artifacts startLevel=15]
    org.apache.jackrabbit/oak-api/${oak.version}
    org.apache.jackrabbit/oak-blob/${oak.version}
    org.apache.jackrabbit/oak-blob-plugins/${oak.version}
    org.apache.jackrabbit/oak-commons/${oak.version}
    org.apache.jackrabbit/oak-core/${oak.version}
    org.apache.jackrabbit/oak-core-spi/${oak.version}
    org.apache.jackrabbit/oak-lucene/${oak.version}
    org.apache.jackrabbit/oak-jcr/${oak.version}
    org.apache.jackrabbit/oak-query-spi/${oak.version}
    org.apache.jackrabbit/oak-security-spi/${oak.version}
    org.apache.jackrabbit/oak-store-composite/${oak.version}
    # OAK-7263 - oak-store-document should be in oak_mongo runmode
    org.apache.jackrabbit/oak-store-document/${oak.version}
    org.apache.jackrabbit/oak-store-spi/${oak.version}

[artifacts startLevel=15 runModes=oak_tar]
    org.apache.jackrabbit/oak-segment-tar/${oak.version}

[artifacts startLevel=15 runModes=oak_mongo]
    org.mongodb/mongo-java-driver/3.8.2
    com.h2database/h2-mvstore/1.4.194

# start the Oak server instance after all components have been configured
# and started to avoid restarting that component ( see SLING-4556 )
[artifacts startLevel=16]
    org.apache.sling/org.apache.sling.jcr.oak.server/1.2.2
