如何在Gradle中设置语言级别? (因此它与IDE无关)

时间:2015-02-11 09:27:10

标签: java intellij-idea gradle

我想以与IDE无关的方式在gradle中设置java语言级别。

根级别的

sourceCompatibility = 1.x在Gradle 2.21中似乎已弃用。

(编辑:或是吗?IntelliJ给我一个常规的检查错误)

所以我找到了这个,这有效。

idea {
    project {
        languageLevel = '1.7'
    }
}

但由于idea { }结构......

,这里的配置并不与IntelliJ IDEA挂钩。

有没有办法以IDE无关的方式做到这一点?

我希望我的gradle构建脚本能够在任何 IDE(无论是IntelliJ IDEA还是Eclipse)或Jenkins(或其他)上运行。

6 个答案:

答案 0 :(得分:7)

显示了为CLI构建执行此操作的方法。但是我不确定每个IDE是否会选择它。

allprojects {
    tasks.withType(JavaCompile) {
        sourceCompatibility = '1.7'
        targetCompatibility = '1.7'
    } 
}

答案 1 :(得分:3)

如果在命令行中使用Gradle,语言级别将按照build.gradle文件中的指定进行罚款。

但是当将Gradle java项目导入IntelliJ IDEA时,Gradle的插件负责生成IDEA的项目设置文件,

不幸的是,插件不符合build.gradle的sourceCompatibility / targetCompatibility属性, 相反,它使用IDEA的设置: File -> Other Settings -> Default Project Structure -> Project Language Level -> 6 (By default). enter image description here

所以,我认为这是gradle的想法插件的错误。见https://issues.gradle.org/browse/GRADLE-2198

目前,我有时需要在上面的对话框中更改语言级别。

答案 2 :(得分:2)

如果它们是在compileJava下定义的,则不会收到警告,IntelliJ和gradle都会尊重它。

compileJava {
    sourceCompatibility = '1.7'
    targetCompatibility = '1.7'
}

与任何gradle文件更改一样,您需要同步以使IntelliJ获取更改。

Sync

答案 3 :(得分:1)

在app模块内build.gradle的android闭包内:

android {
    compileSdkVersion 27
    buildToolsVersion "26.0.2"
    // etc
    // other things

    // add this
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

答案 4 :(得分:1)

将其添加为答案,因为我从评论中得到了答案:

而不是在compileJava任务中具有sourceCompatibility / targetCompatibility,请使用:

project.sourceCompatibility = '1.7'
project.targetCompatibility = '1.7'

在相关项目的配置中

答案 5 :(得分:1)

我在Gradle 6.1上测试了以下内容,并且可以正常工作:

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}