plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.2.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.3.4.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"
        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}"
        }
    }
}


