#  Licensed 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.
language: java
jdk:
  - oraclejdk7
  - oraclejdk8
before_install:
  - rvm use 2.1.5 --install
  - nvm install 0.12.2
  - nvm use 0.12.2
install: /bin/bash ./dev-tools/travis/travis-install.sh `pwd`
script: /bin/bash ./dev-tools/travis/travis-script.sh `pwd`
