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
}

group = 'com.supwisdom'

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'

    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 = gitVersion()
    ext {
        details = versionDetails()
    }
}


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}"
        }
    }
}


