Build with JDK 6, 7, 8, 8-ea and 9-ea in Travis

* Exact versions of JDK 6, 7, 8 are controlled by Travis.

* Exact versions of JDK 8-ea and 9-ea are controlled in settings by
  environment variables JDK8_EA_URL and JDK9_EA_URL respectively.
diff --git a/.travis.sh b/.travis.sh
new file mode 100755
index 0000000..ee12fe4
--- /dev/null
+++ b/.travis.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+set -euo pipefail
+
+# Prevent accidental execution outside of Travis:
+if [ -z "${TRAVIS+false}" ]
+then
+  echo "TRAVIS environment variable is not set"
+  exit 1
+fi
+
+# Switch to desired JDK, download if required:
+function install_jdk {
+  JDK_URL=$1
+
+  FILENAME="${JDK_URL##*/}"
+
+  rm -rf /tmp/jdk/$JDK
+  mkdir -p /tmp/jdk/$JDK
+
+  if [ ! -f "/tmp/jdk/$FILENAME" ]
+  then
+    curl -L $JDK_URL -o /tmp/jdk/$FILENAME
+  fi
+
+  tar -xzf /tmp/jdk/$FILENAME -C /tmp/jdk/$JDK --strip-components 1
+
+  export JAVA_HOME="/tmp/jdk/$JDK"
+  export JDK_HOME="${JAVA_HOME}"
+  export JAVAC="${JAVA_HOME}/bin/javac"
+  export PATH="${JAVA_HOME}/bin:${PATH}"
+}
+
+source $HOME/.jdk_switcher_rc
+case "$JDK" in
+6)
+  jdk_switcher use openjdk6
+  ;;
+7|8)
+  jdk_switcher use oraclejdk${JDK}
+  ;;
+8-ea)
+  install_jdk $JDK8_EA_URL
+  ;;
+9-ea)
+  install_jdk $JDK9_EA_URL
+  ;;
+esac
+
+# Build:
+# TODO(Godin): see https://github.com/jacoco/jacoco/issues/300 about "bytecode.version"
+case "$JDK" in
+6)
+  mvn -V -B -e verify -Dbytecode.version=1.6
+  ;;
+7)
+  mvn -V -B -e verify -Dbytecode.version=1.7
+  ;;
+8 | 8-ea)
+  mvn -V -B -e verify -Dbytecode.version=1.8
+  ;;
+9-ea)
+  # "-XMaxPermSize" not supported by JDK 9, so remove it from MAVEN_OPTS set by Travis (https://github.com/travis-ci/travis-ci/issues/3893)
+  echo "export MAVEN_OPTS='-Dmaven.repo.local=$HOME/.m2/repository'" > ~/.mavenrc
+  # see https://bugs.openjdk.java.net/browse/JDK-8131041 about "java.locale.providers"
+  # TODO(Godin): maven-javadoc-plugin doesn't work well due to modularization of JDK 9 - skip it and hence distribution
+  mvn -V -B -e verify -Dbytecode.version=1.9 \
+    -Dmaven.javadoc.skip -pl !jacoco \
+    -DargLine=-Djava.locale.providers=JRE,SPI
+  ;;
+esac
diff --git a/.travis.yml b/.travis.yml
index a311c29..e1fcb34 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,8 +3,6 @@
 # Skip "install" stage:
 install: true
 
-script: mvn -V -B clean verify
-
 # Use container-based infrastructure:
 sudo: false
 
@@ -12,3 +10,17 @@
 cache:
   directories:
     - '$HOME/.m2/repository'
+
+env:
+  - JDK=6
+  - JDK=7
+  - JDK=8
+  - JDK=8-ea
+  - JDK=9-ea
+
+matrix:
+  allow_failures:
+    - env: JDK=8-ea
+    - env: JDK=9-ea
+
+script: ./.travis.sh