From 9664828e6ead3a9881456e1154299f7b56d78c88 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Wed, 23 Aug 2017 15:36:08 +0100 Subject: [PATCH 1/6] Upgraded to gradle 4.1. --- gradle/wrapper/gradle-wrapper.jar | Bin 54212 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 3 +-- gradlew | 6 +++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 48d4660db69db5bfafd1e58cb36f57b6a1392637..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 100644 GIT binary patch delta 19317 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 224fc8b276..f16d26666b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Mar 21 18:12:23 GMT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip diff --git a/gradlew b/gradlew index 4453ccea33..cccdd3d517 100755 --- a/gradlew +++ b/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } From f5dcfcd139a02996dab5f47f392a3928e80e6e6f Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Thu, 24 Aug 2017 12:33:11 +0100 Subject: [PATCH 2/6] Switched gradle to include sources to make maintaining gradle files easier. --- gradle/wrapper/gradle-wrapper.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f16d26666b..383fa73d26 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Thu Aug 24 12:32:31 BST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From 8756f337dbfeac51c13ab22496446b2ca790e179 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Thu, 24 Aug 2017 15:57:11 +0100 Subject: [PATCH 3/6] Added a flag to denote debug mode for capsule in cordformation. --- constants.properties | 2 +- .../kotlin/net/corda/plugins/NodeRunner.kt | 32 +++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/constants.properties b/constants.properties index 420ba0853f..f8c76f96a6 100644 --- a/constants.properties +++ b/constants.properties @@ -1,4 +1,4 @@ -gradlePluginsVersion=0.15.0 +gradlePluginsVersion=0.15.1 kotlinVersion=1.1.4 guavaVersion=21.0 bouncycastleVersion=1.57 diff --git a/gradle-plugins/cordformation/src/noderunner/kotlin/net/corda/plugins/NodeRunner.kt b/gradle-plugins/cordformation/src/noderunner/kotlin/net/corda/plugins/NodeRunner.kt index 4a9711572e..7ec608802a 100644 --- a/gradle-plugins/cordformation/src/noderunner/kotlin/net/corda/plugins/NodeRunner.kt +++ b/gradle-plugins/cordformation/src/noderunner/kotlin/net/corda/plugins/NodeRunner.kt @@ -3,10 +3,10 @@ package net.corda.plugins import java.awt.GraphicsEnvironment import java.io.File import java.nio.file.Files -import java.nio.file.Path import java.util.* private val HEADLESS_FLAG = "--headless" +private val CAPSULE_DEBUG_FLAG = "--capsule-debug" private val os by lazy { val osName = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH) @@ -24,13 +24,15 @@ private object debugPortAlloc { fun main(args: Array) { val startedProcesses = mutableListOf() - val headless = GraphicsEnvironment.isHeadless() || (args.isNotEmpty() && args[0] == HEADLESS_FLAG) + val headless = GraphicsEnvironment.isHeadless() || args.contains(HEADLESS_FLAG) + val capsuleDebugMode = args.contains(CAPSULE_DEBUG_FLAG) val workingDir = File(System.getProperty("user.dir")) - val javaArgs = args.filter { it != HEADLESS_FLAG } + val javaArgs = args.filter { it != HEADLESS_FLAG && it != CAPSULE_DEBUG_FLAG } + val jvmArgs = if (capsuleDebugMode) listOf("-Dcapsule.log=verbose") else emptyList() println("Starting nodes in $workingDir") workingDir.listFiles { file -> file.isDirectory }.forEach { dir -> listOf(NodeJarType, WebJarType).forEach { jarType -> - jarType.acceptDirAndStartProcess(dir, headless, javaArgs)?.let { startedProcesses += it } + jarType.acceptDirAndStartProcess(dir, headless, javaArgs, jvmArgs)?.let { startedProcesses += it } } } println("Started ${startedProcesses.size} processes") @@ -39,7 +41,7 @@ fun main(args: Array) { private abstract class JarType(private val jarName: String) { internal abstract fun acceptNodeConf(nodeConf: File): Boolean - internal fun acceptDirAndStartProcess(dir: File, headless: Boolean, javaArgs: List): Process? { + internal fun acceptDirAndStartProcess(dir: File, headless: Boolean, javaArgs: List, jvmArgs: List): Process? { if (!File(dir, jarName).exists()) { return null } @@ -48,7 +50,7 @@ private abstract class JarType(private val jarName: String) { } val debugPort = debugPortAlloc.next() println("Starting $jarName in $dir on debug port $debugPort") - val process = (if (headless) ::HeadlessJavaCommand else ::TerminalWindowJavaCommand)(jarName, dir, debugPort, javaArgs).start() + val process = (if (headless) ::HeadlessJavaCommand else ::TerminalWindowJavaCommand)(jarName, dir, debugPort, javaArgs, jvmArgs).start() if (os == OS.MACOS) Thread.sleep(1000) return process } @@ -63,9 +65,17 @@ private object WebJarType : JarType("corda-webserver.jar") { override fun acceptNodeConf(nodeConf: File) = Files.lines(nodeConf.toPath()).anyMatch { "webAddress" in it } } -private abstract class JavaCommand(jarName: String, internal val dir: File, debugPort: Int?, internal val nodeName: String, init: MutableList.() -> Unit, args: List) { +private abstract class JavaCommand( + jarName: String, + internal val dir: File, + debugPort: Int?, + internal val nodeName: String, + init: MutableList.() -> Unit, args: List, + jvmArgs: List +) { internal val command: List = mutableListOf().apply { add(getJavaPath()) + addAll(jvmArgs) add("-Dname=$nodeName") null != debugPort && add("-Dcapsule.jvm.args=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$debugPort") add("-jar") @@ -79,12 +89,14 @@ private abstract class JavaCommand(jarName: String, internal val dir: File, debu internal abstract fun getJavaPath(): String } -private class HeadlessJavaCommand(jarName: String, dir: File, debugPort: Int?, args: List) : JavaCommand(jarName, dir, debugPort, dir.name, { add("--no-local-shell") }, args) { +private class HeadlessJavaCommand(jarName: String, dir: File, debugPort: Int?, args: List, jvmArgs: List) + : JavaCommand(jarName, dir, debugPort, dir.name, { add("--no-local-shell") }, args, jvmArgs) { override fun processBuilder() = ProcessBuilder(command).redirectError(File("error.$nodeName.log")).inheritIO() override fun getJavaPath() = File(File(System.getProperty("java.home"), "bin"), "java").path } -private class TerminalWindowJavaCommand(jarName: String, dir: File, debugPort: Int?, args: List) : JavaCommand(jarName, dir, debugPort, "${dir.name}-$jarName", {}, args) { +private class TerminalWindowJavaCommand(jarName: String, dir: File, debugPort: Int?, args: List, jvmArgs: List) + : JavaCommand(jarName, dir, debugPort, "${dir.name}-$jarName", {}, args, jvmArgs) { override fun processBuilder() = ProcessBuilder(when (os) { OS.MACOS -> { listOf("osascript", "-e", """tell app "Terminal" @@ -113,7 +125,7 @@ end tell""") val path = File(File(System.getProperty("java.home"), "bin"), "java").path // Replace below is to fix an issue with spaces in paths on Windows. // Quoting the entire path does not work, only the space or directory within the path. - return if(os == OS.WINDOWS) path.replace(" ", "\" \"") else path + return if (os == OS.WINDOWS) path.replace(" ", "\" \"") else path } } From f7d06e82186f0ceb31d13b7380c94125bde05a28 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Thu, 24 Aug 2017 15:58:01 +0100 Subject: [PATCH 4/6] Fixed an exception on shutdown if the nodes failed to start up before the notary value is assigned. --- .../net/corda/java/rpc/StandaloneCordaRPCJavaClientTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/rpc/src/smoke-test/java/net/corda/java/rpc/StandaloneCordaRPCJavaClientTest.java b/client/rpc/src/smoke-test/java/net/corda/java/rpc/StandaloneCordaRPCJavaClientTest.java index 0d2a327ac6..2cd3ad6628 100644 --- a/client/rpc/src/smoke-test/java/net/corda/java/rpc/StandaloneCordaRPCJavaClientTest.java +++ b/client/rpc/src/smoke-test/java/net/corda/java/rpc/StandaloneCordaRPCJavaClientTest.java @@ -67,7 +67,9 @@ public class StandaloneCordaRPCJavaClientTest { try { connection.close(); } finally { - notary.close(); + if(notary != null) { + notary.close(); + } } } From ce7ce6c8b7152a70571010899654003fef3d0111 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Thu, 24 Aug 2017 15:58:41 +0100 Subject: [PATCH 5/6] Used a more robust location for the caplet classes now that gradle 4 has changed the classes directory structure. --- node/capsule/build.gradle | 4 ++-- tools/explorer/capsule/build.gradle | 2 +- webserver/webcapsule/build.gradle | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/node/capsule/build.gradle b/node/capsule/build.gradle index 12de5f404e..ca5d578407 100644 --- a/node/capsule/build.gradle +++ b/node/capsule/build.gradle @@ -26,8 +26,8 @@ task buildCordaJAR(type: FatCapsule, dependsOn: project(':node').compileJava) { applicationSource = files( project(':node').configurations.runtime, project(':node').jar, - '../build/classes/main/CordaCaplet.class', - '../build/classes/main/CordaCaplet$1.class', + project(':node').sourceSets.main.java.outputDir.toString() + '/CordaCaplet.class', + project(':node').sourceSets.main.java.outputDir.toString() + '/CordaCaplet$1.class', "$rootDir/config/dev/log4j2.xml" ) from 'NOTICE' // Copy CDDL notice diff --git a/tools/explorer/capsule/build.gradle b/tools/explorer/capsule/build.gradle index c0a35f7b20..09a4005c6d 100644 --- a/tools/explorer/capsule/build.gradle +++ b/tools/explorer/capsule/build.gradle @@ -31,7 +31,7 @@ task buildExplorerJAR(type: FatCapsule, dependsOn: project(':tools:explorer').co applicationSource = files( project(':tools:explorer').configurations.runtime, project(':tools:explorer').jar, - '../build/classes/main/ExplorerCaplet.class' + project(':tools:explorer').sourceSets.main.java.outputDir.toString() + '/ExplorerCaplet.class' ) classifier 'fat' diff --git a/webserver/webcapsule/build.gradle b/webserver/webcapsule/build.gradle index 9f5fa8df55..53b52324de 100644 --- a/webserver/webcapsule/build.gradle +++ b/webserver/webcapsule/build.gradle @@ -26,8 +26,8 @@ task buildWebserverJar(type: FatCapsule, dependsOn: project(':node').compileJava applicationSource = files( project(':webserver').configurations.runtime, project(':webserver').jar, - new File(project(':node').buildDir, 'classes/main/CordaCaplet.class'), - new File(project(':node').buildDir, 'classes/main/CordaCaplet$1.class'), + project(':node').sourceSets.main.java.outputDir.toString() + '/CordaCaplet.class', + project(':node').sourceSets.main.java.outputDir.toString() + '/CordaCaplet$1.class', "$rootDir/config/dev/log4j2.xml" ) from 'NOTICE' // Copy CDDL notice From ac26b7d1c640bd43ecc0f762d3fd5470d73c408c Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Thu, 24 Aug 2017 16:46:54 +0100 Subject: [PATCH 6/6] Fixed issues detecting tests caused by changes to directory structures in gradle. --- client/jfx/build.gradle | 2 +- client/rpc/build.gradle | 4 ++-- docs/source/example-code/build.gradle | 2 +- node/build.gradle | 4 ++-- samples/attachment-demo/build.gradle | 2 +- samples/bank-of-corda-demo/build.gradle | 2 +- samples/irs-demo/build.gradle | 2 +- samples/simm-valuation-demo/build.gradle | 2 +- samples/trader-demo/build.gradle | 2 +- test-utils/build.gradle | 2 +- verifier/build.gradle | 2 +- webserver/build.gradle | 2 +- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/client/jfx/build.gradle b/client/jfx/build.gradle index 9c70ee7a04..8b8c677e4b 100644 --- a/client/jfx/build.gradle +++ b/client/jfx/build.gradle @@ -53,7 +53,7 @@ dependencies { } task integrationTest(type: Test) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/client/rpc/build.gradle b/client/rpc/build.gradle index 18a2ece101..70ebc5ed57 100644 --- a/client/rpc/build.gradle +++ b/client/rpc/build.gradle @@ -81,12 +81,12 @@ dependencies { } task integrationTest(type: Test) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } task smokeTest(type: Test) { - testClassesDir = sourceSets.smokeTest.output.classesDir + testClassesDirs = sourceSets.smokeTest.output.classesDirs classpath = sourceSets.smokeTest.runtimeClasspath } diff --git a/docs/source/example-code/build.gradle b/docs/source/example-code/build.gradle index e07cf3cec2..9866eda06e 100644 --- a/docs/source/example-code/build.gradle +++ b/docs/source/example-code/build.gradle @@ -64,7 +64,7 @@ applicationDistribution.into("bin") { } task integrationTest(type: Test) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/node/build.gradle b/node/build.gradle index 70a435caf8..1a55dddbe4 100644 --- a/node/build.gradle +++ b/node/build.gradle @@ -193,7 +193,7 @@ dependencies { } task integrationTest(type: Test) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } @@ -204,7 +204,7 @@ task smokeTestJar(type: Jar) { task smokeTest(type: Test) { dependsOn smokeTestJar - testClassesDir = sourceSets.smokeTest.output.classesDir + testClassesDirs = sourceSets.smokeTest.output.classesDirs classpath = sourceSets.smokeTest.runtimeClasspath } diff --git a/samples/attachment-demo/build.gradle b/samples/attachment-demo/build.gradle index 6a8491a923..050eb95246 100644 --- a/samples/attachment-demo/build.gradle +++ b/samples/attachment-demo/build.gradle @@ -66,7 +66,7 @@ task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) { } task integrationTest(type: Test, dependsOn: []) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/samples/bank-of-corda-demo/build.gradle b/samples/bank-of-corda-demo/build.gradle index d274de4124..f1485103f6 100644 --- a/samples/bank-of-corda-demo/build.gradle +++ b/samples/bank-of-corda-demo/build.gradle @@ -89,7 +89,7 @@ task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) { } task integrationTest(type: Test, dependsOn: []) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/samples/irs-demo/build.gradle b/samples/irs-demo/build.gradle index 6913d5d0b4..e9f572b106 100644 --- a/samples/irs-demo/build.gradle +++ b/samples/irs-demo/build.gradle @@ -81,7 +81,7 @@ task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) { } task integrationTest(type: Test, dependsOn: []) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/samples/simm-valuation-demo/build.gradle b/samples/simm-valuation-demo/build.gradle index 779f4f6b92..7c39385cb5 100644 --- a/samples/simm-valuation-demo/build.gradle +++ b/samples/simm-valuation-demo/build.gradle @@ -94,7 +94,7 @@ task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) { } task integrationTest(type: Test, dependsOn: []) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/samples/trader-demo/build.gradle b/samples/trader-demo/build.gradle index 89556f6e5b..36d77c5797 100644 --- a/samples/trader-demo/build.gradle +++ b/samples/trader-demo/build.gradle @@ -85,7 +85,7 @@ task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) { } task integrationTest(type: Test, dependsOn: []) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/test-utils/build.gradle b/test-utils/build.gradle index c1ac72f456..e67533db44 100644 --- a/test-utils/build.gradle +++ b/test-utils/build.gradle @@ -56,7 +56,7 @@ dependencies { } task integrationTest(type: Test) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/verifier/build.gradle b/verifier/build.gradle index 41ba1988a5..d07a611ec0 100644 --- a/verifier/build.gradle +++ b/verifier/build.gradle @@ -64,7 +64,7 @@ task standaloneJar(type: Jar) { } task integrationTest(type: Test) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath } diff --git a/webserver/build.gradle b/webserver/build.gradle index d3b9b1c075..a4f729f54a 100644 --- a/webserver/build.gradle +++ b/webserver/build.gradle @@ -62,7 +62,7 @@ dependencies { } task integrationTest(type: Test) { - testClassesDir = sourceSets.integrationTest.output.classesDir + testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath }