buildscript {
    ext {
        springBootVersion = '1.4.1.RELEASE'
    }

    repositories {
        jcenter()
    }

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

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

apply from: '../shared.gradle'

apply plugin: 'spring-boot'

springBoot {
    executable = true
    classifier = 'boot'
}

dependencies {
    compile(
            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-config'],
            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka'],
            [group: 'org.springframework.cloud', name: 'spring-cloud-spring-service-connector'],
            [group: 'org.springframework.boot', name: 'spring-boot-starter-jetty'],
            [group: 'io.mifos.portfolio', name: 'api', version: project.version],
            [group: 'io.mifos.rhythm', name: 'spi', version: versions.mifosrhythm],
            [group: 'io.mifos.rhythm', name: 'api', version: versions.mifosrhythm],
            [group: 'io.mifos.accounting', name: 'api', version: versions.frameworkaccounting],
            [group: 'io.mifos.anubis', name: 'library', version: versions.frameworkanubis],
            [group: 'io.mifos.customer', name: 'api', version: versions.mifoscustomer],
            [group: 'com.google.code.gson', name: 'gson'],
            [group: 'io.mifos.core', name: 'api', version: versions.frameworkapi],
            [group: 'io.mifos.core', name: 'lang', version: versions.frameworklang],
            [group: 'io.mifos.core', name: 'async', version: versions.frameworkasync],
            [group: 'io.mifos.core', name: 'cassandra', version: versions.frameworkcassandra],
            [group: 'io.mifos.core', name: 'mariadb', version: versions.frameworkmariadb],
            [group: 'io.mifos.core', name: 'command', version: versions.frameworkcommand],
            [group: 'org.hibernate', name: 'hibernate-validator', version: versions.validator],
            [group: 'org.javamoney.lib', name: 'javamoney-calc', version: versions.javamoneylib],
            [group: 'javax.money', name: 'money-api', version: '1.0.1'],
            [group: 'org.javamoney', name: 'moneta', version: '1.0.1']
    )
}

publishToMavenLocal.dependsOn bootRepackage

publishing {
    publications {
        service(MavenPublication) {
            from components.java
            groupId project.group
            artifactId project.name
            version project.version
        }
        bootService(MavenPublication) {
            // "boot" jar
            artifact ("$buildDir/libs/$project.name-$version-boot.jar")
            groupId project.group
            artifactId ("$project.name-boot")
            version project.version
        }
    }
}
