如何设置targetCompatibility = 1.8和sourceCompatibility = 1.9或更高版本的IntelliJ / Gradle项目?

时间:2019-06-18 18:29:42

标签: java gradle intellij-idea

我有一个open-source Java library project,为此,我希望构建的工件尽可能保持与Java 8的兼容性。

我最近收到了一个pull request,用于添加一个module-info.java文件并设置Gradle for Java 9+支持。在那个PR和Gradle documentation之间,我重新设计了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()
    }
}

这很棒,但是我注意到Gradle和IntelliJ之间存在严重的混淆。

当我在IntelliJ中导入项目时,它做得很干净,并且项目结构清楚地显示了“语言级别”9。IntelliJ似乎很好地理解了我的build.gradle,因为当将语言级别更改为8时,我暂时设置了sourceCompatibility=1.8并刷新。

但是,当我从“构建”下拉菜单中单击“构建项目”时,出现错误:

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

同时,当我尝试绕过IntelliJ并从命令行运行./gradlew build时,Gradle似乎无法理解我的sourceCompatibilitytargetCompatability设置:

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

我真的很困惑。如何创建一个build.gradle文件,两者同时进行:

  • 允许使用Java 9 +,
  • 同时仍保持与Java 8的内置工件兼容性,并且
  • 让Gradle和IntelliJ开心吗?

0 个答案:

没有答案