buildscript {
    ext {
        springBootVersion = '1.5.15.RELEASE'
    }
    repositories {
        maven { url 'http://maven.parim.net/nexus/content/groups/public/' }
        maven { url "https://plugins.gradle.org/m2/" }
        mavenCentral()
        maven { url "https://repo.spring.io/plugins-release" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.asciidoctor:asciidoctor-gradle-plugin:1.5.3")
        classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.1"
        classpath('org.apache.commons:commons-lang3:3.5')
        classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.15")
		classpath("org.asciidoctor:asciidoctorj-epub3:1.5.0-alpha.6")
        classpath "io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE"
    }
}

apply plugin: "org.sonarqube"
ext['hibernate.version'] = '5.2.17.Final'
version = '1.10.3'

allprojects {
    group = 'net.parim'
    version = "${version}"
    
    ext.gradleScriptDir = "${rootProject.projectDir}/gradle"
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'java'
    apply plugin: 'war'
    // apply plugin: 'eclipse-wtp' // 仅给特定项目添加
    apply plugin: 'org.springframework.boot'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    // javadoc.options.encoding = "utf-8"
    // javadoc.options.charSet = "utf-8"
    [compileJava,compileTestJava,javadoc]*.options*.encoding = "UTF-8"
    
    configurations {
        providedRuntime
        //jaxDoclet
    }

    repositories {
        mavenLocal()
        maven { url 'http://maven.parim.net/nexus/content/groups/public/' }
        maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'}
        //mavenCentral()
        //jcenter()
        // for springfox snapshot
        // maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
    }
    
    dependencies {
        compile fileTree(dir: 'lib', exclude:'', include: '*.jar')
        
        // jaxDoclet "com.lunatech.jax-doclets:doclets:0.10.0"
        // runtime("org.springframework.boot:spring-boot-devtools")
        compile("log4j:log4j:1.2.17")
    }
    
    /*task generateRestApiDocs(type: Javadoc) {
        source = sourceSets.main.allJava
        destinationDir = reporting.file("rest-api-docs")
        options.docletpath = configurations.jaxDoclet.files.asType(List)
        options.doclet = "com.lunatech.doclets.jax.jaxrs.JAXRSDoclet"
        options.addStringOption("jaxrscontext", "http://localhost:8080/myapp")
        options.encoding = "utf-8"
        options.charSet = "utf-8"
    }*/
    
    
}

subprojects {
    apply from: "${gradleScriptDir}/otm.gradle"

    dependencies {
        
    }
    /*
    sonarqube {
        // String regex = "(.*)/(.*)"
        // String projectKey = project.name.replaceAll(regex, "\$1:\$2")
        String sonarModuleKey = rootProject.group + ':' + rootProject.name + ':' + project.name
    
        properties {
            property "sonar.moduleKey", sonarModuleKey
        }
    }
    */
    sourceSets {
        main {
            java{
                srcDir 'src/main/java'
            }
            resources { 
                srcDir 'src/main/java'
                srcDir 'src/main/resource'
            } 
        }
    }
    javadoc {
        description = "Generates project-level javadoc for use in -javadoc jar"
        //failOnError = false
        options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
        options.author = true
        options.version = true
        options.header = project.name
        //options.links(project.ext.javadocLinks)
        //options.addStringOption('Xdoclint:none', '-quiet') //可能只有jdk1.8才支持
        options.encoding= "UTF-8" 
        options.charSet= "UTF-8"
        

        // suppress warnings due to cross-module @see and @link references;
        // note that global 'api' task does display all warnings.
        logging.captureStandardError LogLevel.INFO
        logging.captureStandardOutput LogLevel.INFO // suppress "## warnings" message
    }
    
    task sourcesJar(type: Jar, dependsOn: classes) {
        classifier = 'sources'
        from sourceSets.main.allSource
        // don't include or exclude anything explicitly by default. See SPR-12085.
    }
    
    task javadocJar(type: Jar) {
        classifier = "javadoc"
        from javadoc
    }
    
    artifacts {
        archives sourcesJar
//        archives javadocJar
    }

    test {
        exclude "**"
    }

    bootRepackage.enabled=false


}

def bussenissProjects() {
    return subprojects.findAll { 
        return it.name != 'common' && it.name != 'common-test'
    }
}

configure(bussenissProjects()) {
    dependencies {
        testCompile project(':spark-core:common-test')
    }
}

configure(rootProject) {
    description "Parim Spark"
    
    project.ext.baseName = 'parim-spark'
    
    apply plugin: 'maven'
    apply plugin: 'eclipse-wtp'
    apply plugin: 'idea'
    apply plugin: "org.asciidoctor.convert"
    apply from: "${gradleScriptDir}/docs.gradle"
    apply from: "${gradleScriptDir}/dict.gradle"

    configurations.all {
        // resolutionStrategy {
        //    force "net.parim:console-web:0.1.1-SNAPSHOT"
            
        //    cacheDynamicVersionsFor 10, 'seconds'
        //    cacheChangingModulesFor 0, 'seconds'
        //}
    }

    dependencies {
        compile project(':spark-core:system-learner')
        compile project(':spark-core:message')
        compile project(':spark-core:library')
        compile project(':spark-learning:learning-console')
        compile project(':spark-learning:learning-learner')
        compile project(':spark-planning:planning-console')
        compile project(':spark-training:training-console')
        compile project(':spark-training:training-learner')
        compile project(':spark-market:market-console')
        compile project(':spark-market:market-learner')
        compile project(':spark-survey:survey-rest')
        compile project(':spark-portal:portal-rest')
        compile project(':spark-exam:exam-rest')
        compile project(':spark-exam:exam-learner')
        compile project(':spark-ugc:ugc-console')
        compile project(':spark-ugc:ugc-learner')
        compile project(':spark-sns:sns-follow')
        compile project(':spark-sns:sns-comment')
        compile project(':spark-sns:sns-forum')
        compile project(':spark-sns:sns-qa')
        compile project(':spark-subject:subject-console')
        compile project(':spark-subject:subject-learner')
        compile project(':spark-report:basic-report')
        compile project(':spark-joints:longxin-sso')
        compile project(':spark-joints:aliyuncs')
        compile project(':spark-joints:open-ssh')
        compile project(':spark-joints:wechat')
        compile project(':spark-joints:real-name-verify')
        compile project(':spark-joints:mqtt-msg')
        compile project(':spark-joints:pingcap-account')
    }
    
    bootRepackage.enabled=true
    springBoot {
        mainClass = "net.parim.spark.SparkApplication";
        buildInfo()
        executable = true
        embeddedLaunchScriptProperties(mode:"service")
    }

    processResources {
        // doFirst不能保证每次都拷贝？
        doLast {
            // 第一次安装时需要数据库初始化脚本
            copy { from "dbdata" into "build/resources/main/dbdata" }
            copy { from "config" into "build/resources/main" }
        }
    }

    // 生成war时过滤内嵌tomcat依赖
    war {
        rootSpec.exclude("tomcat-embed*.jar")
        rootSpec.exclude("javax.servlet-api*.jar")
    }

//    @Deprecated
    task run(type:Exec){
        dependsOn bootRepackage
        workingDir '.'
        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {
            commandLine 'cmd', '/c', "java -jar build/libs/parim-spark-${version}.war --spring.profiles.active=local"
        } else {
            commandLine 'sh', '-c', "java -jar build/libs/parim-spark-${version}.war --spring.profiles.active=local"
        }
    }

    //    @Deprecated
    task killJava(type:Exec){
        commandLine 'cmd', '/c', 'taskkill /f /t /im java'
    }

    //    @Deprecated
    task mkZip(type:Zip) {

        dependsOn bootRepackage

        // baseName = "parim-spark"
        baseName = project.baseName
        archiveName = "${baseName}.zip"
        includeEmptyDirs = true

        def tempDir = 'build/zipTaskTempDir'
        
        doFirst {
            
            if (new File(tempDir).exists()) {
                delete tempDir
            }
            
            new File(tempDir+'/logs').mkdirs()
            
            def versionInfo = "build @ ${new Date().format('yyyy-MM-dd HH:mm:ss')}"
            new File("${tempDir}/ver.txt").append("\n" + versionInfo + "\n");
        }

        from(tempDir) {
            into(baseName)
            include '*/**'
        }
        
        from('build/libs') {
            fileMode = 0750
            into "${project.baseName}/bin"
            include war.archiveName
            rename (war.archiveName, "${project.baseName}.war")
        }
        from('deploy/bin_script') {
            fileMode = 0750
            into "${project.baseName}/bin"
            include '*'
            rename ('parim-spring-boot-app', project.baseName)
        }
        from('deploy/conf') {
            fileMode = 0750
            into "${project.baseName}/conf"
            include '*'
            rename ('parim-spring-boot-app',project.baseName)
        }
        
    }


}

