import org.gradle.internal.jvm.Jvm /* * web: build.gradle * XNAT http://www.xnat.org * Copyright (c) 2016, Washington University School of Medicine * All Rights Reserved * * Released under the Simplified BSD. */ def vXnat = '1.7.1-SNAPSHOT' def vXnatStable = '1.7.0' def vXImgView = '1.0.0-SNAPSHOT' def vSpring = '4.2.7.RELEASE' def vSpringSecurity = '4.0.4.RELEASE' def vSwagger = '2.4.0' def vHibernate = '4.3.11.Final' def vEhcache = '2.6.11' def vJackson = '2.6.5' def vPostgreSQL = '9.4.1209.jre7' def vServletApi = '3.1.0' def vTomcat = '7.0.68' def vCargo = '1.4.18' def vSlf4j = '1.7.21' def vLog4j = '1.2.17' def vJunit = '4.12' def vSaxon = '9.1.0.8' def vGroovy = '2.4.7' def vJython = '2.7.0' group 'org.nrg.xnat' version = '1.7.1-SNAPSHOT' buildscript { repositories { mavenLocal() jcenter() mavenCentral() maven { url "https://plugins.gradle.org/m2/" } maven { url 'https://nrgxnat.jfrog.io/nrgxnat/libs-release' name 'XNAT Release Repository' } maven { url 'https://nrgxnat.jfrog.io/nrgxnat/libs-snapshot' name 'XNAT Snapshot Repository' } } dependencies { classpath "com.bmuschko:gradle-cargo-plugin:2.2.2" classpath "com.bmuschko:gradle-tomcat-plugin:2.2.4" classpath "gradle.plugin.com.palantir.gradle.gitversion:gradle-git-version:0.5.2" } } apply plugin: 'groovy' apply plugin: 'java' apply plugin: 'war' apply plugin: 'maven' apply plugin: 'jacoco' apply plugin: 'maven-publish' apply plugin: 'com.bmuschko.tomcat' apply plugin: 'com.bmuschko.cargo' apply plugin: "com.palantir.git-version" apply plugin: 'idea' apply plugin: 'eclipse' repositories { mavenCentral() jcenter() mavenLocal() maven { url 'http://dcm4che.org/maven2' name 'dcm4che Maven Repository' } maven { url 'https://nrgxnat.jfrog.io/nrgxnat/libs-release' name 'XNAT Release Repository' } maven { url 'https://nrgxnat.jfrog.io/nrgxnat/libs-snapshot' name 'XNAT Snapshot Repository' } maven { url 'https://nrgxnat.jfrog.io/nrgxnat/ext-release' name 'XNAT External Release Repository' } } sourceCompatibility = 1.7 targetCompatibility = 1.7 def version = Jvm.current().javaVersion if (version.java8Compatible || version.java9Compatible) { if (hasProperty("rt.17.jar")) { // Solution for bootstrap classpath warning and possible issues with compatibility with 1.7 libraries // was taken from this post on discuss.gradle.org: http://bit.ly/24xD9j0 def rt17jar = getProperty("rt.17.jar") logger.info "Using ${rt17jar} as the bootstrap class path jar." gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.fork = true options.compilerArgs << "-XDignore.symbol.file" options.bootClasspath = rt17jar } } } else { logger.warn "No value was set for the rt.17.jar build property, but you are using a Java 8- or 9-compatible JDK. You should consider setting rt.17.jar to indicate a jar file containing the Java 1.7 run-time library:\n" logger.warn "\n" logger.warn " ./gradlew -Prt.17.jar=rt-1.7.0_45.jar war\n" logger.warn "\n" logger.warn "You can also set this property in a gradle.properties file, either in the top level of your build folder or in the folder ~/.gradle/:\n" logger.warn "\n" logger.warn " rt.17.jar=/home/developer/.gradle/rt.17.jar\n" logger.warn "\n" logger.warn "In some isolated instances, using a bootstrap library from a JDK version later than 1.7 can result in run-time errors.\n" } } else if (!version.java7Compatible) { throw new BuildCancelledException("You are using a JDK version (${version}) that is not compatible with Java 7. The XNAT build will fail. Please install a JDK version of Java 7 or later.") } if (hasProperty("archiveName")) { war.archiveName = archiveName.endsWith(".war") ? archiveName : "${archiveName}.war" } else { war.baseName = "xnat-web" } tomcatRun.contextPath = '/' tomcatRunWar.contextPath = '/' [tomcatRun, tomcatRunWar].each { task -> // TODO: This can be configured with an external folder reference to be used for loading XNAT modules. task.additionalRuntimeResources << file('/Users/rherrick/xnat/config/plugins') } task deployToTomcat(type: Copy, dependsOn: war) { from war.archivePath into "${propertyWithDefault('tomcatHome', '/var/lib/tomcat7')}/webapps" } cargo { // These properties must be set in the ~/.gradle/gradle.properties file or passed on the Gradle command line in // the form -PdeployPort=8080 -PdeployContext=/ -PdeployHost=localhost -PdeployUser=deploy -PdeployPassword=deploy containerId = 'tomcat7x' port = propertyWithDefault('deployPort', 8080) as int deployable { context = propertyWithDefault('deployContext', '/') } remote { hostname = propertyWithDefault('deployHost', 'localhost') username = propertyWithDefault('deployUser', 'deploy') password = propertyWithDefault('deployPassword', 'deploy') } } if (JavaVersion.current().isJava8Compatible()) { allprojects { tasks.withType(Javadoc) { options.addStringOption('Xdoclint:none', '-quiet') } } } // Pulls in the Jenkins BUILD_NUMBER environment variable if available. def buildDate = new Date() def buildNumber = hasProperty("BUILD_NUMBER") ? getProperty("BUILD_NUMBER") : "Manual" def revision = gitVersion().replace("${version}-", "") jar { manifest { attributes 'Application-Name': 'XNAT', 'Build-Date': buildDate, 'Build-Number': buildNumber, 'Implementation-Sha': revision, 'Implementation-Version': version } } war { manifest { attributes 'Application-Name': 'XNAT', 'Build-Date': buildDate, 'Build-Number': buildNumber, 'Implementation-Sha': revision, 'Implementation-Version': version } } jacoco { toolVersion = "0.7.6.201602180812" } jacocoTestReport { reports { xml.enabled false csv.enabled false html.destination "${buildDir}/jacocoHtml" } } task sourceJar(type: Jar, dependsOn: classes) { from sourceSets.main.allSource } task javadocJar(type: Jar, dependsOn: javadoc) { from javadoc.destinationDir } publishing { publications { mavenJava(MavenPublication) { from components.java artifact sourceJar { classifier "sources" } artifact javadocJar { classifier "javadoc" } pom.withXml { def root = asNode() root.appendNode('name', 'XNAT Server') root.appendNode('description', 'XNAT is an open-source imaging informatics software platform dedicated to helping you perform imaging-based research. XNAT’s core functions manage importing, archiving, processing and securely distributing imaging and related study data. But its extended uses continue to evolve.') root.appendNode('url', 'https://bitbucket.org/xnatdev/xnat-web') root.appendNode('inceptionYear', '2016') def scm = root.appendNode('scm') scm.appendNode('url', 'https://bitbucket.org/xnatdev/xnat-web') scm.appendNode('connection', 'scm:https://bitbucket.org/xnatdev/xnat-web.git') scm.appendNode('developerConnection', 'scm:git://bitbucket.org/xnatdev/xnat-web.git') def license = root.appendNode('licenses').appendNode('license') license.appendNode('name', 'Simplified BSD 2-Clause License') license.appendNode('url', 'http://xnat.org/about/license.php') license.appendNode('distribution', 'repo') def developers = root.appendNode('developers') def rherrick = developers.appendNode('developer') rherrick.appendNode('id', 'rherrick') rherrick.appendNode('name', 'Rick Herrick') rherrick.appendNode('email', 'jrherrick@wustl.edu') } } } repositories { maven { credentials { // These properties must be set in the ~/.gradle/gradle.properties file or passed on the Gradle command // line in the form -PrepoUsername=foo -PrepoPassword=bar. username propertyWithDefault('repoUsername', 'username') password propertyWithDefault('repoPassword', 'password') } if (project.version.endsWith('-SNAPSHOT')) { url "https://nrgxnat.jfrog.io/nrgxnat/libs-snapshot-local" } else { url "https://nrgxnat.jfrog.io/nrgxnat/libs-release-local" } } } } def propertyWithDefault(def String property, def Object value) { hasProperty(property) ? getProperty(property) : value } configurations { all*.exclude group: 'avalon-framework' all*.exclude group: 'avalon-logkit' all*.exclude group: 'com.metaparadigm' all*.exclude group: 'commons-dbcp' all*.exclude group: 'commons-pool' all*.exclude group: 'excalibur-component' all*.exclude group: 'excalibur-instrument' all*.exclude group: 'excalibur-logger' all*.exclude group: 'excalibur-pool' all*.exclude group: 'fop' all*.exclude group: 'geronimo-spec' all*.exclude group: 'hsqldb' all*.exclude group: 'imagej' all*.exclude group: 'jamon' all*.exclude group: 'jakarta-regexp' all*.exclude group: 'org.apache.geronimo.specs' all*.exclude group: 'servletapi' all*.exclude group: 'velocity' all*.exclude group: 'xmlrpc' all*.exclude group: 'quartz' all*.exclude group: 'ant', module: 'ant' all*.exclude group: 'commons-email', module: 'commons-email' all*.exclude group: 'edu.ucar', module: 'netcdf' all*.exclude group: 'javax.jms', module: 'jms' all*.exclude group: 'javax.mail', module: 'mail' all*.exclude group: 'javax.servlet', module: 'servlet-api' all*.exclude group: 'javax.sql', module: 'jdbc-stdext' all*.exclude group: 'javax.transaction', module: 'jta' all*.exclude group: 'jdbc', module: 'jdbc' all*.exclude group: 'jms', module: 'jms' all*.exclude group: 'jython', module: 'jython' all*.exclude group: 'org.nrg', module: 'nrg' all*.exclude group: 'org.nrg', module: 'plexiviewer' all*.exclude group: 'org.nrg.xdat', module: 'beans' all*.exclude group: 'org.nrg.xnat', module: 'web' all*.exclude group: 'net.sf.saxon', module: 'saxon' all*.exclude group: 'net.sf.saxon', module: 'saxon-dom' all*.exclude group: 'net.sf.saxon', module: 'saxon-xpath' all*.exclude group: 'net.sf.saxon', module: 'Saxon-B' all*.exclude group: 'stax', module: 'stax-api' all*.exclude group: 'xml-apis', module: 'xml-apis' all*.exclude module: 'commons-beanutils-core' all*.exclude module: 'log4j-slf4j-impl' all*.exclude module: 'pipelineCNDAXNAT' all*.exclude module: 'slf4j-simple' } dependencies { // NRG dependencies first. compile "org.nrg.xnat:spawner:${vXnat}" compile("org.nrg.xnat:xnat-data-models:${vXnat}") { transitive = false } compile "org.nrg.xdat:core:${vXnat}" compile "org.nrg:framework:${vXnat}" compile "org.nrg:transaction:${vXnat}" compile "org.nrg:prefs:${vXnat}" compile "org.nrg:config:${vXnat}" compile "org.nrg:automation:${vXnat}" compile "org.nrg:dicomtools:${vXnat}" compile "org.nrg:anonymize:${vXnat}" compile "org.nrg:mail:${vXnat}" compile "org.nrg:notify:${vXnat}" compile "org.nrg:dicom-xnat-mx:${vXnatStable}" compile "org.nrg:dicom-xnat-sop:${vXnatStable}" compile "org.nrg:dicom-xnat-util:${vXnatStable}" compile "org.nrg:ecat4xnat:${vXnatStable}" compile "org.nrg:DicomDB:4.1.0" compile "org.nrg:ExtAttr:4.1.0" compile "org.nrg:DicomEdit:6.0" compile "org.nrg:DicomImageUtils:${vXnatStable}" compile "org.nrg:DicomUtils:1.3.1" compile "org.nrg:PrearcImporter:${vXnatStable}" compile "org.nrg:SessionBuilders:${vXnatStable}" compile "org.nrg:pipelineBase:1.0" compile "org.nrg:pipelineBuild:1.0" compile "org.nrg:pipelineWorkflow:1.0" compile "org.nrg:pipelineXNAT:1.0" compile "org.nrg.xnat.pipeline:client:${vXnatStable}" compile "org.nrg.xnat.pipeline:xnat_pipeline:${vXnatStable}" compile "org.nrg.xnat.pipeline:xnat_tools:${vXnatStable}" compile("org.nrg.xnat:plexiviewer:${vXnatStable}") { transitive = false } compile "dcm4che:dcm4che-core:2.0.25" compile "dcm4che:dcm4che-image:2.0.25" compile "dcm4che:dcm4che-imageio:2.0.25" compile "dcm4che:dcm4che-imageio-rle:2.0.25" compile "dcm4che:dcm4che-iod:2.0.25" compile "dcm4che:dcm4che-net:2.0.25" compile "org.springframework:spring-aop:${vSpring}" compile "org.springframework:spring-beans:${vSpring}" compile "org.springframework:spring-context-support:${vSpring}" compile "org.springframework:spring-context:${vSpring}" compile "org.springframework:spring-core:${vSpring}" compile "org.springframework:spring-jdbc:${vSpring}" compile "org.springframework:spring-jms:${vSpring}" compile "org.springframework:spring-messaging:${vSpring}" compile "org.springframework:spring-orm:${vSpring}" compile "org.springframework:spring-oxm:${vSpring}" compile "org.springframework:spring-tx:${vSpring}" compile "org.springframework:spring-web:${vSpring}" compile "org.springframework:spring-webmvc:${vSpring}" compile "io.springfox:springfox-swagger2:${vSwagger}" compile "io.springfox:springfox-swagger-ui:${vSwagger}" compile "org.springframework.security:spring-security-acl:${vSpringSecurity}" compile "org.springframework.security:spring-security-aspects:${vSpringSecurity}" compile "org.springframework.security:spring-security-config:${vSpringSecurity}" compile "org.springframework.security:spring-security-ldap:${vSpringSecurity}" compile "org.springframework.security:spring-security-taglibs:${vSpringSecurity}" compile "org.springframework.ldap:spring-ldap-core:2.0.4.RELEASE" compile "org.hibernate:hibernate-core:${vHibernate}" compile "org.hibernate:hibernate-ehcache:${vHibernate}" compile "org.hibernate:hibernate-validator:4.3.2.Final" compile "org.hibernate:hibernate-envers:4.3.11.Final" compile "net.sf.ehcache:ehcache-core:${vEhcache}" compile "com.noelios.restlet:com.noelios.restlet:1.1.10" compile "com.noelios.restlet:com.noelios.restlet.ext.servlet:1.1.10" compile "org.restlet:org.restlet.ext.fileupload:1.1.10" compile "com.fasterxml.jackson.core:jackson-annotations:${vJackson}" compile "com.fasterxml.jackson.core:jackson-core:${vJackson}" compile "com.fasterxml.jackson.core:jackson-databind:${vJackson}" compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${vJackson}" compile "com.fasterxml.jackson.datatype:jackson-datatype-hibernate4:${vJackson}" compile "org.json:json:20151123" compile "com.thoughtworks.xstream:xstream:1.4.9" compile "xerces:xercesImpl:2.11.0" compile "commons-beanutils:commons-beanutils:1.9.2" compile "commons-codec:commons-codec:1.10" compile "commons-collections:commons-collections:3.2.2" compile "commons-configuration:commons-configuration:1.10" compile "commons-digester:commons-digester:1.8.1" compile "commons-discovery:commons-discovery:0.5" compile "commons-fileupload:commons-fileupload:1.3.1" compile "commons-net:commons-net:3.4" compile "org.apache.commons:commons-configuration2:2.1" compile "org.apache.commons:commons-email:1.4" compile "org.apache.commons:commons-math:2.2" compile "org.apache.httpcomponents:httpclient:4.5.1" compile "org.apache.httpcomponents:httpcore:4.4.4" compile "org.apache.httpcomponents:httpcore-nio:4.4.4" compile "org.codehaus.groovy:groovy-all:${vGroovy}" compile "org.python:jython-standalone:${vJython}" // compile "net.sf.saxon:Saxon-HE:${vSaxon}" compile "net.sourceforge.saxon:saxon:${vSaxon}" compile "xalan:xalan:2.7.2" compile "eu.bitwalker:UserAgentUtils:1.20" compile "com.twmacinta:fast-md5:2.7.1" compile "com.h2database:h2:1.4.191" compile "com.lowagie:itext:4.2.1" compile "net.java.dev.msv:msv-core:2013.6.1" compile "gnu.getopt:java-getopt:1.0.13" compile "org.quartz-scheduler:quartz:2.2.2" compile "org.reflections:reflections:0.9.10" compile "org.apache.xmlbeans:xmlbeans:2.6.0" compile "org.apache.xmlbeans:xmlbeans-xpath:2.6.0" compile "org.apache.xbean:xbean-spring:4.5" compile "net.java.dev.msv:xsdlib:2013.6.1" compile "org.postgresql:postgresql:${vPostgreSQL}" compile "org.slf4j:slf4j-api:${vSlf4j}" compile "org.slf4j:slf4j-log4j12:${vSlf4j}" compile "org.slf4j:jul-to-slf4j:${vSlf4j}" compile "log4j:log4j:${vLog4j}" compile "javax.servlet:jstl:1.2" compile "javax.mail:javax.mail-api:1.5.5" compile 'com.google.code.gson:gson:2.6.2' runtime "org.nrg.xnatx.plugins:ximgview-plugin:${vXImgView}" runtime "org.apache.activemq:activemq-core:5.7.0" runtime "ant:ant:1.6.5" runtime "axis:axis-ant:1.4" runtime "axis:axis-schema:1.3" runtime "cglib:cglib:3.2.0" runtime "org.hsqldb:hsqldb:1.8.0.10" runtime "org.codehaus.groovy.modules.http-builder:http-builder:0.7.2" runtime "net.imagej:ij:1.50e" runtime "net.bull.javamelody:javamelody-core:1.58.0" runtime "org.javassist:javassist:3.20.0-GA" providedCompile "javax.servlet:javax.servlet-api:${vServletApi}" tomcat "org.apache.tomcat.embed:tomcat-embed-core:${vTomcat}", "org.apache.tomcat.embed:tomcat-embed-logging-juli:${vTomcat}", "org.apache.tomcat.embed:tomcat-embed-jasper:${vTomcat}" cargo "org.codehaus.cargo:cargo-core-uberjar:${vCargo}", "org.codehaus.cargo:cargo-ant:${vCargo}" testCompile "junit:junit:${vJunit}" testCompile "org.springframework:spring-test:${vSpring}" }