468 lines
15 KiB
Groovy
468 lines
15 KiB
Groovy
apply plugin: 'eclipse'
|
|
apply plugin: 'idea'
|
|
apply from: "./libraries.gradle"
|
|
|
|
allprojects {
|
|
repositories {
|
|
mavenCentral()
|
|
mavenLocal()
|
|
|
|
maven {
|
|
name 'jboss-nexus'
|
|
url "http://repository.jboss.org/nexus/content/groups/public/"
|
|
}
|
|
maven {
|
|
name "jboss-snapshots"
|
|
url "http://snapshots.jboss.org/maven2/"
|
|
}
|
|
}
|
|
}
|
|
|
|
buildscript {
|
|
repositories {
|
|
mavenCentral()
|
|
mavenLocal()
|
|
|
|
maven {
|
|
name 'jboss-nexus'
|
|
url "http://repository.jboss.org/nexus/content/groups/public/"
|
|
}
|
|
maven {
|
|
name "jboss-snapshots"
|
|
url "http://snapshots.jboss.org/maven2/"
|
|
}
|
|
}
|
|
dependencies {
|
|
classpath 'org.hibernate.build.gradle:gradle-maven-publish-auth:2.0.1'
|
|
classpath 'org.hibernate.build.gradle:hibernate-matrix-testing:1.0.0-SNAPSHOT'
|
|
classpath 'org.hibernate.build.gradle:version-injection-plugin:1.0.0'
|
|
}
|
|
}
|
|
|
|
ext {
|
|
expectedGradleVersion = '1.9'
|
|
hibernateTargetVersion = '5.0.0-SNAPSHOT'
|
|
javaLanguageLevel = '1.6'
|
|
|
|
osgiExportVersion = hibernateTargetVersion.replaceAll( "-SNAPSHOT", ".SNAPSHOT" )
|
|
}
|
|
|
|
idea {
|
|
project {
|
|
languageLevel = javaLanguageLevel
|
|
ipr {
|
|
withXml { provider ->
|
|
provider.node.component.find { it.@name == 'VcsDirectoryMappings' }.mapping.@vcs = 'Git'
|
|
def maxHeapSizeConfig = provider.node.component.find { it.@name == 'JavacSettings' }
|
|
if( maxHeapSizeConfig == null ){
|
|
def javacSettingsNode = provider.node.appendNode('component',[name: 'JavacSettings'])
|
|
javacSettingsNode.appendNode('option', [name:"MAXIMUM_HEAP_SIZE", value:"512"])
|
|
}
|
|
}
|
|
beforeMerged { project ->
|
|
project.modulePaths.clear()
|
|
}
|
|
}
|
|
}
|
|
module {
|
|
name = "hibernate-orm"
|
|
}
|
|
}
|
|
|
|
// Used in POM customization. Each sub-project overrides ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
def pomName() {
|
|
return "A Hibernate O/RM module"
|
|
}
|
|
def pomDescription() {
|
|
return "A module of the Hibernate O/RM project"
|
|
}
|
|
// Used in MANIFEST.MF for OSGi Bundles
|
|
def osgiDescription() {
|
|
// by default just reuse the pomDescription
|
|
return pomDescription()
|
|
}
|
|
|
|
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
subprojects { subProject ->
|
|
apply plugin: 'idea'
|
|
apply plugin: 'eclipse'
|
|
|
|
defaultTasks 'build'
|
|
|
|
group = 'org.hibernate'
|
|
version = rootProject.hibernateTargetVersion
|
|
ext.exportPackageVersion = rootProject.osgiExportVersion
|
|
|
|
// minimize changes, at least for now (gradle uses 'build' by default)..
|
|
buildDir = "target"
|
|
|
|
// disable Java 8's doclint (javadoc validation) tool
|
|
if ( JavaVersion.current().isJava8Compatible() ) {
|
|
tasks.withType(Javadoc) {
|
|
// i give up. For now we simply disable javadoc against Java 8 JDK...
|
|
// we also seem to be hitting http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6442982
|
|
// java.lang.ClassCastException: com.sun.tools.javadoc.MethodDocImpl cannot be cast to com.sun.tools.javadoc.AnnotationTypeElementDocImpl
|
|
|
|
enabled = false
|
|
|
|
// ultimately we will still likely need to tweak the doclint settings
|
|
}
|
|
}
|
|
|
|
if ( subProject.name.startsWith( 'release' ) || subProject.name.startsWith( 'documentation' ) ) {
|
|
return;
|
|
}
|
|
|
|
// everything below here in the closure applies to java projects
|
|
apply plugin: 'java'
|
|
apply plugin: 'maven-publish'
|
|
apply plugin: 'maven-publish-auth'
|
|
apply plugin: 'osgi'
|
|
|
|
apply from: "${rootProject.projectDir}/source-generation.gradle"
|
|
|
|
apply plugin: 'findbugs'
|
|
apply plugin: 'checkstyle'
|
|
apply plugin: 'build-dashboard'
|
|
apply plugin: 'project-report'
|
|
|
|
configurations {
|
|
provided {
|
|
// todo : need to make sure these are non-exported
|
|
description = 'Non-exported compile-time dependencies.'
|
|
}
|
|
jbossLoggingTool {
|
|
description = "Dependencies for running the JBoss logging AnnotationProcessor tool"
|
|
}
|
|
jaxb {
|
|
description = 'Dependencies for running ant xjc (jaxb class generation)'
|
|
}
|
|
configurations {
|
|
all*.exclude group: 'xml-apis', module: 'xml-apis'
|
|
}
|
|
animalSniffer
|
|
javaApiSignature
|
|
}
|
|
|
|
// appropriately inject the common dependencies into each sub-project
|
|
dependencies {
|
|
compile( libraries.logging )
|
|
compile( libraries.logging_annotations )
|
|
compile( libraries.logging_processor )
|
|
|
|
testCompile( libraries.junit )
|
|
testCompile( libraries.byteman )
|
|
testCompile( libraries.byteman_install )
|
|
testCompile( libraries.byteman_bmunit )
|
|
|
|
testRuntime( libraries.log4j )
|
|
testRuntime( libraries.javassist )
|
|
testRuntime( libraries.h2 )
|
|
|
|
jaxb( libraries.jaxb ){
|
|
exclude group: 'javax.xml.stream'
|
|
}
|
|
jaxb( libraries.jaxb )
|
|
jaxb( libraries.jaxb2_basics )
|
|
jaxb( libraries.jaxb2_ant )
|
|
jaxb( libraries.jaxb2_jaxb )
|
|
jaxb( libraries.jaxb2_jaxb_xjc )
|
|
|
|
// we need to use asm 5 for java 8 parsing
|
|
animalSniffer( libraries.animal_sniffer ) {
|
|
exclude group: 'org.ow2.asm'
|
|
}
|
|
animalSniffer( 'org.ow2.asm:asm-all:5.0.2' ) { force=true }
|
|
|
|
javaApiSignature ( libraries.java16_signature )
|
|
}
|
|
|
|
// mac-specific stuff ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
ext.toolsJar = file("${System.getProperty('java.home')}/../lib/tools.jar")
|
|
if ( ext.toolsJar.exists() ) {
|
|
dependencies{
|
|
testCompile files( toolsJar )
|
|
}
|
|
}
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
targetCompatibility = rootProject.javaLanguageLevel
|
|
sourceCompatibility = rootProject.javaLanguageLevel
|
|
|
|
task compile
|
|
compile.dependsOn compileJava, processResources, compileTestJava, processTestResources
|
|
|
|
sourceSets.main {
|
|
compileClasspath += configurations.provided
|
|
}
|
|
|
|
tasks.withType( JavaCompile.class ).all { task->
|
|
task.options.compilerArgs += [
|
|
"-nowarn",
|
|
"-encoding", "UTF-8",
|
|
"-source", rootProject.javaLanguageLevel,
|
|
"-target", rootProject.javaLanguageLevel
|
|
]
|
|
}
|
|
|
|
jar {
|
|
manifest = osgiManifest {
|
|
// GRADLE-1411: Even if we override Imports and Exports
|
|
// auto-generation with instructions, classesDir and classpath
|
|
// need to be here (temporarily).
|
|
classesDir = sourceSets.main.output.classesDir
|
|
classpath = configurations.runtime
|
|
|
|
instruction 'Import-Package',
|
|
// Temporarily support JTA 1.1 -- Karaf and other frameworks still
|
|
// use it. Without this, the plugin generates [1.2,2).
|
|
'javax.transaction;version="[1.1,2)"',
|
|
// Tell Gradle OSGi to still dynamically import the other packages.
|
|
// IMPORTANT: Do not include the * in the modules' .gradle files.
|
|
// If it exists more than once, the manifest will physically contain a *.
|
|
'*'
|
|
|
|
instruction 'Bundle-Vendor', 'Hibernate.org'
|
|
instruction 'Bundle-Description', subProject.osgiDescription()
|
|
instruction 'Implementation-Url', 'http://hibernate.org'
|
|
instruction 'Implementation-Version', version
|
|
instruction 'Implementation-Vendor', 'Hibernate.org'
|
|
instruction 'Implementation-Vendor-Id', 'org.hibernate'
|
|
}
|
|
}
|
|
|
|
test {
|
|
systemProperties['hibernate.test.validatefailureexpected'] = true
|
|
systemProperties += System.properties.findAll { it.key.startsWith( "hibernate.") }
|
|
maxHeapSize = "1024m"
|
|
// Not strictly needed but useful to attach a profiler:
|
|
jvmArgs '-XX:MaxPermSize=256m'
|
|
}
|
|
|
|
processTestResources.doLast( {
|
|
copy {
|
|
from( sourceSets.test.java.srcDirs ) {
|
|
include '**/*.properties'
|
|
include '**/*.xml'
|
|
}
|
|
into sourceSets.test.output.classesDir
|
|
}
|
|
} )
|
|
|
|
idea {
|
|
module {
|
|
iml {
|
|
beforeMerged { module ->
|
|
module.dependencies.clear()
|
|
module.excludeFolders.clear()
|
|
}
|
|
whenMerged { module ->
|
|
module.dependencies*.exported = true
|
|
module.excludeFolders += module.pathFactory.path(file(".gradle"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/bundles"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/classes"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/dependency-cache"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/libs"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/reports"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/test-results"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/tmp"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/matrix"))
|
|
module.excludeFolders += module.pathFactory.path(file("$buildDir/resources"))
|
|
module.excludeFolders -= module.pathFactory.path(file("$buildDir"))
|
|
}
|
|
}
|
|
downloadSources = true
|
|
scopes.COMPILE.plus += configurations.provided
|
|
}
|
|
}
|
|
|
|
eclipse {
|
|
classpath {
|
|
plusConfigurations.add( configurations.provided )
|
|
}
|
|
}
|
|
|
|
// eclipseClasspath will not add sources to classpath unless the dirs actually exist.
|
|
// TODO: Eclipse's annotation processor handling is also fairly stupid (and completely lacks in the
|
|
// Gradle plugin). For now, just compile first in order to get the logging classes.
|
|
eclipseClasspath.dependsOn generateSources
|
|
|
|
|
|
// Animal Sniffer ~~~~~~~~~~~~~~~~~~
|
|
// add animal sniffer Java API checking to the main compile tasks
|
|
|
|
// copy the resolved Animal Sniffer signature dependency artifact to a known location and name
|
|
task copyJavaApiSignature(type: Copy) {
|
|
from configurations.javaApiSignature
|
|
into "$buildDir/javaApiSignature/"
|
|
rename '.*signature', 'javaApi.signature'
|
|
}
|
|
|
|
// prepare the Animal Sniffer signature copy every time (before) we compile
|
|
compileJava.dependsOn copyJavaApiSignature
|
|
|
|
// and then after compilation, run the Animal Sniffer tool
|
|
compileJava.doLast {
|
|
ant.taskdef(
|
|
name: 'animalSniffer',
|
|
classname: 'org.codehaus.mojo.animal_sniffer.ant.CheckSignatureTask',
|
|
classpath: configurations.animalSniffer.asPath
|
|
)
|
|
|
|
ant.animalSniffer(
|
|
signature: "$buildDir/javaApiSignature/javaApi.signature",
|
|
classpath: sourceSets.main.compileClasspath.asPath) {
|
|
path( path: sourceSets.main.output.classesDir )
|
|
}
|
|
}
|
|
|
|
// specialized API/SPI checkstyle tasks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
task checkstylePublicSources(type: Checkstyle) {
|
|
checkstyleClasspath = checkstyleMain.checkstyleClasspath
|
|
classpath = checkstyleMain.classpath
|
|
configFile = rootProject.file( 'shared/config/checkstyle/checkstyle.xml' )
|
|
source subProject.sourceSets.main.java.srcDirs
|
|
// exclude generated sources
|
|
exclude '**/generated-src/**'
|
|
// because cfg package is a mess mainly from annotation stuff
|
|
exclude '**/org/hibernate/cfg/**'
|
|
exclude '**/org/hibernate/cfg/*'
|
|
// because this should only report on api/spi
|
|
exclude '**/internal/**'
|
|
exclude '**/internal/*'
|
|
ignoreFailures = false
|
|
showViolations = true
|
|
reports {
|
|
xml {
|
|
destination "$buildDir/reports/checkstyle/public.xml"
|
|
}
|
|
}
|
|
}
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
// Report configs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
checkstyle {
|
|
sourceSets = [ subProject.sourceSets.main ]
|
|
configFile = rootProject.file( 'shared/config/checkstyle/checkstyle.xml' )
|
|
showViolations = false
|
|
ignoreFailures = true
|
|
}
|
|
// exclude generated sources
|
|
// unfortunately this nice easy approach does not seem to work : http://forums.gradle.org/gradle/topics/specify_excludes_to_checkstyle_task
|
|
//checkstyleMain.exclude '**/generated-src/**'
|
|
checkstyleMain.exclude '**/org/hibernate/hql/internal/antlr/**'
|
|
checkstyleMain.exclude '**/org/hibernate/hql/internal/antlr/*'
|
|
checkstyleMain.exclude '**/org/hibernate/sql/ordering/antlr/*'
|
|
checkstyleMain.exclude '**/*_$logger*'
|
|
checkstyleMain.exclude '**/org/hibernate/internal/jaxb/**'
|
|
// because cfg package is a mess mainly from annotation stuff
|
|
checkstyleMain.exclude '**/org/hibernate/cfg/**'
|
|
checkstyleMain.exclude '**/org/hibernate/cfg/*'
|
|
|
|
findbugs {
|
|
sourceSets = [ subProject.sourceSets.main, subProject.sourceSets.test ]
|
|
ignoreFailures = true
|
|
}
|
|
// exclude generated sources
|
|
// unfortunately this nice easy approach does not seem to work : http://forums.gradle.org/gradle/topics/specify_excludes_to_checkstyle_task
|
|
//findbugsMain.exclude '**/generated-src/**'
|
|
findbugsMain.exclude '**/org/hibernate/hql/internal/antlr/**'
|
|
findbugsMain.exclude '**/org/hibernate/hql/internal/antlr/*'
|
|
findbugsMain.exclude '**/org/hibernate/sql/ordering/antlr/*'
|
|
findbugsMain.exclude '**/*_$logger*'
|
|
findbugsMain.exclude '**/org/hibernate/internal/jaxb/**'
|
|
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
publishing {
|
|
publications {
|
|
mavenJava(MavenPublication) {
|
|
from components.java
|
|
|
|
artifact sourcesJar {
|
|
classifier "sources"
|
|
}
|
|
|
|
pom.withXml {
|
|
// append additional metadata
|
|
asNode().children().last() + {
|
|
resolveStrategy = Closure.DELEGATE_FIRST
|
|
|
|
name subProject.pomName()
|
|
description subProject.pomDescription()
|
|
url 'http://hibernate.org'
|
|
organization {
|
|
name 'Hibernate.org'
|
|
url 'http://hibernate.org'
|
|
}
|
|
issueManagement {
|
|
system 'jira'
|
|
url 'https://hibernate.atlassian.net/browse/HHH'
|
|
}
|
|
scm {
|
|
url 'http://github.com/hibernate/hibernate-orm'
|
|
connection 'scm:git:http://github.com/hibernate/hibernate-orm.git'
|
|
developerConnection 'scm:git:git@github.com:hibernate/hibernate-orm.git'
|
|
}
|
|
licenses {
|
|
license {
|
|
name 'GNU Lesser General Public License'
|
|
url 'http://www.gnu.org/licenses/lgpl-2.1.html'
|
|
comments 'See discussion at http://hibernate.org/license for more details.'
|
|
distribution 'repo'
|
|
}
|
|
}
|
|
developers {
|
|
developer {
|
|
id 'hibernate-team'
|
|
name 'The Hibernate Development Team'
|
|
organization 'Hibernate.org'
|
|
organizationUrl 'http://hibernate.org'
|
|
}
|
|
}
|
|
}
|
|
|
|
// TEMPORARY : currently Gradle Publishing feature is exporting dependencies as 'runtime' scope,
|
|
// rather than 'compile'; fix that.
|
|
asNode().dependencies[0].dependency.each {
|
|
it.scope[0].value = 'compile'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
repositories {
|
|
maven {
|
|
if ( subProject.version.endsWith( 'SNAPSHOT' ) ) {
|
|
name 'jboss-snapshots-repository'
|
|
url 'https://repository.jboss.org/nexus/content/repositories/snapshots'
|
|
}
|
|
else {
|
|
name 'jboss-releases-repository'
|
|
url 'https://repository.jboss.org/nexus/service/local/staging/deploy/maven2/'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
model {
|
|
tasks.generatePomFileForMavenJavaPublication {
|
|
destination = file( "$project.buildDir/generated-pom.xml" )
|
|
}
|
|
}
|
|
|
|
task sourcesJar(type: Jar, dependsOn: compileJava) {
|
|
from sourceSets.main.allSource
|
|
classifier = 'sources'
|
|
}
|
|
}
|
|
|
|
task release(type: Task, dependsOn: 'release:release')
|
|
|
|
task wrapper(type: Wrapper) {
|
|
gradleVersion = expectedGradleVersion
|
|
}
|