Bug 546940 - Update JavaVersionChecker

With Virgo 3.8.x we target the LTS versions 8 and 11

Change-Id: Ife43b670d107e7e051d6f52e60a3892137425e6a
diff --git a/util/org.eclipse.virgo.util.env/src/main/java/org/eclipse/virgo/util/env/JavaVersionChecker.java b/util/org.eclipse.virgo.util.env/src/main/java/org/eclipse/virgo/util/env/JavaVersionChecker.java
index 15d9ecc..418785f 100644
--- a/util/org.eclipse.virgo.util.env/src/main/java/org/eclipse/virgo/util/env/JavaVersionChecker.java
+++ b/util/org.eclipse.virgo.util.env/src/main/java/org/eclipse/virgo/util/env/JavaVersionChecker.java
@@ -37,10 +37,14 @@
             System.exit(-1);
         } 
 
-        if (!javaVersion.startsWith("1.6.") && !javaVersion.startsWith("1.7.") && !javaVersion.startsWith("1.8.")) {
-            System.out.println("JavaVersionChecker: Java version must be at 1.6+ (detected version "+javaVersion+").");
+        if (!isJavaEightOrLater(javaVersion)) {
+            System.out.println("JavaVersionChecker: Java version must be at 1.8+ (detected version "+javaVersion+").");
             System.exit(-1);
         }
         System.exit(0);
     }
+
+    static boolean isJavaEightOrLater(String javaVersion) {
+        return !javaVersion.startsWith("1.") || javaVersion.startsWith("1.8");
+    }
 }
diff --git a/util/org.eclipse.virgo.util.env/src/test/java/org/eclipse/virgo/util/env/JavaVersionCheckerTest.java b/util/org.eclipse.virgo.util.env/src/test/java/org/eclipse/virgo/util/env/JavaVersionCheckerTest.java
new file mode 100644
index 0000000..b183328
--- /dev/null
+++ b/util/org.eclipse.virgo.util.env/src/test/java/org/eclipse/virgo/util/env/JavaVersionCheckerTest.java
@@ -0,0 +1,43 @@
+package org.eclipse.virgo.util.env;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class JavaVersionCheckerTest {
+
+    @Test
+    public void checkOldJavaVersions() {
+        // https://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html
+        assertFalse(JavaVersionChecker.isJavaEightOrLater("1.3.0-b24"));
+        // https://docs.oracle.com/javase/1.5.0/docs/relnotes/version-5.0.html
+        assertFalse(JavaVersionChecker.isJavaEightOrLater("1.5.0-b64"));
+        // https://www.oracle.com/technetwork/java/javase/version-6-141920.html
+        assertFalse(JavaVersionChecker.isJavaEightOrLater("1.6.0"));
+        // https://www.oracle.com/technetwork/java/javase/jdk7-naming-418744.html
+        assertFalse(JavaVersionChecker.isJavaEightOrLater("1.7.0"));
+    }
+
+    @Test
+    public void checkJavaEight() {
+        // https://www.oracle.com/technetwork/java/javase/jdk8-naming-2157130.html
+        assertTrue(JavaVersionChecker.isJavaEightOrLater("1.8.0"));
+    }
+
+    @Test
+    public void checkJavaNine() {
+        // https://openjdk.java.net/jeps/223 - JDK 9
+        assertTrue(JavaVersionChecker.isJavaEightOrLater("9-ea"));
+        assertTrue(JavaVersionChecker.isJavaEightOrLater("9.0.1"));
+        assertTrue(JavaVersionChecker.isJavaEightOrLater("9.0.4"));
+    }
+
+    @Test
+    public void checkJavaElevenAndBeyond() {
+        // https://openjdk.java.net/jeps/322 - JDK 10+
+        assertTrue(JavaVersionChecker.isJavaEightOrLater("10.0.2"));
+        assertTrue(JavaVersionChecker.isJavaEightOrLater("11.0.3"));
+        assertTrue(JavaVersionChecker.isJavaEightOrLater("12.0.1"));
+        assertTrue(JavaVersionChecker.isJavaEightOrLater("18.1.4"));
+    }
+}