allprojects {
    apply plugin: 'java-library'
    apply plugin: 'maven-publish'

    compileJava.options.encoding = 'UTF-8'
    compileTestJava.options.encoding = 'UTF-8'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    version 'v4.0.2'
    group 'com.github.TeamNewPipe'

    repositories {
        mavenCentral()
        maven { url "https://jitpack.io" }
    }

    afterEvaluate {
        publishing {
            publications {
                mavenJava(MavenPublication) {
                    from components.java
                }
            }
        }
    }

    ext {
        nanojsonVersion = "1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751"
        spotbugsVersion = "4.6.0"
        junitVersion = "5.8.2"
        checkstyleVersion = "9.3" // do not use latest version (10.0) as it requires compile JDK 11
    }
}

dependencies {
    api project(':extractor')
    implementation project(':timeago-parser')
}

subprojects {
    task sourcesJar(type: Jar, dependsOn: classes) {
        archiveClassifier.set('sources')
        from sourceSets.main.allSource
    }

    tasks.withType(Test) {
        testLogging {
            events "skipped", "failed"
            showStandardStreams = true
            exceptionFormat = 'full'
        }
    }

    artifacts {
        archives sourcesJar
    }
}

// https://discuss.gradle.org/t/best-approach-gradle-multi-module-project-generate-just-one-global-javadoc/18657/21
task aggregatedJavadocs(type: Javadoc, group: 'Documentation') {
    destinationDir = file("$buildDir/docs/javadoc")
    title = "$project.name $version"
    // options.memberLevel = JavadocMemberLevel.PRIVATE
    options.links 'https://docs.oracle.com/javase/8/docs/api/'
    options.encoding 'UTF-8'
    // Fixes unknown tag @implNote; the other two were added precautionary
    options.tags = [
            "apiNote:a:API Note:",
            "implSpec:a:Implementation Requirements:",
            "implNote:a:Implementation Note:"
    ]

    subprojects.each { project ->
        project.tasks.withType(Javadoc).each { javadocTask ->
            source += javadocTask.source
            classpath += javadocTask.classpath
            excludes += javadocTask.excludes
            includes += javadocTask.includes
        }
    }
}
