当前位置: 首页 > 知识库问答 >
问题:

如何构建不同来源的项目兼容性和目标在gradle中的兼容性

杜河
2023-03-14

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

sourceCompatibility = 1.7
targetCompatibility = 1.7

这个规范使我的项目特定于Java1.7。

我的要求是我应该能够为不同的java版本构建我的项目,比如Java1.7和Java1.8

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

共有2个答案

姬存
2023-03-14

我就是这样解决的

ext.javaVer = project.hasProperty('javaVer') ? project.getProperty('javaVer') : '1.7'
sourceCompatibility = javaVer
targetCompatibility = javaVer

在建设项目中

gradle build -P javaVer=1.8
丁宏浚
2023-03-14

Gradle使用它在PATH或JAVA_HOME中找到的任何JDK。因此,如果删除sourceCompatibility和targetCompatibility,则应使用项目运行机器上使用的Java版本构建项目。当然,这意味着您不应该在代码中使用类似lambdas的构造,否则Java 7上的编译将失败。

您还应该知道,从Gradle 5开始,对Java 7的支持将被放弃,并且它将只在Java 8(或更新版本)上运行。

另一种方法是在运行时指定JDK,请参见以下链接

如果您想同时为多个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版本构建jars。当然,上面的代码可以改进以参数化操作,像这样:

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来构建Java8和Java7。

 类似资料:
  • 从这个问答中,我尝试了不同的解决方案,但没有一个奏效。 这里是顶层建筑。Gradle: 我试图在子项目中提高源代码的兼容性,但似乎没有效果。 子项目包含使用来自Java8的API的每个类,使用Java6的子项目预计会失败,但构建成功运行。 下面是父build.gradle文件: 父设置的内容。Gradle: 它是gradle.properties: 我正在打印和,它们对每个项目都有很好的值。 我正

  • 我目前正在使用gradle,似乎可以通过java插件设置sourcecompatibility和targetcompatibility 我想知道除了与旧的JDK向后兼容之外,我们使用sourcecompatibility/targetcompatibility的原因是什么? 如果没有设置sourcecompatibility/targetcompatibility,升级到最新的java会更容易吗?

  • 我找不到任何关于什么Java版本可以用于Android Gradle“源兼容性”和“目标兼容性”的选择的信息。 我可以获得当前的Java JDK路径,比如:'c://Program Files/Java/jdk1.7.0_45'到'1.7',那么选择是'1.7'还是'1.6'? 或者,如果您有一个到'1.8'的路径:'1.8'、'1.7'和'1.6'? 我如何确定哪些选择是可用的? 谢了!

  • 尽管我的Java7项目依赖于,但它在Gradle中构建得很好。 我非常非常困惑。只是Java 8中的一个内容,对吗? 我有一个Gradle项目,并且我将和都设置为。 在这个模块的一个类中,我导入了,我以为直到Java8才包含它。 如果我运行,编译器甚至会用正确的选项调用。不过,有一个警告听起来有点可疑。然而,罐子构建得很好。 我要疯了吗?

  • 在使用Java编译器(

  • 本文向大家介绍如何去除vue项目中的#及其ie9兼容性,包括了如何去除vue项目中的#及其ie9兼容性的使用技巧和注意事项,需要的朋友参考一下 一、如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) 二、vue路由原理 2.1  hash模式:vue-router默认的路由模式。 vue开发的单页面应用,html