Gradle 如何设置语言级别? (所以它是 IDE-不可知论者)
How to set the language level in Gradle ? (so it is IDE-agnostic)
我想以 IDE 不可知的方式在 gradle 中设置 java 语言级别。
sourceCompatibility = 1.x
在根级别似乎已在 Gradle 2.21 中弃用。
(编辑:是吗?IntelliJ 给我一个 groovy 检查错误)
所以我找到了这个,它有效。
idea {
project {
languageLevel = '1.7'
}
}
但是这里的配置不会将 gradle 绑定到 IntelliJ IDEA,因为 idea { }
结构...
有没有办法以 IDE 不可知的方式做到这一点?
我希望我的 gradle 构建脚本在 any 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 的设置:
File -> Other Settings -> Default Project Structure -> Project Language Level -> 6 (By default).
所以,我认为这是 gradle 的 idea 插件的一个错误。见 https://issues.gradle.org/browse/GRADLE-2198
目前,我有时不得不在上面的对话框中更改语言级别。
如果它们是在 compileJava
下定义的,您将不会收到警告并且 IntelliJ 和 gradle 都遵守它。
compileJava {
sourceCompatibility = '1.7'
targetCompatibility = '1.7'
}
与任何 gradle 文件更改一样,您需要同步才能让 IntelliJ 获取更改。
在您的 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
}
}
添加这个作为答案,因为我从评论中得到它:
不要在 compileJava 任务中使用 sourceCompatibility/targetCompatibility,而是使用:
project.sourceCompatibility = '1.7'
project.targetCompatibility = '1.7'
在相关项目的配置中
我在 Gradle 6.1 上测试了以下内容并且有效:
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
我想以 IDE 不可知的方式在 gradle 中设置 java 语言级别。
sourceCompatibility = 1.x
在根级别似乎已在 Gradle 2.21 中弃用。
(编辑:是吗?IntelliJ 给我一个 groovy 检查错误)
所以我找到了这个,它有效。
idea {
project {
languageLevel = '1.7'
}
}
但是这里的配置不会将 gradle 绑定到 IntelliJ IDEA,因为 idea { }
结构...
有没有办法以 IDE 不可知的方式做到这一点?
我希望我的 gradle 构建脚本在 any 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 的设置:
File -> Other Settings -> Default Project Structure -> Project Language Level -> 6 (By default).
所以,我认为这是 gradle 的 idea 插件的一个错误。见 https://issues.gradle.org/browse/GRADLE-2198
目前,我有时不得不在上面的对话框中更改语言级别。
如果它们是在 compileJava
下定义的,您将不会收到警告并且 IntelliJ 和 gradle 都遵守它。
compileJava {
sourceCompatibility = '1.7'
targetCompatibility = '1.7'
}
与任何 gradle 文件更改一样,您需要同步才能让 IntelliJ 获取更改。
在您的 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
}
}
添加这个作为答案,因为我从评论中得到它:
不要在 compileJava 任务中使用 sourceCompatibility/targetCompatibility,而是使用:
project.sourceCompatibility = '1.7'
project.targetCompatibility = '1.7'
在相关项目的配置中
我在 Gradle 6.1 上测试了以下内容并且有效:
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}