我有一个项目有两个源树(客户端和主要)。客户端需要编译为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.8 jdk,但无论如何都想添加这些属性。
那么,如何将主兼容性设置为1.8,将客户端设置为1.7?感谢。
答案 0 :(得分:1)
您无法在同一project
中拥有两种语言版本。也就是说你可以拥有不同Java版本的其他模块。
在这种情况下,您可能需要3个模块
:client
:main
:common
现在,如果您希望project(':client')
为Java 7
,可以在client/build.gradle
compileJava {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
然后在project(':main')
Java 8
定义为main/build.gradle
compileJava {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
确保在Java 7
中使用project(':common')
,或者客户端不知道如何阅读common
生成的java 8字节码。