繁体   English   中英

如何使用gradle强制执行java编译器版本?

[英]How to enforce a java compiler version with gradle?

在我的所有项目中,我使用gradle并指定以下内容:

sourceCompatibility = "1.7"; // for example
targetCompatibility = "1.7"; // defaults to sourceCompatibility

现在,我安装了三个不同版本的JDK,从1.6到1.8。 为了从一个版本切换到另一个版本,我source shell文件来更改PATHJAVA_HOME甚至JDK_HOME

偶然可能会发生我使用错误的JDK版本而我不希望...在尝试任何编译任务之前是否有可能检查编译器版本是否等于targetCompatibility?

回答自我,感谢@JBNizet提供初始解决方案......

解决方案确实是使用JavaVersion ,并且发生sourceCompatibilitytargetCompatibility接受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

我使用以下内容:

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

如果要检查所有任务的版本,可以在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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM