Как установить уровень языка в Gradle? (так что это IDE-агностик)

Я хотел бы установить уровень языка java в gradle, в IDE-агностической манере.

sourceCompatibility = 1.x на корневом уровне кажется устаревшим в Gradle 2.21.

(edit: или это? IntelliJ дает мне ошибку проверки groovy)

Итак, я нашел, что работает.

idea {
    project {
        languageLevel = '1.7'
    }
}

но разве конфигурация здесь не привязывает gradle к идее IntelliJ, из-за idea { } структура...

есть ли способ сделать это в IDE-агностик мода?

Я хотел бы, чтобы мой скрипт сборки gradle запускался в любой IDE (будь то IntelliJ IDEA или Eclipse) или на Jenkins (или что-то еще).

4 ответов


Если вы используете Gradle в командной строке, уровень языка работает штрафы, как указано в .

но при импорте проекта Gradle java в IntelliJ IDEA плагин Gradle берет на себя ответственность за создание файлов настроек проекта IDEA,

к сожалению, плагин не уважает сборку.sourceCompatibility Gradle в в/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

В настоящее время я должен иногда менять уровень языка в диалоговом окне выше.


показан способ сделать это для сборок CLI. Однако я не уверен, что каждая IDE подберет это.

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

если они определены в compileJava вы не получите предупреждение, а IntelliJ и gradle уважают его.

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

Как и при любом изменении файла gradle, вам понадобится синхронизация, чтобы IntelliJ мог принимать изменения.

Sync


внутри android закрытие сборки.gradle внутри вашего модуля приложения:

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

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