Gradle 使用它在 PATH 或 JAVA_HOME 中找到的任何 JDK。因此,如果您删除 sourceCompatibility 和 targetCompatibility 它应该使用运行项目的机器上使用的 Java 版本构建项目。当然,这确实意味着您不应该在代码中包含像 lambdas 这样的构造,否则 Java 7 上的编译将失败。
您还应该知道,从 Gradle 5 开始,对 Java 7 的支持将被删除,它将仅在 Java 8(或更新版本)上运行。
另一种方法是在运行时指定JDK,请参阅link
如果你想同时为多个 Java 版本构建,你可以使用这样的东西:
task compile7(type: JavaCompile) {
source = fileTree(dir: 'src', include: '**/*.java')
classpath = sourceSets.main.compileClasspath
sourceCompatibility = 1.7
targetCompatibility = 1.7
destinationDir = file('build/java7')
}
task jar7(type: Jar, dependsOn: compile7) {
from('build/java7')
archiveName = 'project-JDK7.jar'
destinationDir = file('build/jars')
}
task compile8(type: JavaCompile) {
source = fileTree(dir: 'src', include: '**/*.java')
classpath = sourceSets.main.compileClasspath
sourceCompatibility = 1.8
targetCompatibility = 1.8
destinationDir = file('build/java8')
}
task jar8(type: Jar, dependsOn: compile8) {
from('build/java8')
archiveName = 'project-JDK8.jar'
destinationDir = file('build/jars')
}
您可以调用gradle jar7 jar8 为您想要的两个java 版本构建jar。当然,上面的代码可以改进为参数化操作,像这样:
ext.javaVer = project.hasProperty('javaVer') ? project.getProperty('javaVer') : '1.7'
task compileJ(type: JavaCompile) {
source = fileTree(dir: 'src', include: '**/*.java')
classpath = sourceSets.main.compileClasspath
sourceCompatibility = javaVer
targetCompatibility = javaVer
destinationDir = file('build/' + javaVer)
}
task jarJ(type: Jar, dependsOn: compileJ) {
from('build/' + javaVer)
archiveName = 'project-' + javaVer + '.jar'
destinationDir = file('build/jars')
}
使用这种格式,您可以调用 gradle jarJ -P javaVer=1.8 和 gradle jarJ 来构建 Java 8 和 Java 7。