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

ext {
    jacksonVersion = '2.10.1'
}

dependencies {
    implementation rootProject
    compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:$jacksonVersion"
    compile "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
    testRuntime "com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion"
    implementation project(':groovy-json')
    testImplementation project(':groovy-test')
    testRuntime project(':groovy-ant') // for JavadocAssertionTests
}

eclipse.classpath.file.whenMerged {
    entries.removeAll { entry -> entry.path in ['/groovy-ant', '/groovy-groovydoc'] }
}
