diff --git a/buildSrc/src/main/java/org/springframework/security/kerberos/gradle/ArtifactoryConventions.java b/buildSrc/src/main/java/org/springframework/security/kerberos/gradle/ArtifactoryConventions.java index e6c4435..dba1b11 100644 --- a/buildSrc/src/main/java/org/springframework/security/kerberos/gradle/ArtifactoryConventions.java +++ b/buildSrc/src/main/java/org/springframework/security/kerberos/gradle/ArtifactoryConventions.java @@ -70,9 +70,7 @@ public class ArtifactoryConventions { aTask.setCiServerBuild(); // bom is not a java project so plugin doesn't // add defaults for publications. - aTask.publications("mavenJava"); - // aTask.publishConfigs("archives"); - aTask.setPublishIvy(false); + aTask.publications("mavenJava", "docs"); // plugin is difficult to work with, use this hack // to set props before task does its real work @@ -86,8 +84,8 @@ public class ArtifactoryConventions { propsMap.put("zip.type", "docs"); ArtifactSpec spec = ArtifactSpec.builder() .artifactNotation("*:*:*:*@zip") - // archives is manually set for zip in root plugin - .configuration("archives") + // docs is manually set for zip in root plugin + .configuration("docs") .properties(propsMap) .build(); artifactSpecs.add(spec); diff --git a/buildSrc/src/main/java/org/springframework/security/kerberos/gradle/RootPlugin.java b/buildSrc/src/main/java/org/springframework/security/kerberos/gradle/RootPlugin.java index 95aa118..78f9f40 100644 --- a/buildSrc/src/main/java/org/springframework/security/kerberos/gradle/RootPlugin.java +++ b/buildSrc/src/main/java/org/springframework/security/kerberos/gradle/RootPlugin.java @@ -15,10 +15,19 @@ */ package org.springframework.security.kerberos.gradle; +import java.io.File; + import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.plugins.PluginManager; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.MavenPublication; import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.bundling.Zip; +import org.gradle.api.tasks.javadoc.Javadoc; +import org.gradle.external.javadoc.CoreJavadocOptions; /** * Manages tasks creating zip file for docs and publishing it. @@ -32,6 +41,51 @@ class RootPlugin implements Plugin { PluginManager pluginManager = project.getPluginManager(); pluginManager.apply(MavenPublishPlugin.class); pluginManager.apply(SpringNexusPublishPlugin.class); + pluginManager.apply(PublishLocalPlugin.class); + Javadoc apiTask = createApiTask(project); + Zip zipTask = createZipTask(project); + zipTask.dependsOn(apiTask); new ArtifactoryConventions().apply(project); } + + private Zip createZipTask(Project project) { + Zip zipTask = project.getTasks().create("distZip", Zip.class, zip -> { + zip.setGroup("Distribution"); + zip.from("build/api", copy -> { + copy.into("api"); + }); + }); + + PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); + MavenPublication mavenPublication = publishing.getPublications().create("docs", MavenPublication.class); + mavenPublication.artifact(zipTask); + return zipTask; + } + + private Javadoc createApiTask(Project project) { + Javadoc api = project.getTasks().create("api", Javadoc.class, a -> { + a.setGroup("Documentation"); + a.setDescription("Generates aggregated Javadoc API documentation."); + a.setDestinationDir(new File(project.getBuildDir(), "api")); + CoreJavadocOptions options = (CoreJavadocOptions) a.getOptions(); + options.source("17"); + options.encoding("UTF-8"); + options.addStringOption("Xdoclint:none", "-quiet"); + }); + + project.getRootProject().getSubprojects().forEach(p -> { + p.getPlugins().withType(ModulePlugin.class, m -> { + JavaPluginConvention java = p.getConvention().getPlugin(JavaPluginConvention.class); + SourceSet mainSourceSet = java.getSourceSets().getByName("main"); + + api.setSource(api.getSource().plus(mainSourceSet.getAllJava())); + + p.getTasks().withType(Javadoc.class, j -> { + api.setClasspath(api.getClasspath().plus(j.getClasspath())); + }); + }); + }); + return api; + } + }