diff --git a/distribution/build.gradle b/distribution/build.gradle index 068c8da480f11..ff3a06b4dc577 100644 --- a/distribution/build.gradle +++ b/distribution/build.gradle @@ -231,6 +231,7 @@ configure(subprojects.findAll { ['archives', 'packages'].contains(it.name) }) { from { project(':server').jar } from { project(':server').configurations.runtime } from { project(':libs:plugin-classloader').jar } + from { project(':distribution:tools:java-version-checker').jar } from { project(':distribution:tools:launchers').jar } into('tools/plugin-cli') { from { project(':distribution:tools:plugin-cli').jar } diff --git a/distribution/src/bin/elasticsearch-env b/distribution/src/bin/elasticsearch-env index 9d58d88e7aaf1..cc16f710345e4 100644 --- a/distribution/src/bin/elasticsearch-env +++ b/distribution/src/bin/elasticsearch-env @@ -63,7 +63,7 @@ if [ ! -z "$JAVA_OPTS" ]; then fi # check the Java version -"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.JavaVersionChecker +"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.java_version_checker.JavaVersionChecker export HOSTNAME=$HOSTNAME diff --git a/distribution/src/bin/elasticsearch-env.bat b/distribution/src/bin/elasticsearch-env.bat index 8bd5f24864e44..b990767092092 100644 --- a/distribution/src/bin/elasticsearch-env.bat +++ b/distribution/src/bin/elasticsearch-env.bat @@ -42,7 +42,7 @@ if defined JAVA_OPTS ( ) rem check the Java version -%JAVA% -cp "%ES_CLASSPATH%" "org.elasticsearch.tools.launchers.JavaVersionChecker" || exit /b 1 +%JAVA% -cp "%ES_CLASSPATH%" "org.elasticsearch.tools.java_version_checker.JavaVersionChecker" || exit /b 1 set HOSTNAME=%COMPUTERNAME% diff --git a/distribution/tools/java-version-checker/build.gradle b/distribution/tools/java-version-checker/build.gradle new file mode 100644 index 0000000000000..ad9b56fec0502 --- /dev/null +++ b/distribution/tools/java-version-checker/build.gradle @@ -0,0 +1,14 @@ +import org.elasticsearch.gradle.precommit.PrecommitTasks + +apply plugin: 'elasticsearch.build' + +targetCompatibility = JavaVersion.VERSION_1_7 + +// java_version_checker do not depend on core so only JDK signatures should be checked +forbiddenApisMain.signaturesURLs = [PrecommitTasks.getResource('/forbidden/jdk-signatures.txt')] + +test.enabled = false +namingConventions.enabled = false +javadoc.enabled = false +loggerUsageCheck.enabled = false +jarHell.enabled = false diff --git a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JavaVersion.java b/distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/JavaVersion.java similarity index 87% rename from distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JavaVersion.java rename to distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/JavaVersion.java index 30ca7a4a2a7d0..a06579d84254a 100644 --- a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JavaVersion.java +++ b/distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/JavaVersion.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.tools.launchers; +package org.elasticsearch.tools.java_version_checker; import java.util.ArrayList; import java.util.List; @@ -25,8 +25,8 @@ public class JavaVersion { - static final List CURRENT = parse(System.getProperty("java.specification.version")); - static final List JAVA_8 = parse("1.8"); + public static final List CURRENT = parse(System.getProperty("java.specification.version")); + public static final List JAVA_8 = parse("1.8"); static List parse(final String value) { if (!value.matches("^0*[0-9]+(\\.[0-9]+)*$")) { @@ -41,7 +41,7 @@ static List parse(final String value) { return version; } - static int majorVersion(final List javaVersion) { + public static int majorVersion(final List javaVersion) { Objects.requireNonNull(javaVersion); if (javaVersion.get(0) > 1) { return javaVersion.get(0); diff --git a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JavaVersionChecker.java b/distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/JavaVersionChecker.java similarity index 74% rename from distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JavaVersionChecker.java rename to distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/JavaVersionChecker.java index ed632d060a577..b61c5856084ff 100644 --- a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JavaVersionChecker.java +++ b/distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/JavaVersionChecker.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.tools.launchers; +package org.elasticsearch.tools.java_version_checker; import java.util.Arrays; import java.util.Locale; @@ -45,10 +45,30 @@ public static void main(final String[] args) { Locale.ROOT, "the minimum required Java version is 8; your Java version from [%s] does not meet this requirement", System.getProperty("java.home")); - Launchers.errPrintln(message); - Launchers.exit(1); + errPrintln(message); + exit(1); } - Launchers.exit(0); + exit(0); + } + + /** + * Prints a string and terminates the line on standard error. + * + * @param message the message to print + */ + @SuppressForbidden(reason = "System#err") + static void errPrintln(final String message) { + System.err.println(message); + } + + /** + * Exit the VM with the specified status. + * + * @param status the status + */ + @SuppressForbidden(reason = "System#exit") + static void exit(final int status) { + System.exit(status); } } diff --git a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/SuppressForbidden.java b/distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/SuppressForbidden.java similarity index 92% rename from distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/SuppressForbidden.java rename to distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/SuppressForbidden.java index 9e44c1497b781..d1299cbff9511 100644 --- a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/SuppressForbidden.java +++ b/distribution/tools/java-version-checker/src/main/java/org/elasticsearch/tools/java_version_checker/SuppressForbidden.java @@ -17,17 +17,18 @@ * under the License. */ -package org.elasticsearch.tools.launchers; +package org.elasticsearch.tools.java_version_checker; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; + /** * Annotation to suppress forbidden-apis errors inside a whole class, a method, or a field. */ @Retention(RetentionPolicy.CLASS) @Target({ ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE }) -@interface SuppressForbidden { +public @interface SuppressForbidden { String reason(); } diff --git a/distribution/tools/launchers/build.gradle b/distribution/tools/launchers/build.gradle index ff0f4c473a49e..a774691b2eb17 100644 --- a/distribution/tools/launchers/build.gradle +++ b/distribution/tools/launchers/build.gradle @@ -22,10 +22,8 @@ import org.gradle.api.JavaVersion apply plugin: 'elasticsearch.build' -sourceCompatibility = JavaVersion.VERSION_1_7 -targetCompatibility = JavaVersion.VERSION_1_7 - dependencies { + compile parent.project('java-version-checker') testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}" testCompile "junit:junit:${versions.junit}" testCompile "org.hamcrest:hamcrest-all:${versions.hamcrest}" @@ -33,13 +31,10 @@ dependencies { archivesBaseName = 'elasticsearch-launchers' -// launchers do not depend on core so only JDK signatures should be checked -forbiddenApisMain { - signaturesURLs = [PrecommitTasks.getResource('/forbidden/jdk-signatures.txt')] -} -forbiddenApisTest { - signaturesURLs = [PrecommitTasks.getResource('/forbidden/jdk-signatures.txt')] -} +// java_version_checker do not depend on core so only JDK signatures should be checked +List jdkSignatures = [PrecommitTasks.getResource('/forbidden/jdk-signatures.txt')] +forbiddenApisMain.signaturesURLs = jdkSignatures +forbiddenApisTest.signaturesURLs = jdkSignatures namingConventions { testClass = 'org.elasticsearch.tools.launchers.LaunchersTestCase' @@ -48,4 +43,4 @@ namingConventions { javadoc.enabled = false loggerUsageCheck.enabled = false -jarHell.enabled=false +jarHell.enabled = false diff --git a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JvmOptionsParser.java b/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JvmOptionsParser.java index 8cd401e53229d..7f612132d8c59 100644 --- a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JvmOptionsParser.java +++ b/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/JvmOptionsParser.java @@ -38,6 +38,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.elasticsearch.tools.java_version_checker.JavaVersion; + /** * Parses JVM options from a file and prints a single line with all JVM options to standard output. */ diff --git a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/Launchers.java b/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/Launchers.java index 349227c2b6d1b..6c9a1ef9473c3 100644 --- a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/Launchers.java +++ b/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/Launchers.java @@ -19,6 +19,8 @@ package org.elasticsearch.tools.launchers; +import org.elasticsearch.tools.java_version_checker.SuppressForbidden; + /** * Utility methods for launchers. */ diff --git a/settings.gradle b/settings.gradle index 0d9be7c2494bb..592d7cc892bda 100644 --- a/settings.gradle +++ b/settings.gradle @@ -28,6 +28,7 @@ List projects = [ 'distribution:bwc:staged-minor-snapshot', 'distribution:bwc:next-bugfix-snapshot', 'distribution:bwc:maintenance-bugfix-snapshot', + 'distribution:tools:java-version-checker', 'distribution:tools:launchers', 'distribution:tools:plugin-cli', 'server',