/* * 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 . */ 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" ) }