/*
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.
*/
 
// N.B. if you add a subproject to a new 'aggregator only' project
// adjust the 'aggregatorOnlyProjects' list in build.gradle

include 'api:function'
include 'api:execution'
include 'api:window'
include 'api:oplet'
include 'api:graph'
include 'api:topology'
include 'spi:graph'
include 'spi:topology'
include 'runtime:appservice'
include 'runtime:etiao'
include 'runtime:jmxcontrol'
include 'runtime:jsoncontrol'
include 'runtime:jobregistry'
include 'utils:metrics'
include 'utils:streamscope'
include 'providers:direct'
include 'connectors:command'
include 'connectors:common'
include 'connectors:csv'
include 'connectors:iot'
include 'connectors:serial'
include 'connectors:file'
include 'connectors:http'
include 'connectors:iotp'
include 'connectors:jdbc'
include 'connectors:kafka'
include 'connectors:mqtt'
include 'connectors:pubsub'
include 'connectors:edgent.javax.websocket'
include 'connectors:javax.websocket-client'
include 'connectors:javax.websocket-server'
include 'connectors:wsclient'
include 'connectors:wsclient-javax.websocket'
include 'console:server'
include 'console:servlets'
include 'apps:iot'
include 'apps:runtime'
include 'providers:development'
include 'providers:iot'
include 'analytics:math3'
include 'analytics:sensors'
include 'samples:utils'
include 'samples:apps'
include 'samples:topology'
include 'samples:connectors'
include 'samples:console'
include 'samples:scenarios'
include 'test:fvtiot'
include 'test:svt'
include 'platform:java7'
include 'platform:android'
include 'android:topology'
include 'android:hardware'

rootProject.name = build_name
