Java Gradle:不同来源的多项目;目标兼容性

Java Gradle:不同来源的多项目;目标兼容性,java,gradle,build.gradle,Java,Gradle,Build.gradle,我有多项目的gradle配置,它使用Java7构建。我正在添加一个必须使用Java6构建的新项目 从这一点上,我尝试了不同的解决方案,但没有一个奏效 以下是顶级build.gradle: allprojects { apply plugin: 'idea' apply plugin: 'java' repositories { maven { url 'http://repo1.maven.org/maven2' } mavenLoca

我有多项目的gradle配置,它使用Java7构建。我正在添加一个必须使用Java6构建的新项目

从这一点上,我尝试了不同的解决方案,但没有一个奏效

以下是顶级build.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"
        }
    }
}
父设置.gradle的内容:

rootProject.name = 'Parent'
include 'child2Java6'
include 'child1Java8'
Java 6子项目build.gradle的内容:

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/
Java 6子项目的gradle.properties的内容:

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/
java 8子项目的build.gradle:

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/
我正在打印
sourceCompatibility
targetCompatibility
,它们对每个项目都有很好的价值

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

gradle-v
输出:

------------------------------------------------------------
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
我使用Java8作为默认的Jdk


提前感谢,

与其他编程语言类似,Gradle有许多方法来完成相同的任务。跨多项目构建按项目定义特定插件或依赖项将使构建保持自包含,并有望创建更多可维护的代码

从Gradle文档:

还可以使用“特性”将特性添加到项目对象中 文件夹。您可以将gradle.properties文件放置在gradle用户主页中 目录(由“GRADLE\u USER\u HOME”环境变量定义, 如果没有设置,则默认为USER_HOME/.gradle)或在项目中 目录对于多项目生成,可以放置gradle.properties 任何子项目目录中的文件。属性集 可以通过项目对象访问gradle.properties文件。这个 用户主目录中的属性文件优先于 项目目录中的属性文件

这意味着在每个子项目
gradle.properties
文件中,您可以定义项目将使用的Java版本或其他依赖项。在Gradle项目根
Gradle.properties
文件中设置Gradle Java版本的示例如下:

org.gradle.java.home=/path_to_jdk_7
在您的子项目
gradle.properties
文件中,您将有类似的内容:

com.myproject.app=/path_to_jdk_6
更新

Gradle提供了监视子项目的工具。通过在父项目
build.gradle
中包含以下内容,可以调用一个任务来打印子项目及其父项目

allprojects {
    task versioner << {task -> println "Loaded: $task.project.name"}
}
subprojects {
    versioner << {println " - Depends on parent"}
}

我引用了我从gradle论坛得到的答案:

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

设置编译器的源代码级别只会影响您可以使用哪些语言功能(例如Lambdas)。它对API没有影响。这与Gradle无关,即使您直接运行javac也是如此。为了确保没有使用错误的API,必须设置编译任务的bootClasspath

tasks.withType(JavaCompile) {
  options.fork = true
  options.bootClasspath = "path/to/rt.jar"
}

我在我的子项目中添加了gradle.properties,但它似乎不起作用org.gradle.java.home=/Library/java/JavaVirtualMachines/1.6.0.jdk/Contents/home您是否通过注释
repositories
之后的项目并在根
gradle.properties
文件?在存储库之后对代码进行了注释,添加了top-leve-gradle.settings和org.gradle.java.home=/Library/java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/home,但仍然没有使用java 6进行编译:(我已经在一个示例项目上测试了gradle.properties的使用,并将其上载到github。感谢您上载该项目。我能够成功地构建和运行该项目。我不确定没有加载什么,因为子项目正在加载原始问题中所述的正确Java版本。如果问题发生变化,我将我建议再问一个问题,我可以试着提供一些见解。