Skip to content

Centralize groovydoc configuration into GrailsGroovydocPlugin convention plugin#15421

Merged
jamesfredley merged 1 commit intofix/groovydoc-java-versionfrom
refactor/centralize-groovydoc-plugin
Feb 20, 2026
Merged

Centralize groovydoc configuration into GrailsGroovydocPlugin convention plugin#15421
jamesfredley merged 1 commit intofix/groovydoc-java-versionfrom
refactor/centralize-groovydoc-plugin

Conversation

@jamesfredley
Copy link
Contributor

Summary

Extracts the duplicated AntBuilder groovydoc configuration (introduced in PR #15420) into a reusable GrailsGroovydocPlugin convention plugin in build-logic/, eliminating ~490 lines of duplicated build logic across 8 scripts.

Depends on: PR #15420 (fix/groovydoc-java-version)

Changes

New files in build-logic/

  • GrailsGroovydocPlugin - Convention plugin (org.apache.grails.buildsrc.groovydoc) that:
    • Replaces Gradle's built-in Groovydoc execution with AntBuilder for javaVersion support
    • Adds the Matomo analytics footer to all generated docs
    • Resolves source directories from the main source set
    • Supports external doc links via ext.groovydocLinks
    • Handles the GroovydocAccess enum via Class.forName (not on build-logic compile classpath)
    • Handles Gradle's mixed Property<T> / plain-value API via resolveGroovydocProperty()
  • GrailsGroovydocExtension - Configurable extension with:
    • javaVersion (default: JAVA_17) - target Java version for Groovydoc output
    • javaVersionEnabled (default: true) - allows disabling for Groovy 3.x (Forge uses 3.0.25 which lacks javaVersion support)

Simplified build scripts

Script Before After
gradle/docs-dependencies.gradle Full AntBuilder config + deps Plugin apply + deps + dynamic links
gradle/docs-config.gradle AntBuilder config + includeInApiDocs Plugin apply + includeInApiDocs
grails-gradle/gradle/docs-config.gradle Full AntBuilder config + deps Plugin apply + deps + custom dest dir
grails-forge/gradle/doc-config.gradle Full AntBuilder config + deps Plugin apply (javaVersionEnabled = false) + deps
grails-data-hibernate5/docs/build.gradle Full AntBuilder config + deps Plugin apply + deps + custom source collection
grails-data-mongodb/docs/build.gradle Full AntBuilder config + deps Plugin apply + deps + custom source collection
grails-doc/build.gradle Duplicated Matomo footer in aggregate task Footer from plugin
grails-data-docs/stage/build.gradle Duplicated Matomo footer in aggregate task Footer from plugin

Stats

  • 11 files changed, 275 insertions, 491 deletions (net -216 lines)

Testing

  • Per-module groovydoc generation (grails-core)
  • grails-gradle groovydoc generation
  • Aggregate groovydoc (3,929 HTML files generated)
  • Data mapping aggregate groovydoc
  • ./gradlew codeStyle passes
  • Forge groovydoc (with javaVersionEnabled = false)

Resolves #15385

…ion plugin

Move duplicated AntBuilder groovydoc execution, Matomo footer, documentation
configuration registration, and task defaults into a shared convention plugin
in build-logic. This eliminates ~490 lines of duplicated configuration across
8 build scripts while maintaining identical behavior.

The plugin provides:
- Documentation configuration registration with standard attributes
- Common Groovydoc task defaults (author, timestamps, scripts)
- AntBuilder-based execution with javaVersion support (Groovy 4.0.27+)
- Matomo analytics footer
- Source directory resolution from ext.groovydocSourceDirs or source sets
- External documentation link support via ext.groovydocLinks
- GrailsGroovydocExtension for per-project javaVersion control

Build scripts retain project-specific configuration: dependencies, titles,
source directories for aggregate tasks, and dynamic link resolution.

Assisted-by: Claude Code <Claude@Claude.ai>
@jamesfredley jamesfredley merged commit 3c50821 into fix/groovydoc-java-version Feb 20, 2026
23 of 24 checks passed
@jamesfredley
Copy link
Contributor Author

Consolidated into PR #15420 - both commits now on fix/groovydoc-java-version branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments