buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE'
    }
}

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

apply from: '../shared.gradle'

dependencies {
    compile(
            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-feign'],
            [group: 'io.mifos.core', name: 'api', version: versions.frameworkapi],
            [group: 'org.hibernate', name: 'hibernate-validator', version: versions.validator]
    )

    testCompile(
            [group: 'io.mifos.core', name: 'test', version: versions.frameworktest],
    )
}

publishing {
    publications {
        api(MavenPublication) {
            from components.java
            groupId project.group
            artifactId project.name
            version project.version
        }
    }
}