import org.jetbrains.configureBintrayPublication import org.jetbrains.CrossPlatformExec /** * [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 mavenVersion = "3.5.0" val mavenPluginToolsVersion = "3.5.2" val aetherVersion = "1.1.0" dependencies { implementation(project(":core")) implementation("org.apache.maven:maven-core:$mavenVersion") implementation("org.apache.maven:maven-plugin-api:$mavenVersion") implementation("org.apache.maven.plugin-tools:maven-plugin-annotations:$mavenPluginToolsVersion") implementation("org.apache.maven:maven-archiver:2.5") implementation(kotlin("stdlib-jdk8")) implementation("org.eclipse.aether:aether-api:${aetherVersion}") implementation("org.eclipse.aether:aether-spi:${aetherVersion}") implementation("org.eclipse.aether:aether-impl:${aetherVersion}") implementation("org.eclipse.aether:aether-connector-basic:${aetherVersion}") implementation("org.eclipse.aether:aether-transport-file:${aetherVersion}") implementation("org.eclipse.aether:aether-transport-http:${aetherVersion}") implementation("org.apache.maven:maven-aether-provider:3.3.3") mavenBin(group = "org.apache.maven", name = "apache-maven", version = mavenVersion, classifier = "bin", ext = "zip") } val mavenBinDir = "$buildDir/maven-bin" val mavenBuildDir = "$buildDir/maven" val mvn = File(mavenBinDir, "apache-maven-$mavenVersion/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 from("$projectDir/pom.tpl.xml") { rename("(.*).tpl.xml", "$1.xml") } into(mavenBuildDir) eachFile { filter { line -> line.replace("", "$mavenVersion") } filter { line -> line.replace("dokka_version", "$dokka_version") } filter { line -> line.replace("maven-plugin-plugin", "$mavenPluginToolsVersion") } } } /** * 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(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(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")