plugins {
    id 'org.jetbrains.kotlin.jvm'
    id 'net.corda.plugins.publish-utils'
    id 'com.jfrog.artifactory'
    id 'java-library'
    id 'idea'
}

// The DJVM only supports Java 8 byte-code, so the tests must
// be compiled for Java 8. The main artifact is only compiled
// for Java 8 because it belongs to "Open Core".
apply from: "${rootProject.projectDir}/java8.gradle"

description 'Serialization support for the DJVM'

configurations {
    sandboxTesting {
        canBeConsumed = false
    }
    jdkRt {
        canBeConsumed = false
    }
}

dependencies {
    api project(':core')
    api project(':serialization')
    api "net.corda.djvm:corda-djvm:$djvm_version"
    api 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation(project(':serialization-djvm:deserializers')) {
        transitive = false
    }

    testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_jupiter_version"
    testImplementation "org.junit.jupiter:junit-jupiter-params:$junit_jupiter_version"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_jupiter_version"

    // Test utilities
    testImplementation "org.assertj:assertj-core:$assertj_version"
    testRuntimeOnly "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version"
    jdkRt "net.corda:deterministic-rt:$deterministic_rt_version"

    // The DJVM will need this classpath to run the unit tests.
    sandboxTesting files(sourceSets.getByName("test").output)
    sandboxTesting project(':serialization-djvm:deserializers')
    sandboxTesting project(path: ':serialization-deterministic', configuration: 'deterministicArtifacts')
    sandboxTesting "org.slf4j:slf4j-nop:$slf4j_version"
}

jar {
    archiveBaseName = 'corda-serialization-djvm'
    archiveClassifier = ''
    manifest {
        attributes('Automatic-Module-Name': 'net.corda.serialization.djvm')
        attributes('Sealed': true)
    }
}

tasks.withType(Javadoc).configureEach {
    // We have no public or protected Java classes to document.
    enabled = false
}

tasks.withType(Test).configureEach {
    useJUnitPlatform()
    systemProperty 'deterministic-rt.path', configurations.jdkRt.asPath
    systemProperty 'sandbox-libraries.path', configurations.sandboxTesting.asPath

    // Configure the host timezone to match the DJVM's.
    systemProperty 'user.timezone', 'UTC'
}

publish {
    name jar.archiveBaseName
}

idea {
    module {
        downloadJavadoc = true
        downloadSources = true
    }
}