【问题标题】:In multibuild project with Gradle 5.4, sourceSompatiblity with java 8 is not taking effect在使用 Gradle 5.4 的 multibuild 项目中,java 8 的 sourceSompatiblity 没有生效
【发布时间】:2019-10-03 13:00:57
【问题描述】:

我正在尝试使用 Gradle 5.4 和 Intellij 为某些子项目创建具有不同 Java 版本的多重构建项目。
首先我更新了我所有的子项目,在 build.gradle 的开头有下面的代码

apply plugin: 'java'
sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6

在 Intellij 中导入 Gradle 项目后,Intellij 已更新为带有以下行的 iml 文件:

<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6">

然后我用 java 8 而不是 Java 6 更新了一个特定的子项目,如下所示 {代码} 应用插件:'java' sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 {代码} 但iml文件没有改变。我尝试了不同的东西,但似乎 gradle 忽略了 Java 8。我将 Java 8 更改为 Java 7,并且 iml 文件更新为:

我用 sourceCompatibility = JavaVersion.VERSION_1_8 用 java 9 更新了 gradle 文件,然后 gradle 更新了所有项目以使用 java 8! 甚至将源和目标兼容性设置为 Java 1.6 的子项目。 这是一个错误还是我错过了什么? 我不知道它是否相关的是,当我运行 compileJava 时,我收到以下警告:

warning: [options] bootstrap class path not set in conjunction with -source 1.6

【问题讨论】:

    标签: gradle build build.gradle multi-project


    【解决方案1】:

    我可以解决这个问题。问题是 Intellij Project 中的默认语言级别是 java 6。我将其更改为 Java 8。然后在子项目下的主项目 build gradle 我添加了

    apply plugin: 'java'
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    

    然后只针对我想用 Java 6 编译它们的子项目,在它们的 build.gradle 开头我添加了

    apply plugin: 'java'
        sourceCompatibility = JavaVersion.VERSION_1_6
        targetCompatibility = JavaVersion.VERSION_1_6
    

    然后在每个 java 1.6 的项目的 .ipr 文件中,我得到一个 bytecodeTargetLevel:

    <bytecodeTargetLevel>
      <module name="common" target="1.6" />
    </bytecodeTargetLevel>
    

    并且在每个用于 java 1.6 语言级别的 iml 文件中添加到主要组件中,如下所示:

    <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 2016-06-14
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      相关资源
      最近更新 更多