buildscript {
  ext {
    springBootVersion = '2.0.2.RELEASE'
  }
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
  }
}

plugins {
    id "com.github.hierynomus.license" version "0.14.0"
    id "com.moowork.node" version "1.1.0"
    id "java"
    id "eclipse"
    id "idea"
}

repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
    jcenter()
}

configurations {
    testPlugins {}
}

dependencies {
}

task wrapper(type: Wrapper) {
    gradleVersion = '4.8.1'
}

apply from: 'gradle/license.gradle'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

task licenseFormatNode(type: com.hierynomus.gradle.license.tasks.LicenseFormat) {
    source = fileTree(dir: "src").include("**/*")
    source = fileTree(dir: "front-end/src").include("**/*")
}
licenseFormat.dependsOn licenseFormatNode

task licenseCheckNode(type: com.hierynomus.gradle.license.tasks.LicenseCheck) {
    source = fileTree(dir: "src").include("**/*")
}

dependencyManagement {
  imports {
    mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Finchley.SR2'
  }
  applyMavenExclusions = false
}

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter', version: springBootVersion
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: springBootVersion
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion
    compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: springBootVersion
    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-zuul', version: springBootVersion
    compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: springMybatisVersion
    compile group: 'mysql', name: 'mysql-connector-java', version: mysqlConnectorVersion
    compile group: 'javax.validation', name: 'validation-api', version: javaxValidationVersion
    compile group: 'io.jsonwebtoken', name: 'jjwt', version: jsonWebTokenVersion
    compile group: 'org.xerial', name: 'sqlite-jdbc', version: sqliteVersion
    compile group: 'com.github.pagehelper', name: 'pagehelper-spring-boot-starter', version: pageHelperVersion
    compile group: 'org.mockito', name: 'mockito-core', version: mockitoVersion
    compile group: 'com.google.guava', name: 'guava', version: guavaVersion
    compile group: 'com.google.code.gson', name: 'gson', version: gsonVersion
    compile group: 'org.apache.pulsar', name: 'pulsar-common', version: pulsarVersion
    compile group: 'io.springfox', name: 'springfox-swagger2', version: swagger2Version
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: swaggeruiVersion
    compile group: 'org.powermock', name: 'powermock-api-mockito', version: apiMockitoVersion
    compile group: 'org.powermock', name: 'powermock-module-junit4', version: mockitoJunit4Version
    compileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVersion
}
