Как настроить проект IntelliJ / Gradle с targetCompatibility = 1.8 и sourceCompatibility = 1.9 или выше? - PullRequest
3 голосов
/ 18 июня 2019

У меня есть проект библиотеки Java с открытым исходным кодом , для которого я хотел бы, чтобы встроенный артефакт как можно дольше поддерживал совместимость с Java 8.

Я недавно получил запрос , чтобы добавить файл module-info.java и настроить поддержку Gradle для Java 9+. Между этим PR и документацией Gradle я переработал соответствующую часть build.gradle, чтобы она выглядела так:

sourceCompatibility = 1.9
targetCompatibility = 1.8

ext.moduleName = 'vault.java.driver'
compileJava {
    inputs.property("moduleName", moduleName)
    doFirst {
        options.compilerArgs = [
                '--module-path', classpath.asPath,
        ]
        classpath = files()
    }
}

compileTestJava {
    inputs.property("moduleName", moduleName)
    doFirst {
        options.compilerArgs = [
                '--module-path', classpath.asPath,
                '--add-modules', 'junit',
                '--add-reads', "$moduleName=junit",
                '--patch-module', "$moduleName=" + files(sourceSets.test.java.srcDirs).asPath,
        ]
        classpath = files()
    }
}

Это замечательно, но я заметил серьезную путаницу между Грэдлом и IntelliJ.

Когда я импортирую проект в IntelliJ, он делает это чисто, и структура проекта четко показывает «Уровень языка» 9. IntelliJ, кажется, прекрасно понимает мой build.gradle, так как он временно изменяет уровень языка на 8, когда я временно установите sourceCompatibility=1.8 и обновите.

Однако, когда я нажимаю «Build Project» из выпадающего меню «Build», я получаю ошибку:

Error:(1, 1) java: modules are not supported in -source 8
  (use -source 9 or higher to enable modules)

Между тем, когда я пытаюсь обойти IntelliJ и запустить ./gradlew build из командной строки, Gradle, похоже, не понимает мои настройки sourceCompatibility или targetCompatability:

* What went wrong:
Execution failed for task ':compileJava'.
> invalid source release: 1.9

Я действительно запутался. Как создать файл build.gradle, который одновременно:

  • позволяет для Java 9 +,
  • при сохранении совместимости встроенных артефактов с Java 8 и
  • радует и Gradle, и IntelliJ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...