From 10ae7796c6d893471d0a33621722f2bb2d478ca5 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 31 Aug 2023 16:44:23 +0200 Subject: [PATCH] Fix documentation publication in Gradle build This commit moves the asciidoctor *.adoc files to the default location and removes the unnecessary asciidoctor plugin configuration as a result. This changes also reworks dependencies between tasks and adds the missing publication configuration for generated artifacts. The entire docs-specific script is moved from the main build.gradle file to a "gradle/docs.gradle" script to improve readability of the main build. Fixes gh-1797 --- build.gradle | 220 +----------------- gradle/docs.gradle | 185 +++++++++++++++ src/{reference => docs/asciidoc}/actions.adoc | 0 .../asciidoc}/defining-flows.adoc | 0 src/{reference => docs/asciidoc}/el.adoc | 0 .../asciidoc}/flow-inheritance.adoc | 0 .../asciidoc}/flow-managed-persistence.adoc | 0 .../asciidoc}/flow-security.adoc | 0 .../asciidoc}/images/flow-view-packaging.png | Bin .../images/hotels-site-bookhotel-flow.png | Bin .../asciidoc}/images/hotels-site.png | Bin src/{reference => docs/asciidoc}/index.adoc | 0 .../asciidoc}/overview.adoc | 0 .../asciidoc}/spring-faces.adoc | 0 .../asciidoc}/spring-js.adoc | 0 .../asciidoc}/spring-mvc.adoc | 0 .../asciidoc}/system-setup.adoc | 0 src/{reference => docs/asciidoc}/testing.adoc | 0 src/{reference => docs/asciidoc}/views.adoc | 0 19 files changed, 186 insertions(+), 219 deletions(-) create mode 100644 gradle/docs.gradle rename src/{reference => docs/asciidoc}/actions.adoc (100%) rename src/{reference => docs/asciidoc}/defining-flows.adoc (100%) rename src/{reference => docs/asciidoc}/el.adoc (100%) rename src/{reference => docs/asciidoc}/flow-inheritance.adoc (100%) rename src/{reference => docs/asciidoc}/flow-managed-persistence.adoc (100%) rename src/{reference => docs/asciidoc}/flow-security.adoc (100%) rename src/{reference => docs/asciidoc}/images/flow-view-packaging.png (100%) rename src/{reference => docs/asciidoc}/images/hotels-site-bookhotel-flow.png (100%) rename src/{reference => docs/asciidoc}/images/hotels-site.png (100%) rename src/{reference => docs/asciidoc}/index.adoc (100%) rename src/{reference => docs/asciidoc}/overview.adoc (100%) rename src/{reference => docs/asciidoc}/spring-faces.adoc (100%) rename src/{reference => docs/asciidoc}/spring-js.adoc (100%) rename src/{reference => docs/asciidoc}/spring-mvc.adoc (100%) rename src/{reference => docs/asciidoc}/system-setup.adoc (100%) rename src/{reference => docs/asciidoc}/testing.adoc (100%) rename src/{reference => docs/asciidoc}/views.adoc (100%) diff --git a/build.gradle b/build.gradle index ba5c128a..24af4795 100644 --- a/build.gradle +++ b/build.gradle @@ -10,9 +10,6 @@ plugins { ext { moduleProjects = subprojects.findAll { it.name.startsWith("spring-") } javaProjects = subprojects - project("spring-js-resources") - withoutJclOverSlf4j = { - exclude group: "org.slf4j", name: "jcl-over-slf4j" - } } allprojects { @@ -150,220 +147,5 @@ subprojects { subproject -> configure(rootProject) { description = "Spring Web Flow" - repositories { - maven { url "https://repo.spring.io/plugins-release" } - } - - configurations { - asciidoctorExtensions - } - - dependencies { - asciidoctorExtensions "io.spring.asciidoctor.backends:spring-asciidoctor-backends:0.0.3" - } - - task prepareAsciidocBuild(type: Sync) { - dependsOn configurations.asciidoctorExtensions - // copy doc sources - from "src/reference/" - // to a build directory of your choice - into "$buildDir/asciidoc/build" - } - - asciidoctorPdf { - dependsOn prepareAsciidocBuild - baseDirFollowsSourceFile() - - asciidoctorj { - sourceDir "$buildDir/asciidoc/build" - inputs.dir(sourceDir) - sources { - include 'index.adoc' - } - options doctype: 'book' - attributes 'icons': 'font', - 'sectanchors': '', - 'sectnums': '', - 'toc': '', - 'source-highlighter' : 'coderay', - revnumber: project.version, - 'project-version': project.version - } - } - - asciidoctor { - dependsOn asciidoctorPdf - - baseDirFollowsSourceFile() - - configurations "asciidoctorExtensions" - outputOptions { - backends "spring-html" - } - - sourceDir "$buildDir/asciidoc/build" - inputs.dir(sourceDir) - resources { - from(sourceDir) { - include 'images/*', 'css/**', 'js/**' - } - } - options doctype: 'book' - - attributes 'docinfo': 'shared', - stylesdir: 'css/', - stylesheet: 'spring.css', - 'linkcss': true, - 'icons': 'font', - 'sectanchors': '', - 'source-highlighter': 'highlight.js', - 'highlightjsdir': 'js/highlight', - 'highlightjs-theme': 'github', - 'idprefix': '', - 'idseparator': '-', - 'spring-version': project.version, - 'allow-uri-read': '', - 'toc': 'left', - 'toclevels': '4', - revnumber: project.version, - 'project-version': project.version - } - - - // don't publish the default jar for the root project - configurations.archives.artifacts.clear() - - artifacts { - } - - task api(type: Javadoc) { - group = "Documentation" - description = "Generates aggregated Javadoc API documentation." - title = "${rootProject.description} ${version} API" - options.memberLevel = JavadocMemberLevel.PROTECTED - options.author = true - options.header = rootProject.description - options.overview = "src/api/overview.html" - source subprojects.collect { project -> - project.sourceSets.main.allJava - } - destinationDir = new File(buildDir, "api") - classpath = files(subprojects.collect { project -> - project.sourceSets.main.compileClasspath - }) - maxMemory = "1024m" - } - - task docsZip(type: Zip) { - group = "Distribution" - archiveBaseName = "spring-webflow" - archiveClassifier = "docs" - description = "Builds -${archiveClassifier.get()} archive containing api and reference " + - "for deployment at static.springframework.org/spring-webflow/docs." - - from (api) { - into "api" - } - - from (asciidoctor) { - include "*.html" - include "css/**" - include "js/**" - include "images/**" - into "reference" - } - - from (asciidoctorPdf) { - include "*.pdf" - into "reference" - } - } - - task schemaZip(type: Zip) { - group = "Distribution" - archiveBaseName = "spring-webflow" - archiveClassifier = "schema" - description = "Builds -${archiveClassifier.get()} archive containing all " + - "XSDs for deployment at static.springframework.org/schema." - - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - - subprojects.each { subproject -> - Properties schemas = new Properties() - - subproject.sourceSets.main.resources.find { - it.path.endsWith("META-INF/spring.schemas") - }?.withInputStream { schemas.load(it) } - - for (def key : schemas.keySet()) { - def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1') - assert shortName != key - File xsdFile = subproject.sourceSets.main.allSource.find { - it.path.endsWith(schemas.get(key)) - } as File - assert xsdFile != null - into (shortName) { - from xsdFile.path - } - } - } - - project(":spring-webflow").sourceSets.main.resources.matching { - include '**/engine/model/builder/xml/*.xsd' - }.each { File file -> - into ('webflow') { - from file.path - } - } - } - - task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) { - group = "Distribution" - archiveBaseName = "spring-webflow" - archiveClassifier = "dist" - description = "Builds -${archiveClassifier.get()} archive, containing all jars and docs, " + - "suitable for community download page." - - def baseDir = "${archiveBaseName.get()}-${project.version}" - - from("src/dist") { - include "notice.txt" - into "${baseDir}" - expand(copyright: new Date().format("yyyy"), version: project.version) - } - - from("src/dist") { - include "readme.txt" - include "license.txt" - into "${baseDir}" - expand(version: project.version) - } - - from(zipTree(docsZip.archiveFile)) { - into "${baseDir}/docs" - } - - from(zipTree(schemaZip.archiveFile)) { - into "${baseDir}/schema" - } - - - subprojects.each { subproject -> - into ("${baseDir}/libs") { - from subproject.jar - if (subproject.tasks.findByPath("sourcesJar")) { - from subproject.sourcesJar - } - if (subproject.tasks.findByPath("javadocJar")) { - from subproject.javadocJar - } - } - } - } - - artifacts { - archives docsZip - archives schemaZip - archives distZip - } + apply from: "${rootDir}/gradle/docs.gradle" } diff --git a/gradle/docs.gradle b/gradle/docs.gradle new file mode 100644 index 00000000..f5fe5b51 --- /dev/null +++ b/gradle/docs.gradle @@ -0,0 +1,185 @@ +apply plugin: "maven-publish" +apply plugin: "com.jfrog.artifactory" + +configurations { + asciidoctorExtensions +} + +dependencies { + asciidoctorExtensions "io.spring.asciidoctor.backends:spring-asciidoctor-backends:0.0.7" +} + +asciidoctorPdf { + baseDirFollowsSourceFile() + asciidoctorj { + sources { + include 'index.adoc' + } + options doctype: 'book' + attributes 'icons': 'font', + 'sectanchors': '', + 'sectnums': '', + 'toc': '', + 'source-highlighter' : 'coderay', + revnumber: project.version, + 'project-version': project.version + } +} + +asciidoctor { + baseDirFollowsSourceFile() + configurations "asciidoctorExtensions" + outputOptions { + backends "spring-html" + } + sources { + include 'index.adoc' + } + options doctype: 'book' + + attributes 'docinfo': 'shared', + stylesdir: 'css/', + stylesheet: 'spring.css', + 'linkcss': true, + 'icons': 'font', + 'sectanchors': '', + 'source-highlighter': 'highlight.js', + 'highlightjsdir': 'js/highlight', + 'highlightjs-theme': 'github', + 'idprefix': '', + 'idseparator': '-', + 'spring-version': project.version, + 'allow-uri-read': '', + 'toc': 'left', + 'toclevels': '4', + revnumber: project.version, + 'project-version': project.version +} + +task api(type: Javadoc) { + group = "Documentation" + description = "Generates aggregated Javadoc API documentation." + title = "${rootProject.description} ${version} API" + options.memberLevel = JavadocMemberLevel.PROTECTED + options.author = true + options.header = rootProject.description + options.overview = "src/api/overview.html" + source subprojects.collect { project -> + project.sourceSets.main.allJava + } + destinationDir = new File(buildDir, "api") + classpath = files(subprojects.collect { project -> + project.sourceSets.main.compileClasspath + }) + maxMemory = "1024m" +} + +task docsZip(type: Zip) { + group = "Distribution" + archiveBaseName = "spring-webflow" + archiveClassifier = "docs" + description = "Builds -${archiveClassifier.get()} archive containing api and reference " + + "for deployment at static.springframework.org/spring-webflow/docs." + + from (api) { + into "api" + } + from (asciidoctor) { + into "reference" + } + from (asciidoctorPdf) { + into "reference" + } +} + +task schemaZip(type: Zip) { + group = "Distribution" + archiveBaseName = "spring-webflow" + archiveClassifier = "schema" + description = "Builds -${archiveClassifier.get()} archive containing all " + + "XSDs for deployment at static.springframework.org/schema." + + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + + subprojects.each { subproject -> + Properties schemas = new Properties() + + subproject.sourceSets.main.resources.find { + it.path.endsWith("META-INF/spring.schemas") + }?.withInputStream { schemas.load(it) } + + for (def key : schemas.keySet()) { + def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1') + assert shortName != key + File xsdFile = subproject.sourceSets.main.allSource.find { + it.path.endsWith(schemas.get(key)) + } as File + assert xsdFile != null + into (shortName) { + from xsdFile.path + } + } + } + + project(":spring-webflow").sourceSets.main.resources.matching { + include '**/engine/model/builder/xml/*.xsd' + }.each { File file -> + into ('webflow') { + from file.path + } + } +} + +task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) { + group = "Distribution" + archiveBaseName = "spring-webflow" + archiveClassifier = "dist" + description = "Builds -${archiveClassifier.get()} archive, containing all jars and docs, " + + "suitable for community download page." + + def baseDir = "${archiveBaseName.get()}-${project.version}" + + from("src/dist") { + include "notice.txt" + into "${baseDir}" + expand(copyright: new Date().format("yyyy"), version: project.version) + } + from("src/dist") { + include "readme.txt" + include "license.txt" + into "${baseDir}" + expand(version: project.version) + } + from(zipTree(docsZip.archiveFile)) { + into "${baseDir}/docs" + } + from(zipTree(schemaZip.archiveFile)) { + into "${baseDir}/schema" + } + + subprojects.each { subproject -> + into ("${baseDir}/libs") { + from subproject.jar + if (subproject.tasks.findByPath("sourcesJar")) { + from subproject.sourcesJar + } + if (subproject.tasks.findByPath("javadocJar")) { + from subproject.javadocJar + } + } + } +} + +publishing { + publications { + mavenJava(MavenPublication) { + artifact docsZip + artifact schemaZip + artifact distZip + } + } +} + +artifactoryPublish { + publications(publishing.publications.mavenJava) +} \ No newline at end of file diff --git a/src/reference/actions.adoc b/src/docs/asciidoc/actions.adoc similarity index 100% rename from src/reference/actions.adoc rename to src/docs/asciidoc/actions.adoc diff --git a/src/reference/defining-flows.adoc b/src/docs/asciidoc/defining-flows.adoc similarity index 100% rename from src/reference/defining-flows.adoc rename to src/docs/asciidoc/defining-flows.adoc diff --git a/src/reference/el.adoc b/src/docs/asciidoc/el.adoc similarity index 100% rename from src/reference/el.adoc rename to src/docs/asciidoc/el.adoc diff --git a/src/reference/flow-inheritance.adoc b/src/docs/asciidoc/flow-inheritance.adoc similarity index 100% rename from src/reference/flow-inheritance.adoc rename to src/docs/asciidoc/flow-inheritance.adoc diff --git a/src/reference/flow-managed-persistence.adoc b/src/docs/asciidoc/flow-managed-persistence.adoc similarity index 100% rename from src/reference/flow-managed-persistence.adoc rename to src/docs/asciidoc/flow-managed-persistence.adoc diff --git a/src/reference/flow-security.adoc b/src/docs/asciidoc/flow-security.adoc similarity index 100% rename from src/reference/flow-security.adoc rename to src/docs/asciidoc/flow-security.adoc diff --git a/src/reference/images/flow-view-packaging.png b/src/docs/asciidoc/images/flow-view-packaging.png similarity index 100% rename from src/reference/images/flow-view-packaging.png rename to src/docs/asciidoc/images/flow-view-packaging.png diff --git a/src/reference/images/hotels-site-bookhotel-flow.png b/src/docs/asciidoc/images/hotels-site-bookhotel-flow.png similarity index 100% rename from src/reference/images/hotels-site-bookhotel-flow.png rename to src/docs/asciidoc/images/hotels-site-bookhotel-flow.png diff --git a/src/reference/images/hotels-site.png b/src/docs/asciidoc/images/hotels-site.png similarity index 100% rename from src/reference/images/hotels-site.png rename to src/docs/asciidoc/images/hotels-site.png diff --git a/src/reference/index.adoc b/src/docs/asciidoc/index.adoc similarity index 100% rename from src/reference/index.adoc rename to src/docs/asciidoc/index.adoc diff --git a/src/reference/overview.adoc b/src/docs/asciidoc/overview.adoc similarity index 100% rename from src/reference/overview.adoc rename to src/docs/asciidoc/overview.adoc diff --git a/src/reference/spring-faces.adoc b/src/docs/asciidoc/spring-faces.adoc similarity index 100% rename from src/reference/spring-faces.adoc rename to src/docs/asciidoc/spring-faces.adoc diff --git a/src/reference/spring-js.adoc b/src/docs/asciidoc/spring-js.adoc similarity index 100% rename from src/reference/spring-js.adoc rename to src/docs/asciidoc/spring-js.adoc diff --git a/src/reference/spring-mvc.adoc b/src/docs/asciidoc/spring-mvc.adoc similarity index 100% rename from src/reference/spring-mvc.adoc rename to src/docs/asciidoc/spring-mvc.adoc diff --git a/src/reference/system-setup.adoc b/src/docs/asciidoc/system-setup.adoc similarity index 100% rename from src/reference/system-setup.adoc rename to src/docs/asciidoc/system-setup.adoc diff --git a/src/reference/testing.adoc b/src/docs/asciidoc/testing.adoc similarity index 100% rename from src/reference/testing.adoc rename to src/docs/asciidoc/testing.adoc diff --git a/src/reference/views.adoc b/src/docs/asciidoc/views.adoc similarity index 100% rename from src/reference/views.adoc rename to src/docs/asciidoc/views.adoc