我有一个项目,它有两个源树(客户端和主)。客户端需要编译到Java 1.7,而main包含Java 1.8构造。我定义了以下gradle源码集:
sourceSets {
main {
    java {
        srcDir "src/main/java"
        srcDir "src/client/java"
    }
}
    compileMainJava {
        sourceCompatibility = "1.8"
        targetCompatibility = "1.8"
    }
client {
    java {
        srcDir "src/client/java"
    }
}
    compileClientJava {
        sourceCompatibility = "1.7"
        targetCompatibility = "1.7"
    }
}然而,主要的源码集显然是用1.7编译的,因为我得到了这个
:compileJavawarning: [options] bootstrap class path not set in conjunction with -source 1.7
C:\dev\eclipse-ws\generic\IoT-Sound\src\main\java\com\ibm\watson\iot\sound\feature\mfcc\MFCCFeatureExtractor.java:129: error: method references are not supported in -source 1.7
                double[] x = Stream.of(xDataBoxed).mapToDouble(Double::doubleValue).toArray();
(use -source 8 or higher to enable method references)如果我注释掉compileMainJava元素,那么它成功地构建了这两个元素,并且似乎将客户端编译到了1.7,因为我收到了与compileClientJava相同的警告(没有错误)。我猜这是因为我使用的是1.8JDK,但无论如何都想添加这些属性。
那么,如何将主兼容性设置为1.8,将客户端兼容性设置为1.7?谢谢。
发布于 2016-07-21 22:50:08
您不能在同一个project中有两个语言版本。也就是说,您可以拥有其他具有不同Java版本的模块。
在这种情况下,您可能需要3个模块
:client
:main
:common现在,如果希望将project(':client')设置为Java 7,可以在client/build.gradle中设置它
compileJava {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}然后在main/build.gradle中将project(':main')定义为Java 8
compileJava {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}只需确保在project(':common')中使用Java 7,否则客户端将不知道如何读取由common生成的Java8字节码。
https://stackoverflow.com/questions/38504928
复制相似问题