Как обеспечить исполнение java-компилятора с помощью gradle?
Во всех моих проектах я использую gradle и указываю следующее:
sourceCompatibility = "1.7"; // for example
targetCompatibility = "1.7"; // defaults to sourceCompatibility
Теперь у меня есть три разных версии JDK, от 1.6 до 1.8. Чтобы переключиться с одной версии на другую, я source
файлы оболочки для изменения PATH
, JAVA_HOME
и даже JDK_HOME
.
Случайно может случиться, что я использую неправильную версию JDK, и я не хочу этого... Есть ли возможность проверить, что версия компилятора равна targetCompatibility, прежде чем пытаться выполнить какую-либо задачу компиляции?
Ответы
Ответ 1
Я использую следующее:
task checkJavaVersion << {
if (!JavaVersion.current().isJava6()) {
String message = "ERROR: Java 1.6 required but " +
JavaVersion.current() +
" found. Change your JAVA_HOME environment variable.";
throw new IllegalStateException(message);
}
}
compileJava.dependsOn checkJavaVersion
Ответ 2
Отвечайте на себя, и благодаря @JBNizet для предоставления начального решения...
Решение действительно использует JavaVersion
, и бывает, что как sourceCompatibility
, так и targetCompatibility
принимают JavaVersion
в качестве аргумента...
Поэтому файл сборки стал следующим:
def javaVersion = JavaVersion.VERSION_1_7;
sourceCompatibility = javaVersion;
targetCompatibility = javaVersion; // defaults to sourceCompatibility
И затем задача:
task enforceVersion << {
def foundVersion = JavaVersion.current();
if (foundVersion != javaVersion)
throw new IllegalStateException("Wrong Java version; required is "
+ javaVersion + ", but found " + foundVersion);
}
compileJava.dependsOn(enforceVersion);
И он работает:
$ ./gradlew clean compileJava
:clean UP-TO-DATE
:enforceVersion FAILED
FAILURE: Build failed with an exception.
* Where:
Build file '/home/fge/src/perso/grappa-tracer-backport/build.gradle' line: 55
* What went wrong:
Execution failed for task ':enforceVersion'.
> Wrong Java version; required is 1.7, but found 1.8
Ответ 3
Если вы хотите, чтобы версия проверялась для всех задач, вы можете добавить утверждение в build.gradle
чтобы применить его:
assert JavaVersion.current().isJava9Compatible(): "Java 9 or newer is required"
В Gradle 5.4.1 сбой выглядит так:
$ ./gradlew --quiet build
FAILURE: Build failed with an exception.
* Where:
Build file '/home/codehearts/build.gradle' line: 15
* What went wrong:
A problem occurred evaluating root project 'Codehearts'.
> Java 9 or newer is required. Expression: org.gradle.api.JavaVersion.current().isJava9Compatible()
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 3s
Вы также можете проверить точные версии, если это необходимо:
assert JavaVersion.current().isJava9(): "Java 9 is required"