/*
 * 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 {
  scalaVersion = "2.11"
  scalaLibVersion = "2.11.8"
  // Extra options for the compiler:
  // -feature: Give detailed warnings about language feature use (rather than just 'there were 4 warnings')
  // -language:implicitConversions: Allow the use of implicit conversions without warning or library import
  // -language:reflectiveCalls: Allow the automatic use of reflection to access fields without warning or library import
  scalaOptions = "-feature -language:implicitConversions -language:reflectiveCalls"
  scalatraVersion = "2.5.0"
  jettyVersion = "9.2.7.v20150116"
}
