apply plugin: 'org.jetbrains.kotlin.jvm' apply plugin: 'net.corda.plugins.cordapp' def javaHome = System.getProperty('java.home') def shrinkJar = file("$buildDir/libs/${project.name}-${project.version}-tiny.jar") import net.corda.plugins.SignJar import proguard.gradle.ProGuardTask import java.security.MessageDigest import java.security.NoSuchAlgorithmException static String sha256(File jarFile) throws FileNotFoundException, NoSuchAlgorithmException { InputStream input = new FileInputStream(jarFile) try { MessageDigest digest = MessageDigest.getInstance("SHA-256") byte[] buffer = new byte[8192] int bytesRead while ((bytesRead = input.read(buffer)) != -1) { digest.update(buffer, 0, bytesRead) } return digest.digest().encodeHex().toString() } finally { input.close() } } cordapp { targetPlatformVersion = corda_platform_version.toInteger() minimumPlatformVersion 1 signing { // Cordapp is signed after the "shrink" task. enabled false } sealing { // Cannot seal JAR because other module also defines classes in the package net.corda.vega.analytics enabled false } contract { name "net/corda/vega/contracts" versionId 1 vendor "R3" licence "Open Source (Apache 2)" } } configurations { shrinkArtifacts } dependencies { // The SIMM demo CorDapp depends upon Cash CorDapp features cordapp project(':finance:contracts') // Corda integration dependencies cordaProvided project(':core') // Cordapp dependencies // Specify your cordapp's dependencies below, including dependent cordapps implementation "com.opengamma.strata:strata-product:$strata_version" implementation "com.opengamma.strata:strata-market:$strata_version" } configurations.cordapp.canBeResolved = true tasks.register('generateDependencies') { dependsOn project(':finance:contracts').tasks.jar def cordappDependencies = file("${sourceSets.main.output.resourcesDir}/META-INF/Cordapp-Dependencies") inputs.files(configurations.cordapp) outputs.files(cordappDependencies) doLast { cordappDependencies.newWriter().withWriter { writer -> configurations.cordapp.forEach { cordapp -> writer << sha256(cordapp) << System.lineSeparator() } } } } processResources.finalizedBy generateDependencies jar.dependsOn generateDependencies jar { // Test CorDapp filters out *-tests.jar. We only want the shrinked jar not this one. archiveClassifier = 'tests' } tasks.register('shrink', ProGuardTask) { injars jar outjars shrinkJar libraryjars "$javaHome/jmods" configurations.runtimeClasspath.forEach { libraryjars it.path, filter: '!META-INF/versions/**' } dontwarn 'afu.org.checkerframework.**' dontwarn 'co.paralleluniverse.**' dontwarn 'org.checkerframework.**' dontwarn 'org.joda.**' dontnote // We need to preserve our CorDapp's own directory structure so that Corda // can find the contract classes. keepdirectories 'net/corda/**' keepattributes '*' dontobfuscate dontoptimize verbose // These are our CorDapp classes, so don't change these. keep 'class net.corda.vega.** { *; }', includedescriptorclasses: true // Until CorDapps are isolated from each other, we need to ensure that the // versions of the classes that this CorDapp needs are still usable by other // CorDapps. Unfortunately, this means that we cannot shrink them as much as // we'd like to. keepclassmembers 'class com.opengamma.strata.** { *; }', includedescriptorclasses: true keepclassmembers 'class com.google.** { *; }', includedescriptorclasses: true keepclassmembers 'class org.joda.** { *; }', includedescriptorclasses: true } tasks.register('sign', SignJar) { inputJars shrink } jar.finalizedBy shrink shrink.finalizedBy sign artifacts { shrinkArtifacts shrinkJar }