apply plugin: 'base' apply plugin: 'idea' buildDir = "target" ideaModule { } // Javadocs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ javadocBuildDir = dir( buildDirName + "/documentation/javadocs" ) def copyRightYear = new java.util.GregorianCalendar().get( java.util.Calendar.YEAR ); task aggregateJavadocs(type: Javadoc) { // 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 ) ) { subProject.sourceSets.each { SourceSet sourceSet -> // skip certain source sets if ( ! ['test','matrix'].contains( sourceSet.name ) ) { source sourceSet.java if( classpath ) { classpath += sourceSet.classes + sourceSet.compileClasspath } else { classpath = sourceSet.classes + sourceSet.compileClasspath } sourceSet.java.each { javaFile -> final String packageName = determinePackageName( sourceSet.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 description = "Build the aggregated JavaDocs for all modules" maxMemory = '512m' destinationDir = javadocBuildDir.dir configure( options ) { overview = new File( projectDir, 'src/javadoc/overview.html' ) stylesheetFile = new File( projectDir, 'src/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" ) } } String determinePackageName(SourceDirectorySet sourceDirectorySet, File javaFile) { final javaFileAbsolutePath = javaFile.absolutePath; for ( File sourceDirectory : sourceDirectorySet.srcDirs ) { final String sourceDirectoryAbsolutePath = sourceDirectory.absolutePath; if ( javaFileAbsolutePath.startsWith( sourceDirectoryAbsolutePath ) ) { final String javaFileRelativePath = javaFileAbsolutePath.substring( sourceDirectoryAbsolutePath.length() + 1, javaFileAbsolutePath.lastIndexOf( File.separator ) ); return javaFileRelativePath.replace( File.separator, "." ); } } throw new RuntimeException( "ugh" ); } aggregateJavadocs.doLast { copy { from new File( projectDir, 'src/javadoc/images' ) into new File( javadocBuildDir.dir, "/images" ) } } // release bundles ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ releaseBuildDir = dir( buildDirName ) task prepareReleaseBundles( dependsOn: [parent.project( 'documentation' ).tasks.buildDocs,parent.project('hibernate-entitymanager' ).tasks.buildDocs,aggregateJavadocs] ) releaseCopySpec = copySpec { into( "hibernate-release-$project.version" ) { from new File( parent.projectDir, 'lgpl.txt' ) from new File( parent.projectDir, 'changelog.txt' ) from new File( parent.projectDir, 'hibernate_logo.gif' ) into('lib/required') { from parent.project( 'hibernate-core' ).configurations.provided.files { dep -> dep.name == 'jta' } from parent.project( 'hibernate-core' ).configurations.runtime from parent.project( 'hibernate-core' ).configurations.archives.allArtifactFiles.filter{ file -> !file.name.endsWith('-sources.jar') } // for now, from parent.project( 'hibernate-core' ).configurations.provided.files { dep -> dep.name == 'javassist' } } // into('lib/bytecode/javassist') { // from parent.project( 'hibernate-core' ).configurations.provided.files { dep -> dep.name == 'javassist' } // } into( 'lib/jpa' ) { from parent.project( 'hibernate-entitymanager' ).configurations.archives.allArtifactFiles.filter{ file -> !file.name.endsWith('-sources.jar') } } into( 'lib/envers' ) { from( ( parent.project( 'hibernate-envers' ).configurations.archives.allArtifactFiles.filter{ file -> !file.name.endsWith('-sources.jar') } + parent.project( 'hibernate-envers' ).configurations.runtime ) - parent.project( 'hibernate-core' ).configurations.runtime - parent.project( 'hibernate-core' ).configurations.archives.allArtifactFiles - parent.project( 'hibernate-entitymanager' ).configurations.runtime - parent.project( 'hibernate-entitymanager' ).configurations.archives.allArtifactFiles ) } // todo : this closure is problematic as it does not write into the hibernate-release-$project.version directory // due to http://issues.gradle.org/browse/GRADLE-1450 [ 'hibernate-c3p0', 'hibernate-proxool', 'hibernate-ehcache', 'hibernate-infinispan' ].each { feature -> final String shortName = feature.substring( 'hibernate-'.length() ); // WORKAROUND http://issues.gradle.org/browse/GRADLE-1450 // into('lib/optional/' + shortName) { owner.into('lib/optional/' + shortName) { from ( ( parent.project( feature ).configurations.archives.allArtifactFiles.filter{ file -> !file.name.endsWith('-sources.jar') } + parent.project( feature ).configurations.runtime ) - parent.project( 'hibernate-core' ).configurations.runtime - parent.project( 'hibernate-core' ).configurations.archives.allArtifactFiles ) } } into('documentation') { from new File( parent.project( 'documentation' ).buildDir, 'docbook/publish' ) } into('documentation/hem') { from new File( parent.project( 'hibernate-entitymanager' ).buildDir, 'docbook/publish' ) } into('documentation/javadocs') { from javadocBuildDir.dir } into( 'project' ) { from ( rootProject.projectDir ) { exclude( '.git' ) exclude( '.gitignore' ) exclude( 'changelog.txt' ) exclude( 'lgpl.txt' ) exclude( 'hibernate_logo.gif' ) exclude( 'tagRelease.sh' ) exclude( 'gradlew' ) exclude( 'gradlew.bat' ) exclude( 'wrapper/*' ) exclude( '**/.gradle/**' ) exclude( '**/target/**' ) exclude( '.idea' ) exclude( '**/*.ipr' ) exclude( '**/*.iml' ) exclude( '**/*.iws' ) exclude( '**/atlassian-ide-plugin.xml' ) exclude( '**/.classpath' ) exclude( '**/.project' ) exclude( '**/.settings' ) exclude( '**/.nbattrs' ) } } } } task buildReleaseZip( type: Zip, dependsOn: [prepareReleaseBundles] ) { description = "Build release bundle in ZIP format" baseName = 'hibernate-release' destinationDir = releaseBuildDir.dir with project.releaseCopySpec } task buildReleaseTgz( type: Tar, dependsOn: [prepareReleaseBundles] ) { description = "Build release bundle in GZIP format" baseName = 'hibernate-release' destinationDir = releaseBuildDir.dir compression = Compression.GZIP with project.releaseCopySpec } task buildReleaseBundles( dependsOn: [buildReleaseZip,buildReleaseTgz] ) { description = "Build release bundle in all formats" }