如何在gradle中为不同的sourceCompatibility和targetCompatibility构建项目

时间:2018-03-21 06:21:25

标签: gradle build.gradle

我在gradle文件中的当前配置是

sourceCompatibility = 1.7
targetCompatibility = 1.7

此规范使我的项目特定于java 1.7。

我的要求是我应该能够为不同的java版本构建我的项目,例如java 1.7和java 1.8

PS:就像在gradle中构建配置文件一样,我们可以指定不同的java版本。

2 个答案:

答案 0 :(得分:3)

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.8gradle jarJ来构建Java 8和Java 7.

答案 1 :(得分:1)

这就是我解决它的方式

ext.javaVer = project.hasProperty('javaVer') ? project.getProperty('javaVer') : '1.7'
sourceCompatibility = javaVer
targetCompatibility = javaVer
建设项目时

gradle build -P javaVer=1.8