/*
 * 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.
 */

include ":examples:java"
include ":model:fn-execution"
include ":model:job-management"
include ":model:pipeline"
include ":runners:apex"
include ":runners:core-construction-java"
include ":runners:core-java"
include ":runners:direct-java"
include ":runners:flink"
include ":runners:gcp:gcemd"
include ":runners:gcp:gcsproxy"
include ":runners:gearpump"
include ":runners:google-cloud-dataflow-java"
include ":runners:java-fn-execution"
include ":runners:local-artifact-service-java"
include ":runners:local-java"
include ":runners:reference:java"
include ":runners:reference:job-server"
include ":runners:spark"
include ":sdks:go"
include ":sdks:java:build-tools"
include ":sdks:java:container"
include ":sdks:java:core"
include ":sdks:java:extensions:google-cloud-platform-core"
include ":sdks:java:extensions:jackson"
include ":sdks:java:extensions:join-library"
include ":sdks:java:extensions:protobuf"
include ":sdks:java:extensions:sorter"
include ":sdks:java:extensions:sql"
include ":sdks:java:fn-execution"
include ":sdks:java:harness"
include ":sdks:java:io:amqp"
include ":sdks:java:io:cassandra"
include ":sdks:java:io:common"
include ":sdks:java:io:elasticsearch"
include ":sdks:java:io:elasticsearch-tests:elasticsearch-tests-2"
include ":sdks:java:io:elasticsearch-tests:elasticsearch-tests-5"
include ":sdks:java:io:elasticsearch-tests:elasticsearch-tests-common"
include ":sdks:java:io:file-based-io-tests"
include ":sdks:java:io:google-cloud-platform"
include ":sdks:java:io:hadoop-common"
include ":sdks:java:io:hadoop-file-system"
include ":sdks:java:io:hadoop-input-format"
include ":sdks:java:io:hbase"
include ":sdks:java:io:hcatalog"
include ":sdks:java:io:jdbc"
include ":sdks:java:io:jms"
include ":sdks:java:io:kafka"
include ":sdks:java:io:kinesis"
include ":sdks:java:io:mongodb"
include ":sdks:java:io:mqtt"
include ":sdks:java:io:redis"
include ":sdks:java:io:solr"
include ":sdks:java:io:tika"
include ":sdks:java:io:xml"
include ":sdks:java:java8tests"
include ":sdks:java:maven-archetypes:examples"
include ":sdks:java:maven-archetypes:starter"
include ":sdks:java:nexmark"
include ":sdks:python"
include ":sdks:python:container"
