Skip to content
Snippets Groups Projects
build.gradle 18 KiB
Newer Older
import org.gradle.internal.jvm.Jvm

Rick Herrick's avatar
Rick Herrick committed
/*
 * 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 vSpringSecurity = '4.0.4.RELEASE'
def vSwagger = '2.4.0'
def vHibernate = '4.3.11.Final'
def vEhcache = '2.6.11'
def vPostgreSQL = '9.4.1209.jre7'
def vLog4j = '1.2.17'
def vJunit = '4.12'
def vSaxon = '9.1.0.8'
def vJython = '2.7.0'

group 'org.nrg.xnat'
        mavenCentral()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
            url 'https://nrgxnat.jfrog.io/nrgxnat/libs-release'
            name 'XNAT Release Repository'
        }
        maven {
            url 'https://nrgxnat.jfrog.io/nrgxnat/libs-snapshot'
        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: 'maven-publish'
apply plugin: 'com.bmuschko.tomcat'
apply plugin: 'com.bmuschko.cargo'
apply plugin: "com.palantir.git-version"
apply plugin: 'idea'
apply plugin: 'eclipse'

    maven {
        url 'http://dcm4che.org/maven2'
        name 'dcm4che Maven Repository'
    }
        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 {

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) {
gmlenz's avatar
gmlenz committed
    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}-", "")
        attributes 'Application-Name': 'XNAT',
                'Build-Number': buildNumber,
                'Implementation-Sha': revision,
                'Implementation-Version': version
        attributes 'Application-Name': 'XNAT',
                '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"
                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: '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}") {
    compile "org.nrg:framework:${vXnat}"
    compile "org.nrg:transaction:${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"
Rick Herrick's avatar
Rick Herrick committed
    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}") {

    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 "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 "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}"
}