如何为gradle

时间:2016-07-21 12:58:06

标签: java gradle

我有一个项目有两个源树(客户端和主要)。客户端需要编译为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?感谢。

1 个答案:

答案 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字节码。