/*
 * 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.dropwizard_version = "1.3.0";
ext.jersey_version = "2.25.1"; // Keep in sync with dropwizard jersey dependency!

ext.libraries = [
        // Dropwizard:
        dropwizard: "io.dropwizard:dropwizard-core:$dropwizard_version",
        dropwizard_client: "io.dropwizard:dropwizard-client:$dropwizard_version",
        dropwizard_views: "io.dropwizard:dropwizard-views:$dropwizard_version",
        dropwizard_views_freemarker: "io.dropwizard:dropwizard-views-freemarker:$dropwizard_version",
        dropwizard_assets: "io.dropwizard:dropwizard-assets:$dropwizard_version",
        dropwizard_configurable_assets: "io.dropwizard-bundles:dropwizard-configurable-assets-bundle:1.0.5",
        dropwizard_bundles_redirect: "io.dropwizard-bundles:dropwizard-redirect-bundle:1.2.2",

        // App. specific:
        freemarker: "org.freemarker:freemarker:2.3.28",
        jersey_core: "org.glassfish.jersey.core:jersey-core:$jersey_version",

        // Commons:
        findBugs: "com.google.code.findbugs:annotations:3.0.0",
        commonLangs: "org.apache.commons:commons-lang3:3.7",
        guava: "com.google.guava:guava:24.1-jre",

        // Test:
        dropwizard_testing: "io.dropwizard:dropwizard-testing:$dropwizard_version",
        dropwizard_client: "io.dropwizard:dropwizard-client:$dropwizard_version",
        junit: "junit:junit:4.12",
        mockito: "org.mockito:mockito-core:2.16.0",
        hamcrest: "org.hamcrest:hamcrest-library:1.3",
        jersey_grrizle: "org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-grizzly2:$jersey_version",
        
        // Build:
        rat: "org.apache.rat:apache-rat-tasks:0.12"
]