import java.nio.charset.StandardCharsets import java.nio.file.Files import org.yaml.snakeyaml.DumperOptions buildscript { repositories { mavenCentral() } dependencies { classpath "org.yaml:snakeyaml:1.24" } } plugins { id 'com.craigburke.client-dependencies' version '1.4.0' id 'io.spring.dependency-management' id 'org.springframework.boot' } group = "${parent.group}.irs-demo" dependencyManagement { dependencies { dependency "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version" dependency "org.apache.logging.log4j:log4j-core:$log4j_version" dependency "org.apache.logging.log4j:log4j-api:$log4j_version" } } clientDependencies { registry 'realBower', type:'bower', url:'https://registry.bower.io' realBower { "angular"("1.5.8") "jquery"("^3.0.0") "angular-route"("1.5.8") "lodash"("^4.13.1") "angular-fcsa-number"("^1.5.3") "jquery.maskedinput"("^1.4.1") "requirejs"("^2.2.0") "semantic-ui"("^2.2.2", into: "semantic") } // put the JS dependencies into src directory so it can easily be referenced // from HTML files in webapp frontend, useful for testing/development // Note that this dir is added to .gitignore installDir = 'src/main/resources/static/js/bower_components' } // Spring Boot plugin adds a numerous hardcoded dependencies in the version much lower then Corda expects // causing the problems in runtime. Those can be changed by manipulating above properties // See https://github.com/spring-gradle-plugins/dependency-management-plugin/blob/master/README.md#changing-the-value-of-a-version-property ext['artemis.version'] = artemis_version ext['hibernate.version'] = hibernate_version ext['jackson.version'] = jackson_version apply plugin: 'kotlin' apply plugin: 'kotlin-spring' apply plugin: 'eclipse' apply plugin: 'project-report' apply plugin: 'application' configurations { demoArtifacts.extendsFrom testRuntime } dependencies { compile('org.springframework.boot:spring-boot-starter-web') { exclude module: "spring-boot-starter-logging" exclude module: "logback-classic" } compile('org.springframework.boot:spring-boot-starter-log4j2') runtimeOnly("org.apache.logging.log4j:log4j-web:$log4j_version") compile("com.fasterxml.jackson.module:jackson-module-kotlin:$jackson_version") compile project(":client:rpc") compile project(":client:jackson") compile project(":finance:workflows") // TODO In the future remove -irs bit from the directory name. Currently it clashes with :finance:workflows (same for contracts). compile project(":samples:irs-demo:cordapp:workflows-irs") testCompile project(":test-utils") testCompile project(path: ":samples:irs-demo:cordapp:workflows-irs", configuration: "demoArtifacts") // JOpt: for command line flags. compile "net.sf.jopt-simple:jopt-simple:$jopt_simple_version" testCompile('org.springframework.boot:spring-boot-starter-test') { exclude module: "spring-boot-starter-logging" exclude module: "logback-classic" } } jar { from sourceSets.main.output dependsOn clientInstall archiveClassifier = 'thin' } def docker_dir = file("$project.buildDir/docker") task deployWebapps(type: Copy, dependsOn: ['jar', 'bootRepackage']) { ext.webappDir = file("build/webapps") from(jar.outputs) from("src/test/resources/scripts/") { filter { it .replace('#JAR_PATH#', jar.archiveName) .replace('#DIR#', ext.webappDir.getAbsolutePath()) } } into ext.webappDir } task demoJar(type: Jar) { classifier "test" from sourceSets.test.output } artifacts { demoArtifacts demoJar } task createDockerfile(type: com.bmuschko.gradle.docker.tasks.image.Dockerfile, dependsOn: [bootRepackage]) { destFile = file("$docker_dir/Dockerfile") from 'azul/zulu-openjdk-alpine:8u152' copyFile jar.archiveName, "/opt/irs/web/" workingDir "/opt/irs/web/" defaultCommand "sh", "-c", "java -Dcorda.host=\$CORDA_HOST -jar ${jar.archiveName}" } task prepareDockerDir(type: Copy, dependsOn: [bootRepackage, createDockerfile]) { from jar into docker_dir } task generateDockerCompose(dependsOn: [prepareDockerDir]) { def outFile = new File(project.buildDir, "docker-compose.yml") ext['dockerComposePath'] = outFile doLast { def dockerComposeObject = [ "version": "3", "services": [ "web-a": [ "build": "$docker_dir".toString(), "environment": [ "CORDA_HOST": "bank-a:10003" ], "ports": ["8080"] ], "web-b": [ "build": "$docker_dir".toString(), "environment": [ "CORDA_HOST": "bank-b:10003" ], "ports": ["8080"] ] ] ] def options = new org.yaml.snakeyaml.DumperOptions() options.indent = 2 options.defaultFlowStyle = DumperOptions.FlowStyle.BLOCK def dockerComposeContent = new org.yaml.snakeyaml.Yaml(options).dump(dockerComposeObject) Files.write(outFile.toPath(), dockerComposeContent.getBytes(StandardCharsets.UTF_8)) } outputs.file(outFile) }