392 lines
13 KiB
Groovy
392 lines
13 KiB
Groovy
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 <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/"
|
|
}
|
|
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<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 © 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" )
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// 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
|