import org.apache.tools.ant.filters.ReplaceTokens import org.asciidoctor.gradle.AsciidoctorTask /* * 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 . */ buildscript { repositories { mavenCentral() mavenLocal() maven { name 'jboss-nexus' url "http://repository.jboss.org/nexus/content/groups/public/" } jcenter() } dependencies { classpath "org.jboss.jdocbook:gradle-jdocbook:1.2.2" classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.2' } } apply plugin: "java" apply plugin: "jdocbook" apply plugin: 'org.asciidoctor.convert' apply plugin: 'hibernate-matrix-testing' apply from: "${rootProject.projectDir}/utilities.gradle" defaultTasks 'buildDocs' configurations { asciidoclet { description = 'Dependencies for Asciidoclet (the javadoc doclet tool for using Asciidoc)' } //asciidoctor } if ( JavaVersion.current().isJava8Compatible() ) { tasks.withType( Javadoc ) { options.addStringOption( 'Xdoclint:none', '-quiet' ) } } dependencies { ext.pressgangVersion = '3.0.0' // asciidoctor 'org.asciidoctor:asciidoctorj:1.5.2' 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}" compile( libraries.jpa ) compile( project( ':hibernate-jpamodelgen' ) ) testCompile( 'org.apache.commons:commons-lang3:3.4' ) testCompile( project(':hibernate-core') ) testCompile( project(':hibernate-ehcache') ) testCompile( project(':hibernate-spatial') ) testCompile( project(path: ':hibernate-core', configuration: 'tests') ) testCompile( project(':hibernate-testing') ) testRuntime( libraries.h2 ) testRuntime( libraries.hsqldb ) testRuntime( libraries.postgresql ) testRuntime( libraries.mysql ) testRuntime( libraries.mariadb ) if (db.equalsIgnoreCase("oracle")) { dependencies { testRuntime( libraries.oracle ) } } if (db.equalsIgnoreCase("mssql")) { dependencies { testRuntime( libraries.mssql ) } } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Java 9 ftw! if ( JavaVersion.current().isJava9Compatible() ) { // The JDK used to run Gradle is Java 9+, and we assume that that is the same // JDK for executing tasks compile( 'com.sun.xml.bind:jaxb-impl:2.2.11' ) compile( 'org.glassfish.jaxb:jaxb-xjc:2.2.11' ) compile( 'org.jvnet.jaxb2_commons:jaxb2-basics:0.11.0' ) compile( 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.11.0' ) compile( 'javax:javaee-api:7.0' ) testCompile( 'com.sun.xml.bind:jaxb-impl:2.2.11' ) testCompile( 'org.glassfish.jaxb:jaxb-xjc:2.2.11' ) testCompile( 'org.jvnet.jaxb2_commons:jaxb2-basics:0.11.0' ) testCompile( 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.11.0' ) testCompile( 'javax:javaee-api:7.0' ) testRuntime( 'com.sun.xml.bind:jaxb-impl:2.2.11' ) testRuntime( 'org.glassfish.jaxb:jaxb-xjc:2.2.11' ) testRuntime( 'org.jvnet.jaxb2_commons:jaxb2-basics:0.11.0' ) testRuntime( 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.11.0' ) testRuntime( 'javax:javaee-api:7.0' ) } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } processTestResources.doLast( { copy { from( sourceSets.test.java.srcDirs ) { include '**/*.properties' include '**/*.xml' } into sourceSets.test.output.classesDir } copy { ext.targetDir = file( "${buildDir}/resources/test" ) from file('src/test/resources') into targetDir filter( ReplaceTokens, tokens: dbBundle[db] ); } } ) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // grouping tasks - declaration, see below for task dependency definitions // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ task buildDocs { group 'Documentation' description 'Grouping task for performing all documentation building tasks' } task buildDocsForPublishing { group 'Documentation' description 'Grouping task for building all documentation for publishing (release)' } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 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 apiPackages = new HashSet() Set spiPackages = new HashSet() Set internalPackages = new HashSet() parent.subprojects.each{ Project subProject-> // skip certain sub-projects if ( ['release','documentation', 'hibernate-orm-modules'].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 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" ) } } } // 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 userGuide { masterSourceDocumentName = 'Hibernate_User_Guide.xml' } integrationsGuide { masterSourceDocumentName = 'Hibernate_Integrations_Guide.xml' } mappingGuide { masterSourceDocumentName = 'Hibernate_Mapping_Guide.xml' } } [ 'integrationsGuide', 'userGuide', 'mappingGuide'].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" tasks[ "stageStyles_$bookName" ].doLast { logger.lifecycle( "Staging devguide-specific style resources") copy { into project.file( "target/docbook/stage/$bookName/images" ) from project.file( "src/main/docbook/$bookName/en-US" ) include '**/images/*.png' include '**/images/*.svg' includeEmptyDirs = false } } } asciidoctor { // we do not want it creating its "default task" enabled = false } // Topical Guides ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ task renderTopicalGuides(type: AsciidoctorTask, group: 'Documentation') { description = 'Renders the Topical Guides in HTML format using Asciidoctor.' sourceDir = file( 'src/main/asciidoc/topical' ) outputDir = new File("$buildDir/asciidoc/topical/html_single") backends "html5" separateOutputDirs false options logDocuments: true attributes icons: 'font', experimental: true, 'source-highlighter': 'prettify' } // Getting Started Guides (quick starts) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ task renderGettingStartedGuides(type: AsciidoctorTask, group: 'Documentation') { description = 'Renders the Getting Started Guides (quick starts) in HTML format using Asciidoctor.' sourceDir = file( 'src/main/asciidoc/quickstart/guides' ) outputDir = new File("$buildDir/asciidoc/quickstart/html_single") backends "html5" separateOutputDirs false options logDocuments: true attributes icons: 'font', experimental: true, 'source-highlighter': 'prettify' } task buildTutorialZip(type: Zip) { from 'src/main/asciidoc/quickstart/tutorials' destinationDir = tasks.renderGettingStartedGuides.outputDir archiveName = 'hibernate-tutorials.zip' expand( version: project.version, slf4j: "1.7.5", junit: parent.junitVersion, h2: parent.h2Version ) } renderGettingStartedGuides.dependsOn buildTutorialZip // Mapping Guides ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ task renderMappingGuide(type: AsciidoctorTask, group: 'Documentation') { description = 'Renders the Mapping Guides in HTML format using Asciidoctor.' sourceDir = file( 'src/main/asciidoc/mapping' ) outputDir = new File("$buildDir/asciidoc/mapping/html") backends "html5" separateOutputDirs false options logDocuments: true //attributes icons: 'font', experimental: true, 'source-highlighter': 'prettify', linkcss: true, stylesheet: "css/hibernate.css" attributes icons: 'font', experimental: true, 'source-highlighter': 'prettify', linkcss: true resources { from('src/main/asciidoc/') { include 'images/**' include 'css/**' } } } // User Guides ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ final String[] versionComponents = version.split( '\\.' ); final String majorMinorVersion = versionComponents[0] + '.' + versionComponents[1]; task renderUserGuide(type: AsciidoctorTask, group: 'Documentation') { description = 'Renders the User Guides in HTML format using Asciidoctor.' sourceDir = file( 'src/main/asciidoc/userguide' ) outputDir = new File("$buildDir/asciidoc/userguide/html_single") backends "html5" separateOutputDirs false options logDocuments: true attributes icons: 'font', experimental: true, 'source-highlighter': 'prettify', linkcss: true, stylesheet: "css/hibernate.css", majorMinorVersion: majorMinorVersion resources { from('src/main/asciidoc/userguide/') { include 'images/**' } from('src/main/style/asciidoctor') { include 'images/**' } from('src/main/style/asciidoctor') { include 'css/**' } } } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // grouping tasks // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buildDocs.dependsOn aggregateJavadocs buildDocs.dependsOn renderTopicalGuides buildDocs.dependsOn renderGettingStartedGuides buildDocs.dependsOn renderUserGuide // the jDocBook plugin already adds its main task as a dependency of the buildDocs task buildDocsForPublishing.dependsOn aggregateJavadocs buildDocsForPublishing.dependsOn renderTopicalGuides buildDocsForPublishing.dependsOn renderGettingStartedGuides buildDocsForPublishing.dependsOn renderUserGuide // only html-single to match what Asciidoctor currently offers //buildDocsForPublishing.dependsOn 'renderDocBook_integrationsGuide_en-US_html_single ' buildDocsForPublishing.dependsOn renderDocBook_integrationsGuide