apply plugin: 'kotlin'
// Java Persistence API support: create no-arg constructor
// see: http://stackoverflow.com/questions/32038177/kotlin-with-jpa-default-constructor-hell
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.cordapp'
apply plugin: 'com.jfrog.artifactory'

description 'Corda finance modules'

sourceSets {
    integrationTest {
        kotlin {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integration-test/kotlin')
        }
        resources {
            srcDir file('src/integration-test/resources')
        }
    }
}

dependencies {
    // Note the :finance module is a CorDapp in its own right
    // and CorDapps using :finance features should use 'cordapp' not 'compile' linkage.
    cordaCompile project(':core')
    cordaCompile project(':confidential-identities')

    // TODO Remove this once we have app configs
    compile "com.typesafe:config:$typesafe_config_version"

    // For JSON
    compile "com.fasterxml.jackson.core:jackson-databind:${jackson_version}"

    testCompile project(':test-utils')
    testCompile project(path: ':core', configuration: 'testArtifacts')
    testCompile "junit:junit:$junit_version"

    // AssertJ: for fluent assertions for testing
    testCompile "org.assertj:assertj-core:$assertj_version"
}

configurations {
    testArtifacts.extendsFrom testRuntime
    integrationTestCompile.extendsFrom testCompile
    integrationTestRuntime.extendsFrom testRuntime
}

task testJar(type: Jar) {
    classifier "tests"
    from sourceSets.test.output
}

task integrationTest(type: Test, dependsOn: []) {
    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
}

artifacts {
    testArtifacts testJar
}

jar {
    baseName 'corda-finance'
    exclude "META-INF/*.DSA"
    exclude "META-INF/*.RSA"
    exclude "META-INF/*.SF"
    exclude "META-INF/*.MF"
    exclude "META-INF/LICENSE"
    exclude "META-INF/NOTICE"

    manifest {
        attributes(
                "Manifest-Version": "1.0",
                "Specification-Title": description,
                "Specification-Version": version,
                "Specification-Vendor": "Corda Open Source",
                "Implementation-Title": "$group.$baseName",
        )
    }
}

cordapp {
    info {
        name "net/corda/finance"
        vendor "Corda Open Source"
        targetPlatformVersion corda_platform_version.toInteger()
        minimumPlatformVersion 1
    }
}

publish {
    name jar.baseName
}