ENT-1463, ENT-1903: Refactor Gradle for deterministic modules (#3387)

* Export locations of both deterministic rt.jar and its JDK_HOME as properties.
* Refactor deterministic Java/Kotlin configuration into a script plugin.
This commit is contained in:
Chris Rankin 2018-06-18 14:14:48 +01:00 committed by GitHub
parent c2585e8c8e
commit 9148d0529a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 52 deletions

View File

@ -1,17 +1,14 @@
description 'Corda core (deterministic)' description 'Corda core (deterministic)'
apply plugin: 'kotlin' apply from: '../deterministic.gradle'
apply plugin: 'com.jfrog.artifactory' apply plugin: 'com.jfrog.artifactory'
apply plugin: 'net.corda.plugins.publish-utils' apply plugin: 'net.corda.plugins.publish-utils'
apply plugin: 'idea' apply plugin: 'idea'
evaluationDependsOn(':jdk8u-deterministic')
evaluationDependsOn(":core") evaluationDependsOn(":core")
def javaHome = System.getProperty('java.home') def javaHome = System.getProperty('java.home')
def jarBaseName = "corda-${project.name}".toString() def jarBaseName = "corda-${project.name}".toString()
def jdkTask = project(':jdk8u-deterministic').assemble
def deterministic_jdk_home = project(':jdk8u-deterministic').jdk_home
configurations { configurations {
runtimeLibraries runtimeLibraries
@ -36,18 +33,6 @@ dependencies {
runtimeLibraries "org.slf4j:slf4j-api:$slf4j_version" runtimeLibraries "org.slf4j:slf4j-api:$slf4j_version"
} }
tasks.withType(AbstractCompile) {
dependsOn jdkTask
}
tasks.withType(JavaCompile) {
options.compilerArgs << '-bootclasspath' << "$deterministic_jdk_home/jre/lib/rt.jar".toString()
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions.jdkHome = deterministic_jdk_home
}
jar { jar {
baseName 'DOES-NOT-EXIST' baseName 'DOES-NOT-EXIST'
// Don't build a jar here because it would be the wrong one. // Don't build a jar here because it would be the wrong one.
@ -162,7 +147,7 @@ task metafix(type: MetaFixerTask) {
task checkDeterminism(type: ProGuardTask, dependsOn: jdkTask) { task checkDeterminism(type: ProGuardTask, dependsOn: jdkTask) {
injars metafix injars metafix
libraryjars "$deterministic_jdk_home/jre/lib/rt.jar" libraryjars deterministic_rt_jar
configurations.runtimeLibraries.forEach { configurations.runtimeLibraries.forEach {
libraryjars it.path, filter: '!META-INF/versions/**' libraryjars it.path, filter: '!META-INF/versions/**'

View File

@ -1,29 +1,12 @@
apply plugin: 'kotlin' apply from: '../../../deterministic.gradle'
apply plugin: 'idea' apply plugin: 'idea'
evaluationDependsOn(':jdk8u-deterministic')
def jdkTask = project(':jdk8u-deterministic').assemble
def deterministic_jdk_home = project(':jdk8u-deterministic').jdk_home
dependencies { dependencies {
compileOnly project(path: ':core-deterministic', configuration: 'runtimeArtifacts') compileOnly project(path: ':core-deterministic', configuration: 'runtimeArtifacts')
compileOnly project(path: ':serialization-deterministic', configuration: 'runtimeArtifacts') compileOnly project(path: ':serialization-deterministic', configuration: 'runtimeArtifacts')
compileOnly "junit:junit:$junit_version" compileOnly "junit:junit:$junit_version"
} }
tasks.withType(AbstractCompile) {
dependsOn jdkTask
}
tasks.withType(JavaCompile) {
options.compilerArgs << '-bootclasspath' << "$deterministic_jdk_home/jre/lib/rt.jar".toString()
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions.jdkHome = deterministic_jdk_home
}
idea { idea {
module { module {
if (project.hasProperty("deterministic_idea_sdk")) { if (project.hasProperty("deterministic_idea_sdk")) {

29
deterministic.gradle Normal file
View File

@ -0,0 +1,29 @@
/*
* Gradle script plugin: Configure a module such that the Java and Kotlin
* compilers use the deterministic rt.jar instead of the full JDK rt.jar.
*/
apply plugin: 'kotlin'
evaluationDependsOn(':jdk8u-deterministic')
def jdk8uDeterministic = project(':jdk8u-deterministic')
ext {
jdkTask = jdk8uDeterministic.assemble
deterministic_jdk_home = jdk8uDeterministic.jdk_home
deterministic_rt_jar = jdk8uDeterministic.rt_jar
}
tasks.withType(AbstractCompile) {
dependsOn jdkTask
// This is a bit ugly, but Gradle isn't recognising the KotlinCompile task
// as it does the built-in JavaCompile task.
if (it.class.name.startsWith("org.jetbrains.kotlin.gradle.tasks.KotlinCompile")) {
kotlinOptions.jdkHome = deterministic_jdk_home
}
}
tasks.withType(JavaCompile) {
options.compilerArgs << '-bootclasspath' << deterministic_rt_jar
}

View File

@ -9,6 +9,7 @@ repositories {
ext { ext {
jdk_home = "$projectDir/jdk" jdk_home = "$projectDir/jdk"
rt_jar = "$jdk_home/jre/lib/rt.jar".toString()
} }
configurations { configurations {

View File

@ -1,17 +1,14 @@
description 'Corda serialization (deterministic)' description 'Corda serialization (deterministic)'
apply plugin: 'kotlin' apply from: '../deterministic.gradle'
apply plugin: 'com.jfrog.artifactory' apply plugin: 'com.jfrog.artifactory'
apply plugin: 'net.corda.plugins.publish-utils' apply plugin: 'net.corda.plugins.publish-utils'
apply plugin: 'idea' apply plugin: 'idea'
evaluationDependsOn(':jdk8u-deterministic')
evaluationDependsOn(":serialization") evaluationDependsOn(":serialization")
def javaHome = System.getProperty('java.home') def javaHome = System.getProperty('java.home')
def jarBaseName = "corda-${project.name}".toString() def jarBaseName = "corda-${project.name}".toString()
def jdkTask = project(':jdk8u-deterministic').assemble
def deterministic_jdk_home = project(':jdk8u-deterministic').jdk_home
configurations { configurations {
runtimeLibraries runtimeLibraries
@ -30,18 +27,6 @@ dependencies {
runtimeLibraries "org.iq80.snappy:snappy:$snappy_version" runtimeLibraries "org.iq80.snappy:snappy:$snappy_version"
} }
tasks.withType(AbstractCompile) {
dependsOn jdkTask
}
tasks.withType(JavaCompile) {
options.compilerArgs << "-bootclasspath" << "$deterministic_jdk_home/jre/lib/rt.jar".toString()
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions.jdkHome = deterministic_jdk_home
}
jar { jar {
baseName 'DOES-NOT-EXIST' baseName 'DOES-NOT-EXIST'
// Don't build a jar here because it would be the wrong one. // Don't build a jar here because it would be the wrong one.
@ -150,7 +135,7 @@ task metafix(type: MetaFixerTask) {
task checkDeterminism(type: ProGuardTask, dependsOn: jdkTask) { task checkDeterminism(type: ProGuardTask, dependsOn: jdkTask) {
injars metafix injars metafix
libraryjars "$deterministic_jdk_home/jre/lib/rt.jar" libraryjars deterministic_rt_jar
configurations.runtimeLibraries.forEach { configurations.runtimeLibraries.forEach {
libraryjars it.path, filter: '!META-INF/versions/**' libraryjars it.path, filter: '!META-INF/versions/**'