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


description = 'The S4 core platform.'

dependencies {
    compile project(":s4-base")
    compile project(":s4-comm")
    compile libraries.commons_codec
    compile libraries.jcommander
    compile libraries.asm
    compile libraries.netty
    compile libraries.zkclient
    testCompile project(path: ':s4-comm', configuration: 'tests')
    testCompile libraries.gradle_base_services
    testCompile libraries.gradle_core
    testCompile libraries.gradle_tooling_api
    testCompile libraries.gradle_wrapper
    testCompile libraries.mockito_core
}

task testJar(type: Jar) {
    baseName = "test-${project.archivesBaseName}"
    from sourceSets.test.output
}

configurations {
    tests
}

artifacts {
    tests testJar
}

test {
    forkEvery=1;
}
