/*
 * 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.
 */
pluginManagement {
    plugins {
        id "com.google.protobuf" version "${protobufPluginVersion}"
    }
}

rootProject.name = 'bookkeeper'

include('circe-checksum', 'circe-checksum:src:main:circe',
        'cpu-affinity', 'cpu-affinity:src:main:affinity', 'bookkeeper-common',
        'bookkeeper-http:http-server', 'bookkeeper-server',
        'bookkeeper-common-allocator', 'bookkeeper-proto', 'bookkeeper-stats',
        'bookkeeper-stats-providers:prometheus-metrics-provider',
        'tools:framework')
