import org.jetbrains.configureBintrayPublication /** * [mavenBin] configuration is used to download Maven Plugin Plugin * for generating plugin-help.xml and plugin.xml files */ val mavenBin: Configuration by configurations.creating val maven_version: String by project dependencies { implementation(project(":core")) implementation("org.apache.maven:maven-core:$maven_version") implementation("org.apache.maven:maven-plugin-api:$maven_version") val maven_plugin_tools_version: String by project implementation("org.apache.maven.plugin-tools:maven-plugin-annotations:$maven_plugin_tools_version") val maven_archiver_version: String by project implementation("org.apache.maven:maven-archiver:$maven_archiver_version") mavenBin(group = "org.apache.maven", name = "apache-maven", version = maven_version, classifier = "bin", ext = "zip") compileOnly(kotlin("stdlib-jdk8")) } val mavenBinDir = "$buildDir/maven-bin" val mavenBuildDir = "$buildDir/maven" val mvn = File(mavenBinDir, "apache-maven-$maven_version/bin/mvn") tasks.named("clean") { delete(mavenBinDir) } /** * Copy Maven Plugin Plugin to [mavenBinDir] directory */ val setupMaven by tasks.registering(Sync::class) { from(mavenBin.map { zipTree(it) }) into(mavenBinDir) } /** * Generate pom.xml for Maven Plugin Plugin */ val generatePom by tasks.registering(Copy::class) { val dokka_version: String by project val maven_plugin_tools_version: String by project from("$projectDir/pom.tpl.xml") { rename("(.*).tpl.xml", "$1.xml") } into(mavenBuildDir) eachFile { filter { line -> line.replace("", "$maven_version") } filter { line -> line.replace("dokka_version", "$dokka_version") } filter { line -> line.replace("maven-plugin-plugin", "$maven_plugin_tools_version") } } } /** * Copy compiled classes to [mavenBuildDir] for Maven Plugin Plugin */ val syncClasses by tasks.registering(Sync::class) { dependsOn(tasks.compileKotlin, tasks.compileJava) from("$buildDir/classes/kotlin", "$buildDir/classes/java") into("$mavenBuildDir/classes/java") preserve { include("**/*.class") } } val helpMojo by tasks.registering(org.jetbrains.CrossPlatformExec::class) { dependsOn(setupMaven, generatePom, syncClasses) workingDir(mavenBuildDir) commandLine(mvn, "-e", "-B", "org.apache.maven.plugins:maven-plugin-plugin:helpmojo") } val pluginDescriptor by tasks.registering(org.jetbrains.CrossPlatformExec::class) { dependsOn(setupMaven, generatePom, syncClasses) workingDir(mavenBuildDir) commandLine(mvn, "-e", "-B", "org.apache.maven.plugins:maven-plugin-plugin:descriptor") } val sourceJar by tasks.registering(Jar::class) { archiveClassifier.set("sources") from(sourceSets["main"].allSource) } tasks.named("jar") { dependsOn(pluginDescriptor, helpMojo) metaInf { from("$mavenBuildDir/classes/java/main/META-INF") } manifest { attributes("Class-Path" to configurations.runtimeClasspath.get().files.joinToString(" ") { it.name }) } } publishing { publications { register("dokkaMavenPlugin") { artifactId = "dokka-maven-plugin" from(components["java"]) artifact(sourceJar.get()) } } } configureBintrayPublication("dokkaMavenPlugin")