hibernate-orm/documentation/documentation.gradle

702 lines
21 KiB
Groovy

import java.util.function.Function
import org.asciidoctor.gradle.jvm.AsciidoctorTask
import org.asciidoctor.gradle.jvm.pdf.AsciidoctorPdfTask
plugins {
id 'org.asciidoctor.jvm.convert' version '3.3.2'
id 'org.asciidoctor.jvm.pdf' version '3.3.2'
id "org.asciidoctor.jvm.gems" version "3.3.2"
id "org.hibernate.orm.build.settings-doc"
}
repositories {
mavenCentral()
ruby.gems()
}
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
apply from: rootProject.file( 'gradle/module.gradle' )
apply from: rootProject.file( 'gradle/releasable.gradle' )
apply plugin: 'org.hibernate.orm.build.reports'
defaultTasks 'buildDocs'
configurations {
core
testing
envers
spatial
agroal
c3p0
hikaricp
proxool
vibur
jcache
jpamodelgen
javadocClasspath {
description = 'Class files for the javadoc to be built'
resolutionStrategy.capabilitiesResolution.withCapability('org.junit.jupiter:junit-jupiter-params:5.7.1') { details ->
details.select( details.candidates.first() ).because( 'first' )
}
extendsFrom core
extendsFrom testing
extendsFrom envers
extendsFrom spatial
extendsFrom agroal
extendsFrom c3p0
extendsFrom hikaricp
extendsFrom proxool
extendsFrom vibur
extendsFrom jcache
extendsFrom jpamodelgen
}
javadocSources {
description = 'Source files to be built by the javadoc tool'
}
}
dependencies {
attributesSchema { schema ->
schema.attribute(Bundling.BUNDLING_ATTRIBUTE) { matchStrategy ->
final def nameComparator = Comparator.comparing(
new Function<Bundling,String>() {
@Override
String apply(Bundling o) {
return o.name
}
}
)
matchStrategy.ordered(new Comparator<Bundling>() {
@Override
int compare(Bundling o1, Bundling o2) {
if ( Objects.equals( o1, o2 ) ) {
return 0;
}
if ( o1 == null ) {
return 1;
}
if ( o2 == null ) {
return -1;
}
if ( o1.name == Bundling.EMBEDDED ) {
return -1;
}
if ( o2.name == Bundling.EMBEDDED ) {
return 1;
}
return nameComparator.compare(o1,o2)
}
} )
}
}
ext.pressgangVersion = '3.0.0'
reportAggregation project( ':hibernate-agroal' )
reportAggregation project( ':hibernate-c3p0' )
reportAggregation project( ':hibernate-core' )
reportAggregation project(':hibernate-envers')
reportAggregation project(':hibernate-graalvm')
reportAggregation project(':hibernate-hikaricp')
reportAggregation project(':hibernate-jcache')
reportAggregation project(':hibernate-micrometer')
reportAggregation project(':hibernate-proxool')
reportAggregation project(':hibernate-spatial')
reportAggregation project(':hibernate-vibur')
reportAggregation project(':hibernate-ant')
reportAggregation project(':hibernate-enhance-maven-plugin')
reportAggregation project(':hibernate-jpamodelgen')
asciidoctorGems 'rubygems:rouge:4.1.1'
core project( ':hibernate-core' )
javadocSources project( path: ':hibernate-core', configuration: 'javadocSources' )
testing project( ':hibernate-testing' )
javadocSources project( path: ':hibernate-testing', configuration: 'javadocSources' )
envers project( ':hibernate-envers' )
javadocSources project( path: ':hibernate-envers', configuration: 'javadocSources' )
spatial project( ':hibernate-spatial' )
javadocSources project( path: ':hibernate-spatial', configuration: 'javadocSources' )
agroal project( ':hibernate-agroal' )
javadocSources project( path: ':hibernate-agroal', configuration: 'javadocSources' )
c3p0 project( ':hibernate-c3p0' )
javadocSources project( path: ':hibernate-c3p0', configuration: 'javadocSources' )
hikaricp project( ':hibernate-hikaricp' )
javadocSources project( path: ':hibernate-hikaricp', configuration: 'javadocSources' )
proxool project( ':hibernate-proxool' )
javadocSources project( path: ':hibernate-proxool', configuration: 'javadocSources' )
vibur project( ':hibernate-vibur' )
javadocSources project( path: ':hibernate-vibur', configuration: 'javadocSources' )
jcache project( ':hibernate-jcache' )
javadocSources project( path: ':hibernate-jcache', configuration: 'javadocSources' )
jpamodelgen project( ':hibernate-jpamodelgen' )
javadocSources project( path: ':hibernate-jpamodelgen', configuration: 'javadocSources' )
javadocClasspath libs.loggingAnnotations
javadocClasspath jakartaLibs.validation
javadocClasspath jakartaLibs.cdi
javadocClasspath jakartaLibs.jacc
javadocClasspath jakartaLibs.jsonbApi
javadocClasspath libs.ant
javadocClasspath dbLibs.postgresql
javadocClasspath libs.jackson
javadocClasspath gradleApi()
javadocClasspath libs.jacksonXml
javadocClasspath dbLibs.oracle
}
if ( project.ormVersion.isSnapshot ) {
// only run the ci build tasks for SNAPSHOT versions
tasks.register('ciBuild') { dependsOn clean }
tasks.release.enabled false
}
else {
tasks.release.dependsOn clean
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// aggregated JavaDoc
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def aggregateJavadocsTask = tasks.register( "aggregateJavadocs", Javadoc ) {
group = "documentation"
description = 'Builds an aggregated JavaDoc across all ORM sub-projects'
inputs.property "ormVersion", project.ormVersion
destinationDir = mkdir( layout.buildDirectory.file( 'javadocs' ) )
source configurations.javadocSources
classpath += configurations.javadocClasspath
// exclude any generated sources and internal packages
exclude '**/generated-src/**'
exclude '**/internal/**'
include '**/*.java'
final int currentYear = new GregorianCalendar().get( Calendar.YEAR )
// apply standard config
maxMemory = '512m'
configure( options ) {
overview = 'src/javadoc/overview.html'
stylesheetFile = project.file( 'src/javadoc/stylesheet.css' )
windowTitle = 'Hibernate JavaDocs'
docTitle = "Hibernate JavaDoc ($project.version)"
bottom = "Copyright &copy; 2001-$currentYear <a href=\"https://redhat.com\">Red Hat, Inc.</a> All Rights Reserved."
use = true
options.encoding = 'UTF-8'
links = [
'https://docs.oracle.com/en/java/javase/11/docs/api/',
'https://jakarta.ee/specifications/bean-validation/3.0/apidocs/',
'https://jakarta.ee/specifications/cdi/4.0/apidocs/',
'https://jakarta.ee/specifications/platform/9/apidocs/',
'https://www.javadoc.io/doc/javax.cache/cache-api/1.0.0/'
]
options.addStringOption( 'Xdoclint:none', '-quiet' )
if ( jdkVersions.explicit ) {
options.setJFlags(
getProperty( 'toolchain.javadoc.jvmargs' ).toString().
split( ' ' ).toList().findAll( { !it.isEmpty() } )
)
}
}
if ( jdkVersions.explicit ) {
// Display version of Java tools
doFirst {
if ( javadocTool.present ) {
logger.lifecycle "Aggregating javadoc with '${javadocTool.get().metadata.installationPath}'"
}
}
}
}
asciidoctorj {
requires 'rouge'
modules {
pdf {
version '2.3.7'
}
}
attributes icons: 'font',
experimental: true,
'source-highlighter': 'rouge',
majorMinorVersion: rootProject.ormVersion.family,
fullVersion: rootProject.ormVersion.fullName
options logDocuments: true
}
// Topical Guides ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def renderTopicalGuideHtmlTask = tasks.register( 'renderTopicalGuideHtml', AsciidoctorTask ) { task ->
group = "Documentation"
description = 'Renders the Topical Guides in HTML format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
sourceDir = file( 'src/main/asciidoc/topical' )
outputDir = new File( "$buildDir/asciidoc/topical/html_single" )
resources {
from( 'src/main/asciidoc/topical/' ) {
include '**/images/**'
}
}
}
def renderTopicalGuidesTask = tasks.register( 'renderTopicalGuides', AsciidoctorTask ) { task ->
task.group = "Documentation"
task.description = 'Renders the Topical Guides in all formats.'
task.dependsOn renderTopicalGuideHtmlTask
}
// Getting Started Guides (quick starts) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def gettingStartedGuideHtmlDir = layout.buildDirectory.dir( "asciidoc/quickstart/html_single" )
def renderGettingStartedGuideHtmlTask = tasks.register( 'renderGettingStartedGuideHtmlTask', AsciidoctorTask ) { task ->
group = "Documentation"
description = 'Renders the Getting Started Guides (quickstarts) in HTML format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
sourceDir = file( 'src/main/asciidoc/quickstart/guides' )
sources 'index.adoc'
outputDir = gettingStartedGuideHtmlDir
attributes linkcss: true,
stylesheet: "css/hibernate.css",
docinfo: 'private',
jpaJavadocUrlPrefix: "https://javaee.github.io/javaee-spec/javadocs/javax/persistence/"
resources {
from( 'src/main/style/asciidoctor' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'css/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'js/**'
}
}
}
def renderGettingStartedGuidePdfTask = tasks.register( 'renderGettingStartedGuidePdf', AsciidoctorPdfTask ) { task ->
group = "Documentation"
description = 'Renders the Getting Started Guides in PDF format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
baseDir = file( 'src/main/asciidoc/quickstart/guides' )
sourceDir = file( 'src/main/asciidoc/quickstart/guides' )
sources 'index.adoc'
outputDir = layout.buildDirectory.dir( "asciidoc/quickstart/pdf" )
attributes jpaJavadocUrlPrefix: "https://javaee.github.io/javaee-spec/javadocs/javax/persistence/"
}
def buildTutorialZipTask = tasks.register( 'buildTutorialZip', Zip ) { task ->
from 'src/main/asciidoc/quickstart/tutorials'
destinationDirectory.set( gettingStartedGuideHtmlDir )
archiveFileName = 'hibernate-tutorials.zip'
expand(
version: project.version,
slf4j: "2.0.7",
junit: testLibs.versions.junit4.get(),
h2: dbLibs.versions.h2.get()
)
}
def renderGettingStartedGuidesTask = tasks.register( 'renderGettingStartedGuides' ) { task ->
task.group = "Documentation"
task.description = 'Renders the Getting Started Guide in all formats, as well as the acccompanying tutorial zip.'
task.dependsOn renderGettingStartedGuideHtmlTask, renderGettingStartedGuidePdfTask, buildTutorialZipTask
}
// Introduction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def renderIntroductionHtmlTask = tasks.register( 'renderIntroductionHtml', AsciidoctorTask ) { task ->
group = "Documentation"
description = 'Renders the Introduction in HTML format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
sourceDir = file( 'src/main/asciidoc/introduction' )
sources 'Hibernate_Introduction.adoc'
outputDir = "$buildDir/asciidoc/introduction/html_single"
attributes linkcss: true,
stylesheet: "css/hibernate.css",
docinfo: 'private',
jpaJavadocUrlPrefix: "https://javaee.github.io/javaee-spec/javadocs/javax/persistence/"
resources {
from( 'src/main/asciidoc/introduction/' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'css/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'js/**'
}
}
}
def renderIntroductionPdfTask = tasks.register( 'renderIntroductionPdf', AsciidoctorPdfTask ) { task ->
group = "Documentation"
description = 'Renders the Introduction in PDF format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
baseDir = file( 'src/main/asciidoc/introduction' )
sourceDir = file( 'src/main/asciidoc/introduction' )
sources 'Hibernate_Introduction.adoc'
outputDir = "$buildDir/asciidoc/introduction/pdf"
attributes jpaJavadocUrlPrefix: "https://javaee.github.io/javaee-spec/javadocs/javax/persistence/"
}
//noinspection GroovyUnusedAssignment
def renderIntroductionGuidesTask = tasks.register( "renderIntroductionGuides" ) { task ->
group = "Documentation"
description = 'Renders the Introduction Guide in all formats.'
task.dependsOn renderIntroductionHtmlTask, renderIntroductionPdfTask
tasks.buildDocs.dependsOn task
}
// HQL Guide ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def renderQueryLanguageGuideHtmlTask = tasks.register( 'renderQueryLanguageGuideHtml', AsciidoctorTask ) { task ->
task.group = "Documentation"
task.description = 'Renders the Query Language document in HTML format using Asciidoctor.'
task.inputs.property "hibernate-version", project.ormVersion
task.sourceDir = file( 'src/main/asciidoc/querylanguage' )
task.sources 'Hibernate_Query_Language.adoc'
task.outputDir = layout.buildDirectory.dir( "asciidoc/querylanguage/html_single" )
task.attributes linkcss: true,
stylesheet: "css/hibernate.css",
docinfo: 'private',
jpaJavadocUrlPrefix: "https://javaee.github.io/javaee-spec/javadocs/javax/persistence/"
task.resources {
from( 'src/main/asciidoc/querylanguage/' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'css/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'js/**'
}
}
}
def renderQueryLanguageGuidePdfTask = tasks.register( 'renderQueryLanguageGuidePdf', AsciidoctorPdfTask ) { task ->
group = "Documentation"
description = 'Renders the Query Language document in PDF format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
sourceDir = file( 'src/main/asciidoc/querylanguage' )
baseDir = file( 'src/main/asciidoc/querylanguage' )
sources {
include 'Hibernate_Query_Language.adoc'
}
outputDir = layout.buildDirectory.dir( "asciidoc/querylanguage/pdf" )
attributes jpaJavadocUrlPrefix: "https://javaee.github.io/javaee-spec/javadocs/javax/persistence/"
}
//noinspection GroovyUnusedAssignment
def renderQueryLanguageGuidesTask = tasks.register( 'renderQueryLanguageGuides' ) { task ->
group = "Documentation"
description = 'Renders Query Language Guide in all formats.'
task.dependsOn renderQueryLanguageGuideHtmlTask
task.dependsOn renderQueryLanguageGuidePdfTask
tasks.buildDocs.dependsOn task
}
// User Guide ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
settingsDocumentation {
sections {
core {
settingsClassName = "org.hibernate.cfg.AvailableSettings"
projectPath = ":hibernate-core"
}
envers {
settingsClassName = "org.hibernate.envers.configuration.EnversSettings"
projectPath = ":hibernate-envers"
}
jcache {
settingsClassName = "org.hibernate.cache.jcache.ConfigSettings"
projectPath = ":hibernate-jcache"
}
}
}
def generateSettingsDocTask = tasks.named( "generateSettingsDoc" ) {
dependsOn aggregateJavadocsTask
}
def renderUserGuideHtmlTask = tasks.register( 'renderUserGuideHtml', AsciidoctorTask ) { task ->
group = "Documentation"
description = 'Renders the User Guides in HTML format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
dependsOn generateSettingsDocTask
sourceDir = file( 'src/main/asciidoc/userguide' )
sources {
include 'Hibernate_User_Guide.adoc'
}
outputDir = "$buildDir/asciidoc/userguide/html_single"
attributes linkcss: true,
stylesheet: "css/hibernate.css",
docinfo: 'private',
jpaJavadocUrlPrefix: "https://javaee.github.io/javaee-spec/javadocs/javax/persistence/"
resources {
from( 'src/main/asciidoc/userguide/' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'css/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'js/**'
}
}
}
def renderUserGuidesTask = tasks.register( 'renderUserGuides' ) { task ->
task.group = "Documentation"
task.description = 'Renders the User Guides in all formats.'
task.dependsOn( renderUserGuideHtmlTask )
}
// Integration Guide ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def renderIntegrationGuideHtmlTask = tasks.register( "renderIntegrationGuideHtml", AsciidoctorTask ) { task->
group = "Documentation"
description = 'Renders the User Guides in HTML format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
sourceDir = file( 'src/main/asciidoc/integrationguide' )
sources {
include 'Hibernate_Integration_Guide.adoc'
}
outputDir = project.layout.buildDirectory.dir( 'asciidoc/integrationguide/html_single' )
attributes linkcss: true,
stylesheet: "css/hibernate.css"
resources {
from( 'src/main/asciidoc/integrationguide/' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'css/**'
}
}
}
def renderIntegrationGuidesTask = tasks.register( "renderIntegrationGuides" ) { task ->
group = "Documentation"
description = 'Renders all formats of the User Guide.'
task.dependsOn renderIntegrationGuideHtmlTask
tasks.buildDocs.dependsOn task
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Migration Guide
def renderMigrationGuideTask = tasks.register( "renderMigrationGuide", AsciidoctorTask ) { task ->
group = "Documentation"
description = 'Renders the Migration Guide in HTML format using Asciidoctor.'
inputs.property "hibernate-version", project.ormVersion
sources {
include rootProject.layout.projectDirectory.file( 'migration-guide.adoc' ).asFile.canonicalPath
}
attributes linkcss: true,
stylesheet: "css/hibernate.css"
resources {
from( 'src/main/style/asciidoctor' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'css/**'
}
}
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ORM Reports
def renderLoggingReportTask = tasks.register( 'renderLoggingReport', AsciidoctorTask ) { task ->
task.group = "hibernate-reports"
task.description = 'Renders the logging report (generated LoggingReportTask) by in HTML format using Asciidoctor.'
task.dependsOn "generateLoggingReport"
task.inputs.property "version", project.ormVersion
task.sourceDir = layout.buildDirectory.dir( 'orm/generated/logging' )
task.sources 'logging.adoc'
task.outputDir = project.layout.buildDirectory.dir( 'asciidoc/logging' )
task.attributes linkcss: true,
stylesheet: "css/hibernate.css"
task.resources {
from( 'src/main/style/asciidoctor' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'css/**'
}
}
}
def renderDialectReportTask = tasks.register( 'renderDialectReport', AsciidoctorTask ) { task ->
task.group = "hibernate-reports"
task.description = 'Renders the supported Dialect report in HTML format using Asciidoctor.'
task.dependsOn "generateDialectReport"
task.inputs.property "version", project.ormVersion
task.sourceDir = layout.buildDirectory.dir( 'orm/generated/dialect' )
task.sources 'dialect.adoc'
task.outputDir = project.layout.buildDirectory.dir( 'asciidoc/dialect' )
task.attributes linkcss: true,
stylesheet: "css/hibernate.css"
task.resources {
from( 'src/main/style/asciidoctor' ) {
include 'images/**'
}
from( 'src/main/style/asciidoctor' ) {
include 'css/**'
}
}
}
def generateReportsTask = tasks.named( "generateReports" ) {
dependsOn renderLoggingReportTask, renderDialectReportTask
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Overall grouping tasks
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def buildDocsTask = tasks.register( 'buildDocs' ) { task ->
task.group = 'Documentation'
task.description = 'Grouping task for performing all documentation building tasks'
task.dependsOn aggregateJavadocsTask
task.dependsOn renderGettingStartedGuidesTask
task.dependsOn renderIntroductionGuidesTask
task.dependsOn renderUserGuidesTask
task.dependsOn renderQueryLanguageGuidesTask
task.dependsOn renderIntegrationGuidesTask
task.dependsOn renderTopicalGuidesTask
task.dependsOn generateReportsTask
task.dependsOn renderMigrationGuideTask
}
//noinspection GroovyUnusedAssignment
def buildDocsForPublishingTask = tasks.register( 'buildDocsForPublishing' ) { task ->
task.group = 'Documentation'
task.description = 'Grouping task for building all documentation for publishing (release)'
task.dependsOn buildDocsTask
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tasks.withType(AsciidoctorTask).configureEach {
baseDirFollowsSourceDir()
outputOptions {
separateOutputDirs = false
backends 'html5'
}
}