import com.jfrog.bintray.gradle.BintrayExtension import com.jfrog.bintray.gradle.tasks.BintrayUploadTask import groovy.lang.Closure import org.gradle.api.internal.HasConvention import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.dokka.gradle.DokkaTask import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet description = "A Result monad for modelling success or failure operations." plugins { `maven-publish` kotlin("jvm") version ("1.3.0") id("org.jetbrains.dokka") version ("0.9.17") id("com.github.ben-manes.versions") version ("0.20.0") id("com.jfrog.bintray") version ("1.8.4") id("net.researchgate.release") version ("2.7.0") } allprojects { repositories { mavenCentral() } plugins.withType { tasks.withType { kotlinOptions { jvmTarget = "1.8" } } } } dependencies { implementation(kotlin("stdlib")) testImplementation("junit:junit:4.12") testImplementation(kotlin("test-common")) testImplementation(kotlin("test-annotations-common")) testImplementation(kotlin("test-junit")) testImplementation(kotlin("test")) } val SourceSet.kotlin: SourceDirectorySet get() = withConvention(KotlinSourceSet::class) { kotlin } fun BintrayExtension.pkg(configure: BintrayExtension.PackageConfig.() -> Unit): Any? { return pkg(closureOf(configure)) } val dokka by tasks.existing(DokkaTask::class) { kotlinTasks(closureOf { emptyList() }) sourceDirs = sourceSets["main"].kotlin.srcDirs outputFormat = "javadoc" outputDirectory = "$buildDir/docs/javadoc" } dokka { kotlinTasks(closureOf { emptyList() }) sourceDirs = sourceSets["main"].kotlin.srcDirs outputFormat = "javadoc" outputDirectory = "$buildDir/docs/javadoc" } val javadocJar by tasks.registering(Jar::class) { group = LifecycleBasePlugin.BUILD_GROUP description = "Assembles a jar archive containing the Javadoc API documentation." classifier = "javadoc" dependsOn(dokka) from(dokka.get().outputDirectory) } val sourcesJar by tasks.registering(Jar::class) { group = LifecycleBasePlugin.BUILD_GROUP description = "Assembles a jar archive containing the main classes with sources." classifier = "sources" from(sourceSets["main"].allSource) } publishing { publications { register("mavenJava", MavenPublication::class) { from(components["java"]) artifact(javadocJar.get()) artifact(sourcesJar.get()) } } } bintray { user = project.findProperty("bintrayUser")?.toString() ?: "" key = project.findProperty("bintrayKey")?.toString() ?: "" setPublications("mavenJava") pkg { repo = "maven" name = "kotlin-result" vcsUrl = "git@github.com:michaelbull/kotlin-result.git" setLicenses("ISC") } } val bintrayUpload by tasks.existing(BintrayUploadTask::class) { dependsOn("build") dependsOn("generatePomFileForMavenJavaPublication") dependsOn(sourcesJar) dependsOn(javadocJar) } tasks.named("afterReleaseBuild") { dependsOn(bintrayUpload) }