plugins {
    id 'java'
    id 'org.springframework.boot'
    id 'org.jetbrains.kotlin.jvm'
    id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31'
    id 'org.jetbrains.kotlin.plugin.spring'
    id "com.palantir.git-version"
}

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

def version = gitVersion()
def details = versionDetails()

group = rootProject.group
version = '1'
sourceCompatibility = jdkVersion
def startClass = 'com.supwisdom.oauth.OAuthApplication'

println("Build version: $version")

bootJar {
    mainClassName = startClass
    manifest {
        attributes('oauth-Version': version)
    }
}

jar {
    baseName = 'oauth'
}

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}



dependencies {
    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-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-cache'
    implementation 'org.springframework.boot:spring-boot-autoconfigure'
    implementation 'org.springframework.security:spring-security-oauth2-jose'
    implementation 'org.springframework.security:spring-security-oauth2-client'
    implementation 'org.springframework.security:spring-security-oauth2-jose'
    implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.5.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.session:spring-session-data-redis'
    implementation 'org.springframework.boot:spring-boot-starter-cache'
    implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'commons-codec:commons-codec:1.12'
    implementation 'org.apache.commons:commons-lang3:3.9'
    implementation 'net.javacrumbs.shedlock:shedlock-spring:2.5.0'
    implementation 'net.javacrumbs.shedlock:shedlock-provider-redis-spring:2.5.0'

    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'

    implementation 'org.postgresql:postgresql:42.2.5'
    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
    implementation 'com.jcabi:jcabi-manifests:1.1'
    implementation 'org.bitbucket.b_c:jose4j:0.6.5'
    implementation 'io.github.microutils:kotlin-logging:1.6.26'
    implementation 'org.slf4j:slf4j-parent:1.7.26'

    implementation 'commons-dbcp:commons-dbcp:1.4'

    implementation project(':payapi-common')

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.rest-assured:rest-assured:3.3.0'
    testImplementation 'io.rest-assured:spring-mock-mvc:3.3.0'
    testImplementation 'org.hamcrest:hamcrest:2.1'

}

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

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

