Java Gradle:不同来源的多项目;目标兼容性
我有多项目的gradle配置,它使用Java7构建。我正在添加一个必须使用Java6构建的新项目 从这一点上,我尝试了不同的解决方案,但没有一个奏效 以下是顶级build.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
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版本。如果问题发生变化,我将我建议再问一个问题,我可以试着提供一些见解。