hibernate-orm/hibernate-orm-modules/hibernate-orm-modules.gradle

217 lines
7.5 KiB
Groovy
Raw Normal View History

/*
* 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>.
*/
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'maven-publish-auth'
apply plugin: 'build-dashboard'
apply plugin: 'project-report'
apply plugin: org.hibernate.build.HibernateBuildPlugin
apply plugin: 'idea'
buildDir = "target"
ext {
// Exact ORM version, e.g. "5.1.1.Final"
slot = rootProject.hibernateFullVersion
// Just the minor ORM version, e.g. "5.1"; Is used as an alias for the exact version
minorSlot = rootProject.hibernateMajorMinorVersion
final String[] wildFlyVersionComponents = wildflyVersion.split( '\\.' );
// e.g. "10" for WildFly 10.x
wildFlyMajorVersion = wildFlyVersionComponents[0];
wildFlyJPA22PatchVersion = '1.0.0.Beta1'
artifactClassifier = "wildfly-${wildFlyMajorVersion}-dist"
moduleXmlStagingDir = file( "$buildDir/tmp/modules" )
wildFlyInstallDirBase = rootProject.buildDir
wildFlyInstallDir = "${rootProject.buildDir.absolutePath}/wildfly-${wildflyVersion}"
expandedModuleProperties = [
slot: slot,
minorSlot: minorSlot,
version: rootProject.hibernateTargetVersion,
wildflyVersion: wildflyVersion,
byteBuddyVersion: byteBuddyVersion
];
}
mavenPom {
name = "Hibernate ORM modules for WildFly ${wildFlyMajorVersion}"
description = "Hibernate ORM modules for WildFly ${wildFlyMajorVersion}"
}
configurations {
jipijapa {
transitive = false
}
wildflyDist
wildflyJPA22Patch
byteBuddy
}
dependencies {
jipijapa "org.wildfly:jipijapa-hibernate5:${wildflyVersion}"
wildflyDist "org.wildfly:wildfly-dist:${wildflyVersion}@zip"
byteBuddy libraries.byteBuddy
wildflyJPA22Patch "org.hibernate.javax.persistence:hibernate-jpa-api-2.2-wildflymodules:${wildFlyJPA22PatchVersion}:wildfly-${wildflyVersion}-patch@zip"
testCompile project( ":hibernate-core" )
testCompile project( ":hibernate-envers" )
testCompile libraries.junit
testCompile libraries.arquillian_junit_container
testCompile libraries.arquillian_protocol_servlet
testCompile libraries.shrinkwrap_descriptors_api_javaee
testCompile libraries.shrinkwrap_descriptors_impl_javaee
testCompile libraries.wildfly_arquillian_container_managed
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Java 9 ftw!
if ( JavaVersion.current().isJava9Compatible() ) {
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' )
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// tasks related to creating and publishing the module zip
task copyAndExpandModuleXml(type: Copy) {
description 'Performs a copy of the XML files defining the module into a staging directory for the purpose of performing token-replacement'
inputs.properties( expandedModuleProperties as Map )
into moduleXmlStagingDir
expand( expandedModuleProperties as Map )
into( 'org/hibernate/' + slot ) {
from 'src/main/modules/org/hibernate/core'
}
into( 'org/hibernate/infinispan/' + slot ) {
from 'src/main/modules/org/hibernate/infinispan'
}
into( 'org/hibernate/jipijapa-hibernate5/' + slot ) {
from 'src/main/modules/org/hibernate/jipijapa-hibernate5'
}
// create alias for the short name
into( 'org/hibernate/' + minorSlot ) {
from 'src/main/aliases/org/hibernate/core'
}
into( 'org/hibernate/infinispan/' + minorSlot ) {
from 'src/main/aliases/org/hibernate/infinispan'
}
into( 'org/hibernate/jipijapa-hibernate5/' + minorSlot ) {
from 'src/main/aliases/org/hibernate/jipijapa-hibernate5'
}
}
task createModulesZip(type: Zip, dependsOn: [copyAndExpandModuleXml]) {
baseName 'hibernate-orm-modules'
classifier artifactClassifier
from moduleXmlStagingDir
into( 'org/hibernate/' + slot ) {
from parent.project( 'hibernate-core' ).configurations.archives.allArtifacts.files
from parent.project( 'hibernate-envers' ).configurations.archives.allArtifacts.files
// also need Byte Buddy's jar
from configurations.byteBuddy
}
into( 'org/hibernate/infinispan/' + slot ) {
from parent.project( 'hibernate-infinispan' ).configurations.archives.allArtifacts.files.filter{ file -> !file.name.endsWith('-sources.jar') && !file.name.endsWith('-tests.jar') }
}
into( 'org/hibernate/jipijapa-hibernate5/' + slot ) {
from configurations.jipijapa
}
}
publishing {
publications {
mavenZip( MavenPublication ) {
artifact( createModulesZip ) {
classifier artifactClassifier
}
}
}
}
build.dependsOn createModulesZip
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// tasks related to in-container (Arquillian + WF) testing
task installWildFly(type: Copy) {
description = 'Downloads the WildFly distribution and installs it into a local directory (if needed)'
from {
configurations.wildflyDist.collect { zipTree(it) }
}
into wildFlyInstallDirBase
}
task patchWildFlytoJPA22(type: Copy, dependsOn: [installWildFly]) {
description = 'Patch the WildFly server to expose the JPA 2.2 API (instead of JPA 2.1)'
from configurations.wildflyJPA22Patch
into "$buildDir/jpa22-wildfly-patch"
doLast {
exec {
executable "$wildFlyInstallDirBase/wildfly-$wildflyVersion/bin/jboss-cli.sh"
//TODO find out how to reliably skip applying this patch when already applied?
//the current solution is close by making this task a 'Copy' rather than Exec,
//using the 'into' section as a marker for this being already done,
//but it's not very reliable so we need to enable 'ignoreExitValue'.
ignoreExitValue = true
args "patch apply $buildDir/jpa22-wildfly-patch/hibernate-jpa-api-2.2-wildflymodules-${wildFlyJPA22PatchVersion}-wildfly-$wildflyVersion-patch.zip"
}
}
}
task installHibernateModule( type:Copy, dependsOn: [createModulesZip, installWildFly]) {
duplicatesStrategy DuplicatesStrategy.EXCLUDE
from zipTree( createModulesZip.archivePath )
into "${wildFlyInstallDir}/modules"
}
task prepareWildFlyForTests( dependsOn: [installWildFly, installHibernateModule, patchWildFlytoJPA22] )
test.dependsOn prepareWildFlyForTests
processTestResources {
expand( wildFlyInstallDir: wildFlyInstallDir, arquillianDeploymentExportDir: "${rootProject.buildDir.absolutePath}/arquillian-deployments" )
}