plugins {
    id 'java'
    id 'org.springframework.boot' version '2.1.6.RELEASE' apply false
    id 'org.jetbrains.kotlin.jvm' version '1.3.31'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.3.31'
    id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31' apply false
    id "com.palantir.git-version" version "0.12.0-rc2"
    id 'com.palantir.docker' version '0.22.1' apply false
}


allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
    ext {
        set('junit_jupiter_version', "5.5.2")
        set("junit_platform_version", "1.5.2")
        set("mockitoVersion", "3.1.0")
    }

    apply plugin: 'java'
    apply plugin: 'io.spring.dependency-management'

    group = 'com.supwisdom'

    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8

    compileKotlin {
        kotlinOptions {
            freeCompilerArgs = ['-Xjsr305=strict']
            jvmTarget = jdkVersion
        }
    }

    compileTestKotlin {
        kotlinOptions {
            freeCompilerArgs = ['-Xjsr305=strict']
            jvmTarget = jdkVersion
        }
    }

    version = '1'
    ext {
        details = versionDetails()
        buildVersion = gitVersion()
    }
}


subprojects {

    ext {
        set('springCloudVersion', "Hoxton.RELEASE")
    }

    dependencies {
        ext {
            slf4jVersion = '1.7.26'
            beanutilsVersion = '1.9.3'
            codecVersion = '1.13'
            lang3Version = '3.9'
            commonCodecVersion = '1.12'
            lombokVersion = '1.18.8'
            javaELVersion = '3.0.0'
            shedlockVersion = '2.5.0'
            jose4jVersion = '0.6.5'
            jcabiManifestsVersion = '1.1'
            kotlnLogVersion = '1.6.26'
            slf4jVersion = '1.7.26'
            gsonVersion = '2.8.5'
            dbcpVersion = '1.4'
            log4jVersion = '1.2.17'
            alibabFastjsonVerison = '1.2.60'
            beanutilsVersion = '1.9.3'
            alipaySDKVersion = '3.7.110.ALL'
            lombokVersion = '1.18.8'
            resetAssuredVersion = '3.3.0'
            hamcrestVersion = '2.1'
            mockkVersion = '1.9.3'
            commonNetVersion = '3.6'
            kaptchaVersion = '2.3.2'
            jerseyClientVersion = '1.19'
            javaxWSRSVersion = '2.1.1'
            dom4jVersion = '2.1.1'
            springSocialVersion = '1.1.6.RELEASE'
            springKafkaVersion = '2.2.8.RELEASE'
            postgresVersion = '42.2.5'
        }
        implementation "org.jetbrains.kotlin:kotlin-reflect"
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

        implementation "org.springframework.boot:spring-boot-starter-data-jpa"
        implementation "org.springframework.boot:spring-boot-starter-data-redis"
        implementation "org.springframework.boot:spring-boot-starter-validation"

        implementation "javax.validation:validation-api"
        implementation "com.jcabi:jcabi-manifests:${jcabiManifestsVersion}"
        implementation "org.slf4j:slf4j-parent:${slf4jVersion}"
        implementation "org.slf4j:slf4j-api:${slf4jVersion}"
        implementation "org.postgresql:postgresql:${postgresVersion}"
        implementation "io.github.microutils:kotlin-logging:${kotlnLogVersion}"
        implementation "org.slf4j:slf4j-parent:${slf4jVersion}"
        implementation "com.google.code.gson:gson:${gsonVersion}"
        implementation "commons-dbcp:commons-dbcp:${dbcpVersion}"
        implementation "commons-codec:commons-codec:${commonCodecVersion}"
        implementation "log4j:log4j:${log4jVersion}"
        implementation "com.alibaba:fastjson:${alibabFastjsonVerison}"
        implementation "com.fasterxml.jackson.module:jackson-module-kotlin"


        annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
        annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
        compileOnly "org.projectlombok:lombok:${lombokVersion}"

        //    implementation "javax.el:javax.el-api:${javaELVersion}"
        //    implementation "javax.servlet:javax.servlet-api:4.0.1"
//        testImplementation 'org.springframework:spring-test'
//        testImplementation 'org.springframework.boot:spring-boot-test'
//    implementation "javax.servlet:jstl:1.2"
//    implementation "taglibs:standard:1.1.2"
        testImplementation "org.springframework.boot:spring-boot-starter-test"
        testImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}"
        testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_version}"
        testRuntimeOnly "org.junit.platform:junit-platform-launcher:${junit_platform_version}"
        testImplementation "io.mockk:mockk:${mockkVersion}"
        testImplementation "org.hamcrest:hamcrest:${hamcrestVersion}"
        testImplementation "io.rest-assured:rest-assured:${resetAssuredVersion}"
        testImplementation "io.rest-assured:spring-mock-mvc:${resetAssuredVersion}"
    }

    test {
        useJUnitPlatform()
        testLogging {
            events "passed", "skipped", "failed"
        }
    }

    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }
}


