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)' } } 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' options.docletpath = configurations.asciidoclet.files.asType(List) options.doclet = 'org.asciidoctor.Asciidoclet' 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 apiPackages = new HashSet() Set spiPackages = new HashSet() Set internalPackages = new HashSet() 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 © 2001-$copyrightYear Red Hat, Inc. All Rights Reserved." use = true 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