Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Gradle中设置语言级别?(因此是IDE不可知论)_Java_Intellij Idea_Gradle - Fatal编程技术网

Java 如何在Gradle中设置语言级别?(因此是IDE不可知论)

Java 如何在Gradle中设置语言级别?(因此是IDE不可知论),java,intellij-idea,gradle,Java,Intellij Idea,Gradle,我想以一种与IDE无关的方式在gradle中设置java语言级别 在Gradle 2.21中,根级别的sourceCompatibility=1.x似乎已被弃用 (编辑:是吗?IntelliJ给了我一个groovy检查错误) 所以我找到了这个,很有效 idea { project { languageLevel = '1.7' } } 但是由于IDEA{}结构,这里的配置不是将gradle与IntelliJ IDEA联系起来了吗 有没有一种方法可以以IDE不可知

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

在Gradle 2.21中,根级别的
sourceCompatibility=1.x
似乎已被弃用

(编辑:是吗?IntelliJ给了我一个groovy检查错误)

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

idea {
    project {
        languageLevel = '1.7'
    }
}
但是由于
IDEA{}
结构,这里的配置不是将gradle与IntelliJ IDEA联系起来了吗

有没有一种方法可以以IDE不可知的方式实现这一点


我希望我的gradle构建脚本可以在任何IDE(IntelliJ IDEA或Eclipse)或Jenkins(或其他任何版本)上运行。

显示了对CLI构建执行此操作的方法。然而,我不确定是否每个IDE都会接受这一点

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

如果在命令行中使用Gradle,则语言级别将按照
build.Gradle
文件中的指定工作

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

不幸的是,该插件不尊重build.gradle的sourceCompatibility/targetCompatibility属性, 相反,它使用IDEA的设置:

文件->其他设置->默认项目结构->项目语言级别->6(默认)。

所以,我认为这是gradle想法插件的一个缺陷。看


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

如果它们是在
compileJava
下定义的,您将不会得到警告,IntelliJ和gradle都尊重它

compileJava {
    sourceCompatibility = '1.7'
    targetCompatibility = '1.7'
}
与任何gradle文件更改一样,您将需要同步以获取IntelliJ以获取更改


在应用程序模块内的
android
关闭build.gradle:

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

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

添加此作为答案,因为我是从评论中获得的:

不要在compileJava任务中使用sourceCompatibility/targetCompatibility,请使用:

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

在相关项目的配置中

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

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

languageLevel
应默认为。您确定它已被弃用吗?使用gradle进行生成不会使您绑定到使用ide。您可以使用gradle包装器'gradlew'并在cli上构建。然后,开发人员有责任与他们的特定项目配置集成ide@lifus好的,谢谢,
sourcecompatibility
确实有效。奇怪的是,我从
sourceCompatibility=1.7
得到了一个Groovy检查错误:“未使用赋值”。是否可以编写
project.sourceCompatibility=1.7
?看起来像是误报<代码>项目。sourceCompatibility在最外层相当于
sourceCompatibility
。这在设置中对我有效:Gradle 6.2.2+Kotlin 1.3项目+IntelliJ 2020.1