buildscript {

    repositories {
        jcenter()
    }

    dependencies {
        classpath ("io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE")
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.1.RELEASE")
    }
}

plugins {
    id 'com.github.hierynomus.license' version '0.13.1'
}

group 'org.apache.fineract.cn'
version '0.1.0-BUILD-SNAPSHOT'

ext.versions = [
        frameworkservicestarter : '0.1.0-BUILD-SNAPSHOT',
        mifosidentity           : '0.1.0-BUILD-SNAPSHOT',
        mifosprovisioner        : '0.1.0-BUILD-SNAPSHOT',
        mifosrhythm             : '0.1.0-BUILD-SNAPSHOT',
        mifosoffice             : '0.1.0-BUILD-SNAPSHOT',
        mifoscustomer           : '0.1.0-BUILD-SNAPSHOT',
        mifosaccounting         : '0.1.0-BUILD-SNAPSHOT',
        mifosportfolio          : '0.1.0-BUILD-SNAPSHOT',
        mifosdeposit            : '0.1.0-BUILD-SNAPSHOT',
        mifosteller             : '0.1.0-BUILD-SNAPSHOT',
        mifosreporting          : '0.1.0-BUILD-SNAPSHOT',
        kuelapcheques           : '0.1.0-BUILD-SNAPSHOT',
        mifospayroll            : '0.1.0-BUILD-SNAPSHOT',
        frameworkapi            : '0.1.0-BUILD-SNAPSHOT',
        frameworklang           : '0.1.0-BUILD-SNAPSHOT',
        frameworktest           : '0.1.0-BUILD-SNAPSHOT',
        frameworkanubis         : '0.1.0-BUILD-SNAPSHOT',
        defaultsetup            : '0.1.0-BUILD-SNAPSHOT',
        validator               : '5.3.0.Final'
]

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'spring-boot'
apply plugin: 'maven-publish'

tasks.withType(JavaCompile) {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

repositories {
    jcenter()
    mavenLocal()
}

dependencyManagement {
    imports {
        mavenBom 'io.spring.platform:platform-bom:Athens-RELEASE'
        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Camden.SR1'
    }
}

// override certain dependency provided by Spring platform using newer releases
ext['cassandra.version'] = '3.6'
ext['cassandra-driver.version'] = '3.1.2'
ext['activemq.version'] = '5.13.2'
ext['spring-data-releasetrain.version'] = 'Gosling-SR2A'

dependencies {
    compile(
            [group: 'com.google.code.findbugs', name: 'jsr305'],
            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka-server'],
            [group: 'org.apache.fineract.cn.office', name: 'api', version: versions.mifosoffice],
            [group: 'org.apache.fineract.cn.provisioner', name: 'api', version: versions.mifosprovisioner],
            [group: 'org.apache.fineract.cn.identity', name: 'api', version: versions.mifosidentity],
            [group: 'org.apache.fineract.cn.rhythm', name: 'api', version: versions.mifosrhythm],
            [group: 'org.apache.fineract.cn.rhythm', name: 'spi', version: versions.mifosrhythm],

            [group: 'org.apache.fineract.cn.customer', name: 'api', version: versions.mifoscustomer],
            [group: 'org.apache.fineract.cn.accounting', name: 'api', version: versions.mifosaccounting],
            [group: 'org.apache.fineract.cn.accounting', name: 'importer', version: versions.mifosaccounting],
            [group: 'org.apache.fineract.cn.portfolio', name: 'api', version: versions.mifosportfolio],
            [group: 'org.apache.fineract.cn.deposit-account-management', name: 'api', version: versions.mifosdeposit],
            [group: 'org.apache.fineract.cn.teller', name: 'api', version: versions.mifosteller],
            [group: 'org.apache.fineract.cn.reporting', name: 'api', version: versions.mifosreporting],
            [group: 'org.apache.fineract.cn.cheques', name: 'api', version: versions.kuelapcheques],
            [group: 'org.apache.fineract.cn.payroll', name: 'api', version: versions.mifospayroll],

            [group: 'org.apache.fineract.cn.anubis', name: 'api', version: versions.frameworkanubis],
            [group: 'org.apache.fineract.cn.anubis', name: 'test', version: versions.frameworkanubis],
            [group: 'org.apache.fineract.cn', name: 'api', version: versions.frameworkapi],
            [group: 'org.apache.fineract.cn', name: 'test', version: versions.frameworktest],
            [group: 'org.apache.fineract.cn', name: 'lang', version: versions.frameworklang],
            [group: 'org.apache.fineract.cn', name: 'service-starter', version: versions.frameworkservicestarter],
            [group: 'org.apache.fineract.cn.default-setup', name: 'accounting', version: versions.defaultsetup],
            [group: 'org.springframework.boot', name: 'spring-boot-starter-test'],
            [group: 'org.eclipse.aether', name: 'aether-api', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-spi', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-util', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-impl', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-connector-basic', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-transport-file', version: '1.1.0'],
            [group: 'org.eclipse.aether', name: 'aether-transport-http', version: '1.1.0'],
            [group: 'org.apache.maven', name: 'maven-aether-provider', version: '3.1.0'],
            [group: 'org.springframework.boot', name: 'spring-boot-starter-test']
    )
}

publishToMavenLocal.dependsOn bootRepackage

license {
    header rootProject.file('HEADER')
    strictCheck true
    mapping {
        java = 'SLASHSTAR_STYLE'
        xml = 'XML_STYLE'
        yml = 'SCRIPT_STYLE'
        yaml = 'SCRIPT_STYLE'
    }
}
