From 484cf75420d5cb1ce7e881f9fbd6033fa69ff813 Mon Sep 17 00:00:00 2001 From: Clinton Date: Mon, 9 Oct 2017 20:08:08 +0100 Subject: [PATCH] CORDA-686 - Split Cordapp gradle plugin from cordformation (#1817) Added CorDapp gradle plugin written in Kotlin and bumped the version of gradle plugins to 2.0.0 to reflect that this backwards incompatible change is a part of the on going stabilisation of the Corda gradle plugin suite. --- .idea/compiler.xml | 4 + build.gradle | 21 ++--- confidential-identities/build.gradle | 5 +- constants.properties | 2 +- docs/source/changelog.rst | 4 + docs/source/cordapp-build-systems.rst | 6 +- docs/source/example-code/build.gradle | 13 ++-- finance/build.gradle | 2 +- gradle-plugins/build.gradle | 4 +- gradle-plugins/cordapp/README.md | 10 +++ gradle-plugins/cordapp/build.gradle | 18 +++++ .../kotlin/net/corda/plugins/CordappPlugin.kt | 76 +++++++++++++++++++ .../main/kotlin/net/corda/plugins/Utils.kt | 17 +++++ .../net.corda.plugins.cordapp.properties | 1 + gradle-plugins/cordformation/build.gradle | 7 +- .../net/corda/plugins/Cordformation.groovy | 62 +-------------- gradle-plugins/settings.gradle | 1 + samples/attachment-demo/build.gradle | 1 + samples/bank-of-corda-demo/build.gradle | 1 + samples/irs-demo/build.gradle | 1 + samples/notary-demo/build.gradle | 1 + samples/simm-valuation-demo/build.gradle | 1 + samples/trader-demo/build.gradle | 1 + 23 files changed, 167 insertions(+), 92 deletions(-) create mode 100644 gradle-plugins/cordapp/README.md create mode 100644 gradle-plugins/cordapp/build.gradle create mode 100644 gradle-plugins/cordapp/src/main/kotlin/net/corda/plugins/CordappPlugin.kt create mode 100644 gradle-plugins/cordapp/src/main/kotlin/net/corda/plugins/Utils.kt create mode 100644 gradle-plugins/cordapp/src/main/resources/META-INF/gradle-plugins/net.corda.plugins.cordapp.properties diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 2d6467076b..3516efcb93 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -2,6 +2,8 @@ + + @@ -19,6 +21,8 @@ + + diff --git a/build.gradle b/build.gradle index bf12b2ff1f..9b19ced795 100644 --- a/build.gradle +++ b/build.gradle @@ -59,6 +59,7 @@ buildscript { classpath "net.corda.plugins:publish-utils:$gradle_plugins_version" classpath "net.corda.plugins:quasar-utils:$gradle_plugins_version" classpath "net.corda.plugins:cordformation:$gradle_plugins_version" + classpath "net.corda.plugins:cordapp:$gradle_plugins_version" classpath "net.corda.plugins:api-scanner:$gradle_plugins_version" classpath 'com.github.ben-manes:gradle-versions-plugin:0.15.0' classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version" @@ -180,21 +181,21 @@ repositories { // Required for building out the fat JAR. dependencies { - cordaCompile project(':node') + compile project(':node') compile "com.google.guava:guava:$guava_version" // Set to corda compile to ensure it exists now deploy nodes no longer relies on build - cordaCompile project(path: ":node:capsule", configuration: 'runtimeArtifacts') - cordaCompile project(path: ":webserver:webcapsule", configuration: 'runtimeArtifacts') + compile project(path: ":node:capsule", configuration: 'runtimeArtifacts') + compile project(path: ":webserver:webcapsule", configuration: 'runtimeArtifacts') // For the buildCordappDependenciesJar task - cordaRuntime project(':client:jfx') - cordaRuntime project(':client:mock') - cordaRuntime project(':client:rpc') - cordaRuntime project(':core') - cordaRuntime project(':confidential-identities') - cordaRuntime project(':finance') - cordaRuntime project(':webserver') + runtime project(':client:jfx') + runtime project(':client:mock') + runtime project(':client:rpc') + runtime project(':core') + runtime project(':confidential-identities') + runtime project(':finance') + runtime project(':webserver') testCompile project(':test-utils') } diff --git a/confidential-identities/build.gradle b/confidential-identities/build.gradle index 04212b3df1..c6a29c0d2e 100644 --- a/confidential-identities/build.gradle +++ b/confidential-identities/build.gradle @@ -6,15 +6,12 @@ apply plugin: 'kotlin' apply plugin: CanonicalizerPlugin apply plugin: 'net.corda.plugins.publish-utils' apply plugin: 'net.corda.plugins.quasar-utils' -apply plugin: 'net.corda.plugins.cordformation' apply plugin: 'com.jfrog.artifactory' description 'Corda Experimental Confidential Identities' dependencies { - // Note the :confidential-identities module is a CorDapp in its own right - // and CorDapps using :confidential-identities features should use 'cordapp' not 'compile' linkage. - cordaCompile project(':core') + compile project(':core') // Quasar, for suspendable fibres. compileOnly "co.paralleluniverse:quasar-core:$quasar_version:jdk8" diff --git a/constants.properties b/constants.properties index dd42901d00..165810dcd2 100644 --- a/constants.properties +++ b/constants.properties @@ -1,4 +1,4 @@ -gradlePluginsVersion=1.1.2 +gradlePluginsVersion=2.0.0 kotlinVersion=1.1.50 guavaVersion=21.0 bouncycastleVersion=1.57 diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 0955876373..c6bffa9c85 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -8,6 +8,10 @@ UNRELEASED ---------- * ``FlowLogic`` now exposes a series of function called ``receiveAll(...)`` allowing to join ``receive(...)`` instructions. +* The ``Cordformation`` gradle plugin has been split into ``cordformation`` and ``cordapp``. The former builds and + deploys nodes for development and testing, the latter turns a project into a cordapp project that generates JARs in + the standard CorDapp format. + * ``Cordform`` and node identity generation * Cordform may not specify a value for ``NetworkMap``, when that happens, during the task execution the following happens: 1. Each node is started and its signed serialized NodeInfo is written to disk in the node base directory. diff --git a/docs/source/cordapp-build-systems.rst b/docs/source/cordapp-build-systems.rst index 398bfa0dc1..016d741bf2 100644 --- a/docs/source/cordapp-build-systems.rst +++ b/docs/source/cordapp-build-systems.rst @@ -16,7 +16,7 @@ For example if your Cordapp depends on ``corda-core``, ``your-other-cordapp`` an JAR will contain all classes and resources from the ``apache-commons`` JAR and its dependencies and *nothing* from the other two JARs. -.. note:: The rest of this tutorial assumes you are using ``gradle``, the ``cordformation`` plugin and have forked from +.. note:: The rest of this tutorial assumes you are using ``gradle``, the ``cordapp`` plugin and have forked from one of our cordapp templates. The ``jar`` task included by default in the cordapp templates will automatically build your JAR in this format as long @@ -40,7 +40,7 @@ To make use of the Corda test facilities you must; .. warning:: Never include ``corda-test-utils`` as a ``compile`` or ``cordaCompile`` dependency. -These configurations work by the ``cordformation`` plugin adding ``cordaCompile`` as a new configuration that ``compile`` +These configurations work by the ``cordapp`` plugin adding ``cordaCompile`` as a new configuration that ``compile`` extends from, and ``cordaRuntime`` which ``runtime`` extends from. Choosing your Corda version @@ -57,7 +57,7 @@ can find the latest published version of both here: https://bintray.com/r3/corda ``corda_gradle_plugins_versions`` are given in the form ``major.minor.patch``. You should use the same ``major`` and ``minor`` versions as the Corda version you are using, and the latest ``patch`` version. A list of all the available -versions can be found here: https://bintray.com/r3/corda/cordformation. +versions can be found here: https://bintray.com/r3/corda/cordapp. In certain cases, you may also wish to build against the unstable Master branch. See :doc:`building-against-master`. diff --git a/docs/source/example-code/build.gradle b/docs/source/example-code/build.gradle index 6709d9fcbe..ae0b57fc34 100644 --- a/docs/source/example-code/build.gradle +++ b/docs/source/example-code/build.gradle @@ -1,6 +1,7 @@ apply plugin: 'kotlin' apply plugin: 'application' apply plugin: 'net.corda.plugins.cordformation' +apply plugin: 'net.corda.plugins.cordapp' apply plugin: 'net.corda.plugins.quasar-utils' repositories { @@ -30,9 +31,9 @@ sourceSets { compileTestJava.dependsOn tasks.getByPath(':node:capsule:buildCordaJAR') dependencies { - cordaCompile project(':core') - cordaCompile project(':client:jfx') - cordaCompile project(':node-driver') + compile project(':core') + compile project(':client:jfx') + compile project(':node-driver') testCompile project(':verifier') testCompile project(':test-utils') @@ -42,11 +43,11 @@ dependencies { exclude group: "junit" } - cordaCompile project(path: ":node:capsule", configuration: 'runtimeArtifacts') - cordaCompile project(path: ":webserver:webcapsule", configuration: 'runtimeArtifacts') + compile project(path: ":node:capsule", configuration: 'runtimeArtifacts') + compile project(path: ":webserver:webcapsule", configuration: 'runtimeArtifacts') // Corda Plugins: dependent flows and services - cordapp project(':finance') + compile project(':finance') } mainClassName = "net.corda.docs.ClientRpcTutorialKt" diff --git a/finance/build.gradle b/finance/build.gradle index 7ded74b45d..3386d94b40 100644 --- a/finance/build.gradle +++ b/finance/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-jpa' apply plugin: CanonicalizerPlugin apply plugin: 'net.corda.plugins.publish-utils' apply plugin: 'net.corda.plugins.quasar-utils' -apply plugin: 'net.corda.plugins.cordformation' +apply plugin: 'net.corda.plugins.cordapp' apply plugin: 'com.jfrog.artifactory' description 'Corda finance modules' diff --git a/gradle-plugins/build.gradle b/gradle-plugins/build.gradle index acfdbb2b05..88169c215c 100644 --- a/gradle-plugins/build.gradle +++ b/gradle-plugins/build.gradle @@ -10,6 +10,7 @@ buildscript { ext.gradle_plugins_version = constants.getProperty("gradlePluginsVersion") ext.bouncycastle_version = constants.getProperty("bouncycastleVersion") ext.typesafe_config_version = constants.getProperty("typesafeConfigVersion") + ext.kotlin_version = constants.getProperty("kotlinVersion") repositories { mavenLocal() @@ -19,6 +20,7 @@ buildscript { dependencies { classpath "net.corda.plugins:publish-utils:$gradle_plugins_version" classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -39,7 +41,7 @@ bintrayConfig { projectUrl = 'https://github.com/corda/corda' gpgSign = true gpgPassphrase = System.getenv('CORDA_BINTRAY_GPG_PASSPHRASE') - publications = ['cordformation', 'quasar-utils', 'cordform-common', 'api-scanner'] + publications = ['cordformation', 'quasar-utils', 'cordform-common', 'api-scanner', 'cordapp'] license { name = 'Apache-2.0' url = 'https://www.apache.org/licenses/LICENSE-2.0' diff --git a/gradle-plugins/cordapp/README.md b/gradle-plugins/cordapp/README.md new file mode 100644 index 0000000000..6b0cebe690 --- /dev/null +++ b/gradle-plugins/cordapp/README.md @@ -0,0 +1,10 @@ +# Cordapp Gradle Plugin + +## Purpose + +To transform any project this plugin is applied to into a cordapp project that generates a cordapp JAR. + +## Effects + +Will modify the default JAR task to create a CorDapp format JAR instead [see here](https://docs.corda.net/cordapp-build-systems.html) +for more information. \ No newline at end of file diff --git a/gradle-plugins/cordapp/build.gradle b/gradle-plugins/cordapp/build.gradle new file mode 100644 index 0000000000..dc284faca1 --- /dev/null +++ b/gradle-plugins/cordapp/build.gradle @@ -0,0 +1,18 @@ +apply plugin: 'kotlin' +apply plugin: 'net.corda.plugins.publish-utils' + +description 'Turns a project into a cordapp project that produces cordapp fat JARs' + +repositories { + mavenCentral() + jcenter() +} + +dependencies { + compile gradleApi() + compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" +} + +publish { + name project.name +} \ No newline at end of file diff --git a/gradle-plugins/cordapp/src/main/kotlin/net/corda/plugins/CordappPlugin.kt b/gradle-plugins/cordapp/src/main/kotlin/net/corda/plugins/CordappPlugin.kt new file mode 100644 index 0000000000..ce65e18e5f --- /dev/null +++ b/gradle-plugins/cordapp/src/main/kotlin/net/corda/plugins/CordappPlugin.kt @@ -0,0 +1,76 @@ +package net.corda.plugins + +import org.gradle.api.* +import org.gradle.api.artifacts.* +import org.gradle.jvm.tasks.Jar +import java.io.File + +/** + * The Cordapp plugin will turn a project into a cordapp project which builds cordapp JARs with the correct format + * and with the information needed to run on Corda. + */ +class CordappPlugin : Plugin { + override fun apply(project: Project) { + project.logger.info("Configuring ${project.name} as a cordapp") + + Utils.createCompileConfiguration("cordapp", project) + Utils.createCompileConfiguration("cordaCompile", project) + + val configuration: Configuration = project.configurations.create("cordaRuntime") + configuration.isTransitive = false + project.configurations.single { it.name == "runtime" }.extendsFrom(configuration) + + configureCordappJar(project) + } + + /** + * Configures this project's JAR as a Cordapp JAR + */ + private fun configureCordappJar(project: Project) { + // Note: project.afterEvaluate did not have full dependency resolution completed, hence a task is used instead + val task = project.task("configureCordappFatJar") + val jarTask = project.tasks.single { it.name == "jar" } as Jar + task.doLast { + jarTask.from(getDirectNonCordaDependencies(project).map { project.zipTree(it)}).apply { + exclude("META-INF/*.SF") + exclude("META-INF/*.DSA") + exclude("META-INF/*.RSA") + } + } + jarTask.dependsOn(task) + } + + private fun getDirectNonCordaDependencies(project: Project): Set { + project.logger.info("Finding direct non-corda dependencies for inclusion in CorDapp JAR") + val excludes = listOf( + mapOf("group" to "org.jetbrains.kotlin", "name" to "kotlin-stdlib"), + mapOf("group" to "org.jetbrains.kotlin", "name" to "kotlin-stdlib-jre8"), + mapOf("group" to "org.jetbrains.kotlin", "name" to "kotlin-reflect"), + mapOf("group" to "co.paralleluniverse", "name" to "quasar-core") + ) + + val runtimeConfiguration = project.configuration("runtime") + // The direct dependencies of this project + val excludeDeps = project.configuration("cordapp").allDependencies + + project.configuration("cordaCompile").allDependencies + + project.configuration("cordaRuntime").allDependencies + val directDeps = runtimeConfiguration.allDependencies - excludeDeps + // We want to filter out anything Corda related or provided by Corda, like kotlin-stdlib and quasar + val filteredDeps = directDeps.filter { dep -> + excludes.none { exclude -> (exclude["group"] == dep.group) && (exclude["name"] == dep.name) } + } + filteredDeps.forEach { + // net.corda or com.r3.corda.enterprise may be a core dependency which shouldn't be included in this cordapp so give a warning + if ((it.group.startsWith("net.corda.") || it.group.startsWith("com.r3.corda.enterprise."))) { + project.logger.warn("You appear to have included a Corda platform component ($it) using a 'compile' or 'runtime' dependency." + + "This can cause node stability problems. Please use 'corda' instead." + + "See http://docs.corda.net/cordapp-build-systems.html") + } else { + project.logger.info("Including dependency in CorDapp JAR: $it") + } + } + return filteredDeps.map { runtimeConfiguration.files(it) }.flatten().toSet() + } + + private fun Project.configuration(name: String): Configuration = configurations.single { it.name == name } +} diff --git a/gradle-plugins/cordapp/src/main/kotlin/net/corda/plugins/Utils.kt b/gradle-plugins/cordapp/src/main/kotlin/net/corda/plugins/Utils.kt new file mode 100644 index 0000000000..33e552ca7d --- /dev/null +++ b/gradle-plugins/cordapp/src/main/kotlin/net/corda/plugins/Utils.kt @@ -0,0 +1,17 @@ +package net.corda.plugins + +import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration + +class Utils { + companion object { + @JvmStatic + fun createCompileConfiguration(name: String, project: Project) { + if(!project.configurations.any { it.name == name }) { + val configuration = project.configurations.create(name) + configuration.isTransitive = false + project.configurations.single { it.name == "compile" }.extendsFrom(configuration) + } + } + } +} \ No newline at end of file diff --git a/gradle-plugins/cordapp/src/main/resources/META-INF/gradle-plugins/net.corda.plugins.cordapp.properties b/gradle-plugins/cordapp/src/main/resources/META-INF/gradle-plugins/net.corda.plugins.cordapp.properties new file mode 100644 index 0000000000..90871e27c8 --- /dev/null +++ b/gradle-plugins/cordapp/src/main/resources/META-INF/gradle-plugins/net.corda.plugins.cordapp.properties @@ -0,0 +1 @@ +implementation-class=net.corda.plugins.CordappPlugin diff --git a/gradle-plugins/cordformation/build.gradle b/gradle-plugins/cordformation/build.gradle index 414aa34b30..828647d434 100644 --- a/gradle-plugins/cordformation/build.gradle +++ b/gradle-plugins/cordformation/build.gradle @@ -1,10 +1,4 @@ buildscript { - // For sharing constants between builds - Properties constants = new Properties() - file("$projectDir/../../constants.properties").withInputStream { constants.load(it) } - - ext.kotlin_version = constants.getProperty("kotlinVersion") - repositories { mavenCentral() } @@ -41,6 +35,7 @@ sourceSets { dependencies { compile gradleApi() compile localGroovy() + compile project(":cordapp") noderunner "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" diff --git a/gradle-plugins/cordformation/src/main/groovy/net/corda/plugins/Cordformation.groovy b/gradle-plugins/cordformation/src/main/groovy/net/corda/plugins/Cordformation.groovy index 2fe24a7933..eeb4443801 100644 --- a/gradle-plugins/cordformation/src/main/groovy/net/corda/plugins/Cordformation.groovy +++ b/gradle-plugins/cordformation/src/main/groovy/net/corda/plugins/Cordformation.groovy @@ -9,40 +9,6 @@ import org.gradle.api.artifacts.Configuration * testing, and debugging. It will prepopulate several fields in the configuration and create a simple node runner. */ class Cordformation implements Plugin { - void apply(Project project) { - createCompileConfiguration("cordapp", project) - createCompileConfiguration("cordaCompile", project) - - Configuration configuration = project.configurations.create("cordaRuntime") - configuration.transitive = false - project.configurations.runtime.extendsFrom configuration - - configureCordappJar(project) - } - - private void createCompileConfiguration(String name, Project project) { - Configuration configuration = project.configurations.create(name) - configuration.transitive = false - project.configurations.compile.extendsFrom configuration - } - - /** - * Configures this project's JAR as a Cordapp JAR - */ - private void configureCordappJar(Project project) { - // Note: project.afterEvaluate did not have full dependency resolution completed, hence a task is used instead - def task = project.task('configureCordappFatJar') { - doLast { - project.tasks.jar.from(getDirectNonCordaDependencies(project).collect { project.zipTree(it)}) { - exclude "META-INF/*.SF" - exclude "META-INF/*.DSA" - exclude "META-INF/*.RSA" - } - } - } - project.tasks.jar.dependsOn task - } - /** * Gets a resource file from this plugin's JAR file. * @@ -56,31 +22,7 @@ class Cordformation implements Plugin { }, filePathInJar).asFile() } - private static Set getDirectNonCordaDependencies(Project project) { - def excludes = [ - [group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib'], - [group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib-jre8'], - [group: 'org.jetbrains.kotlin', name: 'kotlin-reflect'], - [group: 'co.paralleluniverse', name: 'quasar-core'] - ] - - project.with { - // The direct dependencies of this project - def excludeDeps = configurations.cordapp.allDependencies + configurations.cordaCompile.allDependencies + configurations.cordaRuntime.allDependencies - def directDeps = configurations.runtime.allDependencies - excludeDeps - // We want to filter out anything Corda related or provided by Corda, like kotlin-stdlib and quasar - def filteredDeps = directDeps.findAll { excludes.collect { exclude -> (exclude.group == it.group) && (exclude.name == it.name) }.findAll { it }.isEmpty() } - filteredDeps.each { - // net.corda or com.r3.corda.enterprise may be a core dependency which shouldn't be included in this cordapp so give a warning - if (it.group && (it.group.startsWith('net.corda.') || it.group.startsWith('com.r3.corda.enterprise.'))) { - logger.warn("You appear to have included a Corda platform component ($it) using a 'compile' or 'runtime' dependency." + - "This can cause node stability problems. Please use 'corda' instead." + - "See http://docs.corda.net/cordapp-build-systems.html") - } else { - logger.info("Including dependency in CorDapp JAR: $it") - } - } - return filteredDeps.collect { configurations.runtime.files it }.flatten().toSet() - } + void apply(Project project) { + Utils.createCompileConfiguration("cordapp", project) } } diff --git a/gradle-plugins/settings.gradle b/gradle-plugins/settings.gradle index 64349cda39..995cd8c899 100644 --- a/gradle-plugins/settings.gradle +++ b/gradle-plugins/settings.gradle @@ -4,3 +4,4 @@ include 'quasar-utils' include 'cordformation' include 'cordform-common' include 'api-scanner' +include 'cordapp' \ No newline at end of file diff --git a/samples/attachment-demo/build.gradle b/samples/attachment-demo/build.gradle index 379fcf6af8..5fa296e26d 100644 --- a/samples/attachment-demo/build.gradle +++ b/samples/attachment-demo/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'net.corda.plugins.quasar-utils' apply plugin: 'net.corda.plugins.publish-utils' +apply plugin: 'net.corda.plugins.cordapp' apply plugin: 'net.corda.plugins.cordformation' apply plugin: 'maven-publish' diff --git a/samples/bank-of-corda-demo/build.gradle b/samples/bank-of-corda-demo/build.gradle index c673a10da1..043ead8c0b 100644 --- a/samples/bank-of-corda-demo/build.gradle +++ b/samples/bank-of-corda-demo/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'net.corda.plugins.quasar-utils' apply plugin: 'net.corda.plugins.publish-utils' +apply plugin: 'net.corda.plugins.cordapp' apply plugin: 'net.corda.plugins.cordformation' apply plugin: 'maven-publish' diff --git a/samples/irs-demo/build.gradle b/samples/irs-demo/build.gradle index bc482b26d7..7d1dccfb8d 100644 --- a/samples/irs-demo/build.gradle +++ b/samples/irs-demo/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'net.corda.plugins.quasar-utils' apply plugin: 'net.corda.plugins.publish-utils' +apply plugin: 'net.corda.plugins.cordapp' apply plugin: 'net.corda.plugins.cordformation' apply plugin: 'maven-publish' apply plugin: 'application' diff --git a/samples/notary-demo/build.gradle b/samples/notary-demo/build.gradle index fbbaa6a9a7..a13ab70ad8 100644 --- a/samples/notary-demo/build.gradle +++ b/samples/notary-demo/build.gradle @@ -5,6 +5,7 @@ apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'net.corda.plugins.quasar-utils' apply plugin: 'net.corda.plugins.publish-utils' +apply plugin: 'net.corda.plugins.cordapp' apply plugin: 'net.corda.plugins.cordformation' apply plugin: 'maven-publish' diff --git a/samples/simm-valuation-demo/build.gradle b/samples/simm-valuation-demo/build.gradle index ffce26eb4f..ec982a20a7 100644 --- a/samples/simm-valuation-demo/build.gradle +++ b/samples/simm-valuation-demo/build.gradle @@ -7,6 +7,7 @@ apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'net.corda.plugins.quasar-utils' apply plugin: 'net.corda.plugins.publish-utils' +apply plugin: 'net.corda.plugins.cordapp' apply plugin: 'net.corda.plugins.cordformation' apply plugin: 'maven-publish' diff --git a/samples/trader-demo/build.gradle b/samples/trader-demo/build.gradle index 5d6f861e8a..5d0a57663e 100644 --- a/samples/trader-demo/build.gradle +++ b/samples/trader-demo/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'kotlin' apply plugin: 'idea' apply plugin: 'net.corda.plugins.quasar-utils' apply plugin: 'net.corda.plugins.publish-utils' +apply plugin: 'net.corda.plugins.cordapp' apply plugin: 'net.corda.plugins.cordformation' apply plugin: 'maven-publish'