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

Gradle:具有不同源和目标兼容性的多项目

花飞扬
2023-03-14

从这个问答中,我尝试了不同的解决方案,但没有一个奏效。

这里是顶层建筑。Gradle:

allprojects {
    apply plugin: 'idea'
    apply plugin: 'java'


    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
        mavenLocal()
    }

    sourceCompatibility = 1.7
    targetCompatibility = 1.7

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:-options"
        }
    }
}

我试图在子项目中提高源代码的兼容性,但似乎没有效果。

子项目包含使用来自Java8的API的每个类,使用Java6的子项目预计会失败,但构建成功运行。

下面是父build.gradle文件:

group 'com.test'
version '1.0-SNAPSHOT'
repositories {
   mavenCentral()
}

父设置的内容。Gradle:

rootProject.name = 'Parent'
include 'child2Java6'
include 'child1Java8'
group 'com.test'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6
repositories {
    mavenCentral()
}
compileJava.doFirst {
    println "source compatibility  " + sourceCompatibility
    println "target compatibility  " + targetCompatibility
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}
org.gradle.java.home=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/
group 'com.test'
version '1.0-SNAPSHOT'

apply plugin: 'java'


sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
repositories {
    mavenCentral()
}
compileJava.doFirst {
    println "source compatibility  " + sourceCompatibility
    println "target compatibility  " + targetCompatibility
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

它是gradle.properties:

org.gradle.java.home=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

我正在打印sourcecompatibilitytargetcompatibility,它们对每个项目都有很好的值。

我正在使用gradle clean build进行构建。

------------------------------------------------------------
Gradle 2.9
------------------------------------------------------------

Build time:   2015-11-17 07:02:17 UTC
Build number: none
Revision:     b463d7980c40d44c4657dc80025275b84a29e31f

   Groovy:       2.4.4
   Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
   JVM:          1.8.0_65 (Oracle Corporation 25.65-b01)
   OS:           Mac OS X 10.11.1 x86_64

共有1个答案

漆雕恺
2023-03-14

我引用的是我从Gradle论坛上得到的答案:

您不能在每个项目级别上更改java.home,因为它适用于整个多项目构建。

设置编译器的源代码级别只对您可以使用的语言特性(例如Lambdas)有影响。它对API没有影响。即使直接运行javac,这也与Gradle和true无关。为了确保您没有使用错误的API,您必须设置编译任务的引导类路径。

tasks.withType(JavaCompile) {
  options.fork = true
  options.bootClasspath = "path/to/rt.jar"
}
 类似资料:
  • 我在gradle文件中的当前配置是 这个规范使我的项目特定于Java1.7。 我的要求是我应该能够为不同的java版本构建我的项目,比如Java1.7和Java1.8 PS:就像gradle中的概要文件构建一样,我们可以指定不同的java版本。

  • 在使用Java编译器(

  • 我目前正在使用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才包含它。 如果我运行,编译器甚至会用正确的选项调用。不过,有一个警告听起来有点可疑。然而,罐子构建得很好。 我要疯了吗?

  • 我有一个使用groovy插件的gradle项目。groovy还交叉编译java类。没有java插件,只有和更高版本的 intellij导入了该项目,但它使用sourceCompatibility<1.8(系统中只安装了Java8)。工作时没有任何问题。 向.gradle文件添加什么使intellij使用1.8 SourceCompatibility?