hibernate-orm/documentation/documentation.gradle

255 lines
8.0 KiB
Groovy

/*
* 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>.
*/
buildscript {
repositories {
mavenCentral()
mavenLocal()
maven {
name 'jboss-nexus'
url "http://repository.jboss.org/nexus/content/groups/public/"
}
maven {
name 'Bintray Asciidoctor repo'
url 'http://dl.bintray.com/content/aalmiray/asciidoctor'
}
jcenter()
}
dependencies {
classpath "org.jboss.jdocbook:gradle-jdocbook:1.2.2"
classpath 'org.asciidoctor:asciidoctor-gradle-plugin:0.7.0'
}
}
apply plugin: "java"
apply plugin: "jdocbook"
apply from: "${rootProject.projectDir}/utilities.gradle"
defaultTasks 'buildDocs'
configurations {
asciidoclet {
description = 'Dependencies for Asciidoclet (the javadoc doclet tool for using Asciidoc)'
}
}
if ( JavaVersion.current().isJava8Compatible() ) {
tasks.withType( Javadoc ) {
options.addStringOption( 'Xdoclint:none', '-quiet' )
}
}
dependencies {
ext.pressgangVersion = '3.0.0'
asciidoclet 'org.asciidoctor:asciidoclet:0.+'
jdocbookXsl "org.jboss.pressgang:pressgang-xslt-ns:${pressgangVersion}"
jdocbookXsl "org.jboss.pressgang:pressgang-fonts:${pressgangVersion}"
jdocbookStyles "org.jboss.pressgang:pressgang-jdocbook-style:${pressgangVersion}"
}
task buildDocs {
group 'Documentation'
description 'Grouping task for performing all documentation building tasks'
}
// aggregated JavaDoc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
final File javadocDir = mkdir( new File( (File) project.buildDir, 'javadocs' ) );
/**
* Builds the JavaDocs aggregated (unified) across all the sub-projects
*/
task aggregateJavadocs(type: Javadoc) {
description = 'Builds the aggregated (unified) JavaDocs across all sub-projects'
final int copyrightYear = new GregorianCalendar().get( Calendar.YEAR );
// exclude any generated sources (this is not working: http://forums.gradle.org/gradle/topics/excluding_generated_source_from_javadoc)
exclude "**/generated-src/**"
// process each project, building up:
// 1) appropriate sources
// 2) classpath
// 3) the package list for groups
Set<String> apiPackages = new HashSet<String>()
Set<String> spiPackages = new HashSet<String>()
Set<String> internalPackages = new HashSet<String>()
parent.subprojects.each{ Project subProject->
// skip certain sub-projects
if ( ['release','documentation'].contains( subProject.name ) ) {
return;
}
// we only care about the main SourceSet...
source subProject.sourceSets.main.java
if( classpath ) {
classpath += subProject.sourceSets.main.output + subProject.sourceSets.main.compileClasspath
}
else {
classpath = subProject.sourceSets.main.output + subProject.sourceSets.main.compileClasspath
}
subProject.sourceSets.main.java.each { javaFile ->
final String packageName = determinePackageName( subProject.sourceSets.main.java, javaFile );
if ( packageName.endsWith( ".internal" ) || packageName.contains( ".internal." ) ) {
internalPackages.add( packageName );
}
else if ( packageName.endsWith( ".spi" ) || packageName.contains( ".spi." ) ) {
spiPackages.add( packageName );
}
else if ( packageName.startsWith( "org.hibernate.testing" ) ) {
// do nothing as testing support is already handled...
}
else {
apiPackages.add( packageName );
}
}
}
// apply standard config
maxMemory = '512m'
destinationDir = javadocDir
configure( options ) {
overview = rootProject.file( 'shared/javadoc/overview.html' )
stylesheetFile = rootProject.file( 'shared/javadoc/stylesheet.css' )
windowTitle = 'Hibernate JavaDocs'
docTitle = "Hibernate JavaDoc ($project.version)"
bottom = "Copyright &copy; 2001-$copyrightYear <a href=\"http://redhat.com\">Red Hat, Inc.</a> All Rights Reserved."
use = true
options.encoding = 'UTF-8'
links = [ 'http://download.oracle.com/javase/6/docs/api/', 'http://download.oracle.com/javaee/6/api/' ]
group( 'API', apiPackages.asList() )
group( 'SPI', spiPackages.asList() )
group( 'Internal', internalPackages.asList() )
group ( 'Testing Support', ['org.hibernate.testing*'] )
// ugh, http://issues.gradle.org/browse/GRADLE-1563
// tags ["todo:X"]
// work around:
addStringOption( "tag", "todo:X" )
}
doLast {
copy {
from rootProject.file( 'shared/javadoc/images' )
into new File( javadocDir, "/images" )
}
}
}
buildDocs.dependsOn aggregateJavadocs
// jDocBook ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
jdocbook {
// shared config
format('html_single') {
finalName = "index.html"
stylesheet = "classpath:/xslt/org/hibernate/jdocbook/xslt/xhtml-single.xsl"
}
format('html') {
finalName = "index.html"
stylesheet = "classpath:/xslt/org/hibernate/jdocbook/xslt/xhtml.xsl"
}
// book-specific config
quickstart {
masterSourceDocumentName = 'Hibernate_Getting_Started_Guide.xml'
}
devguide {
masterSourceDocumentName = 'Hibernate_Development_Guide.xml'
useRelativeImageUris = false
}
manual {
masterSourceDocumentName = 'HIBERNATE_-_Relational_Persistence_for_Idiomatic_Java.xml'
}
}
// todo : make this part of gradle-jdocbook.
// specifically the ability to supply ant-style resource for images (dir + include/exclude patterns)
stageStyles_devguide.doLast {
logger.lifecycle( "Staging devguide-specific style resources")
copy {
into project.file( 'target/docbook/stage/devguide/images' )
from project.file( 'src/main/docbook/devguide/en-US' )
include '**/images/*.png'
include '**/images/*.svg'
includeEmptyDirs = false
}
}
[ 'devguide', 'manual', 'quickstart' ].each { bookName ->
task "stageLocalStyles_$bookName"(type: Copy) {
into project.file( "target/docbook/stage/$bookName" )
from project.file( 'src/main/style' )
includeEmptyDirs = false
}
tasks[ "stageStyles_$bookName" ].dependsOn "stageLocalStyles_$bookName"
}
task buildTutorialZip(type: Zip) {
destinationDir = file( "target/work/tutorials" )
archiveName = 'hibernate-tutorials.zip'
from 'src/main/docbook/quickstart/tutorials'
expand(
version: project.version,
slf4j: "1.7.5",
junit: parent.junitVersion,
h2: parent.h2Version
)
}
buildDocs.dependsOn buildTutorialZip
buildDocs.doLast {
for ( File languageDir : dirList( "target/docbook/publish/quickstart" ) ) {
for ( File formatDir : dirList( languageDir ) ) {
final File copyDir = new File( formatDir, "files" );
copyDir.mkdirs();
ant.copy( file: buildTutorialZip.archivePath.getAbsolutePath(), todir: copyDir.getAbsolutePath() )
}
}
}
File[] dirList(String dirName) {
return dirList( (File) file(dirName) );
}
File[] dirList(File dir) {
return dir.listFiles({file -> file.isDirectory() } as FileFilter).sort();
}
// asciidoctor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
task asciidoctor(type: org.asciidoctor.gradle.AsciidoctorTask, group: 'Documentation') {
description = 'Generates the Asciidoc(tor) topical guides in HTML format.'
backend = 'html5'
sourceDir = file( 'src/main/asciidoc/topical' )
outputDir = new File("$buildDir/asciidoc/topical/html")
}
tasks.withType(org.asciidoctor.gradle.AsciidoctorTask) { docTask ->
options = [
logDocuments: true,
attributes: [
icons: 'font',
'source-highlighter': 'prettify',
experimental: true
]
]
}
buildDocs.dependsOn asciidoctor