group 'io.mifos.portfolio'
version '0.1.0-BUILD-SNAPSHOT'

ext.versions = [
        frameworkanubis     : '0.1.0-BUILD-SNAPSHOT',
        frameworkapi        : '0.1.0-BUILD-SNAPSHOT',
        frameworklang       : '0.1.0-BUILD-SNAPSHOT',
        frameworkmariadb    : '0.1.0-BUILD-SNAPSHOT',
        frameworkcassandra  : '0.1.0-BUILD-SNAPSHOT',
        frameworkcommand    : '0.1.0-BUILD-SNAPSHOT',
        frameworktest       : '0.1.0-BUILD-SNAPSHOT',
        frameworkasync      : '0.1.0-BUILD-SNAPSHOT',
        frameworkaccounting : '0.1.0-BUILD-SNAPSHOT',
        mifosrhythm         : '0.1.0-BUILD-SNAPSHOT',
        mifoscustomer       : '0.1.0-BUILD-SNAPSHOT',
        validator    : '5.3.0.Final',
        javamoneylib : '0.9-SNAPSHOT'
]

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

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']
    )

    testCompile(
            [group: 'org.springframework.boot', name: 'spring-boot-starter-test']
    )
}

jar {
    from sourceSets.main.allSource
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

license {
    header rootProject.file('../HEADER')
    strictCheck true
    mapping {
        java = 'SLASHSTAR_STYLE'
        xml = 'XML_STYLE'
        yml = 'SCRIPT_STYLE'
        yaml = 'SCRIPT_STYLE'
        uxf = 'XML_STYLE'
    }
    ext.year = Calendar.getInstance().get(Calendar.YEAR)
    ext.name = 'Kuelap, Inc'
    skipExistingHeaders true
}
