import java.nio.charset.StandardCharsets import java.nio.file.Files import org.yaml.snakeyaml.DumperOptions plugins { id 'com.craigburke.client-dependencies' version '1.4.0' id 'org.springframework.boot' version '3.0.4' id 'io.spring.dependency-management' } 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 configurations { demoArtifacts.extendsFrom testRuntimeOnly } dependencies { implementation('org.springframework.boot:spring-boot-starter-web:3.0.4') { exclude module: "spring-boot-starter-logging" exclude module: "logback-classic" } implementation('org.springframework.boot:spring-boot-starter-log4j2') runtimeOnly("org.apache.logging.log4j:log4j-web:$log4j_version") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:$jackson_kotlin_version") implementation project(":client:rpc") implementation project(":client:jackson") implementation project(":finance:workflows") // TODO In the future remove -irs bit from the directory name. Currently it clashes with :finance:workflows (same for contracts). implementation project(":samples:irs-demo:cordapp:workflows-irs") testImplementation project(":test-utils") testImplementation project(path: ":samples:irs-demo:cordapp:workflows-irs", configuration: "demoArtifacts") // JOpt: for command line flags. implementation "net.sf.jopt-simple:jopt-simple:$jopt_simple_version" testImplementation('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', 'bootJar']) { 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: [bootJar]) { 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: [bootJar, 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) }