import aspectj.AspectJPlugin
import virgobuild.Config
import virgobuild.VirgoToolsPlugin

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "biz.aQute.bnd:biz.aQute.bnd.gradle:4.2.0"
    }
}

plugins {
    id "io.spring.dependency-management" version "1.0.7.RELEASE" apply false
    id "biz.aQute.bnd.builder" version "4.2.0" apply false
    id "com.github.spotbugs" version "1.7.1" apply false
}

apply plugin: VirgoToolsPlugin

ext {
    javaProjects = [
            project(':nano:org.eclipse.virgo.nano.authentication'),
            project(':nano:org.eclipse.virgo.nano.shutdown'),

            project(':test:org.eclipse.virgo.test.stubs'),
            project(':test:org.eclipse.virgo.test.launcher'),
            project(':test:org.eclipse.virgo.test.framework'),
            project(':test:org.eclipse.virgo.test.tools'),
            project(':test:org.eclipse.virgo.test.test'),

            project(':kernel:org.eclipse.virgo.kernel.stubs'),

            project(':medic:org.eclipse.virgo.medic.test'),
            project(':kernel:org.eclipse.virgo.kernel.deployer.test'),
            project(':kernel:org.eclipse.virgo.kernel.test'),

            project(':util:org.eclipse.virgo.util.integrationtest'),
            //	project(':medic:org.eclipse.virgo.medic.integrationtest'),

            project(':packaging:nano:org.eclipse.virgo.nano.smoketest'),
            project(':packaging:kernel:org.eclipse.virgo.kernel.smoketest'),
            project(':packaging:tomcat-server:org.eclipse.virgo.tomcat.smoketest'),
    ]

    osgiProjects = [
            project(':kernel:org.eclipse.virgo.kernel.equinox.extensions'),

            project(':util:org.eclipse.virgo.util.common'),
            project(':util:org.eclipse.virgo.util.env'),
            project(':util:org.eclipse.virgo.util.io'),
            project(':util:org.eclipse.virgo.util.jmx'),
            project(':util:org.eclipse.virgo.util.math'),
            project(':util:org.eclipse.virgo.util.osgi'),
            project(':util:org.eclipse.virgo.util.osgi.manifest'),
            project(':util:org.eclipse.virgo.util.parser.launcher'),
            project(':util:org.eclipse.virgo.util.parser.manifest'),

            project(':test:org.eclipse.virgo.test.launcher'),

            project(':medic:org.eclipse.virgo.medic'),
            project(':medic:org.eclipse.virgo.medic.core'),
            project(':medic:org.eclipse.virgo.medic.logbackclassicfragment'),
            project(':medic:org.eclipse.virgo.medic.logbackcorefragment'),

            project(':nano:org.eclipse.virgo.nano.core'),
            project(':nano:org.eclipse.virgo.nano.deployer'),
            project(':nano:org.eclipse.virgo.nano.deployer.api'),
            project(':nano:org.eclipse.virgo.nano.deployer.hot'),
            project(':nano:org.eclipse.virgo.nano.management'),
            project(':nano:org.eclipse.virgo.nano.management.controller'),
            project(':nano:org.eclipse.virgo.nano.services.concurrent'),
            project(':nano:org.eclipse.virgo.nano.services.ds'),

            project(':repository:org.eclipse.virgo.repository'),

            // Gemini Blueprint tracker/extensions
            project(':kernel:org.eclipse.virgo.kernel.agent.dm'),
            project(':kernel:org.eclipse.virgo.kernel.dmfragment'),
            project(':kernel:org.eclipse.virgo.kernel.kerneldmfragment'),

            project(':kernel:org.eclipse.virgo.kernel.artifact'),
            project(':kernel:org.eclipse.virgo.kernel.deployer'),

            // a test bundle running inside an OSGi container
            project(':kernel:org.eclipse.virgo.kernel.deployer.test'),

            // FIXME Equinox migration - rename to deployer.blueprint
            project(':kernel:org.eclipse.virgo.kernel.deployer.dm'),
            project(':kernel:org.eclipse.virgo.kernel.osgi'),
            project(':kernel:org.eclipse.virgo.kernel.services'),
            project(':kernel:org.eclipse.virgo.kernel.model'),

            project(':kernel:org.eclipse.virgo.kernel.userregionfactory'),
            project(':kernel:org.eclipse.virgo.shell.command'),

            project(':kernel:org.eclipse.virgo.kernel.userregion'),

            project(':web:org.eclipse.virgo.web.core'),
            project(':web:org.eclipse.virgo.web.dm'),
            project(':web:org.eclipse.virgo.web.tomcat.support'),

            // web.virgo.enterprise - virgo-reloaded, only?
            project(':web:org.eclipse.virgo.web.enterprise.appdeployer'),
            project(':web:org.eclipse.virgo.web.enterprise.applistener'),
            project(':web:org.eclipse.virgo.web.enterprise.catalina.fragment.webbeans'),
            project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.extension'),
            project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.provider.initializer'),
            project(':web:org.eclipse.virgo.web.enterprise.jsf.support'),
            project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.bval'),
            project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jotm'),
            project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jpa'),
            project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.webbeans'),
            project(':web:org.eclipse.virgo.web.enterprise.openejb.initialiser'),
            project(':web:org.eclipse.virgo.web.enterprise.openejb.jpa.integration'),
            project(':web:org.eclipse.virgo.web.enterprise.openejb.tomcat.factory'),
            project(':web:org.eclipse.virgo.web.enterprise.openwebbeans.initialiser'),
            project(':web:org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook'),
            project(':web:org.eclipse.virgo.web.enterprise.security'),
            project(':web:org.eclipse.virgo.web.enterprise.security.openejb.classloading.hook'),
            project(':web:org.eclipse.virgo.web.enterprise.security.valve'),
            project(':web:org.eclipse.virgo.web.enterprise.services.accessor'),
            project(':web:org.eclipse.virgo.web.servlet.adapter'),
            project(':web:org.eclipse.virgo.web.spring.integration'),
            project(':web:org.eclipse.virgo.web.war.deployer'),

            project(':apps:org.eclipse.virgo.apps.splash'),
            project(':kernel:org.eclipse.virgo.management.console'),
            project(':kernel:org.eclipse.virgo.management.fragment'),

            project(':apps:org.eclipse.virgo.apps.repository.core'),
            project(':apps:org.eclipse.virgo.apps.repository.web'),
    ]

    aspectjProjects = [
            // these projects contain aspects
            project(':util:org.eclipse.virgo.util.jmx'),

            project(':nano:org.eclipse.virgo.nano.core'),

            project(':test:org.eclipse.virgo.test.stubs'),
            project(':medic:org.eclipse.virgo.medic'),

            // these projects are woven
            project(':nano:org.eclipse.virgo.nano.deployer.api'),
            project(':nano:org.eclipse.virgo.nano.deployer.hot'),

            project(':repository:org.eclipse.virgo.repository'), // seems currently no pointcut matches :(

            project(':kernel:org.eclipse.virgo.kernel.dmfragment'),

            project(':kernel:org.eclipse.virgo.kernel.deployer'),
            project(':kernel:org.eclipse.virgo.kernel.deployer.dm'),
            project(':kernel:org.eclipse.virgo.kernel.osgi'),
            project(':kernel:org.eclipse.virgo.kernel.model'),
            project(':kernel:org.eclipse.virgo.kernel.services'),

            project(':kernel:org.eclipse.virgo.shell.command'),

            project(':apps:org.eclipse.virgo.apps.repository.core'),

            project(':web:org.eclipse.virgo.web.core'),
            project(':web:org.eclipse.virgo.web.dm'),
            project(':web:org.eclipse.virgo.web.tomcat.support'),
    ]
}

defaultTasks 'clean', 'jar', 'build', 'distZip'

def Properties versions = new Properties()
versions.load(new FileInputStream(project.rootProject.file('gradle.properties')))
project.ext.props = versions

ext.packagingProjects = [
        project(':packaging:nano'),
        project(':packaging:kernel'),
        project(':packaging:tomcat-server'),
]

ext {
    // used when copying features and products
    tokenMap = [
            'VIRGO.VERSION'                : version,
            // used in plan files
            'VIRGO.VERSION.LOWER_BOUND'    : "3.8",
            'VIRGO.VERSION.UPPER_BOUND'    : "4",

            'OSGI.SERVICES.VERSION'        : osgiServicesVersion, // used in oev.kernel.userregion.properties
            'OSGI.ENTERPRISE.VERSION'      : osgiEnterpriseVersion,

            'EQUINOX.HTTP.JETTY.VERSION'   : equinoxHttpJettyVersion,
            'EQUINOX.APP.VERSION'          : equinoxAppVersion,
            'EQUINOX.COMMON.VERSION'       : equinoxCommonVersion,
            'EQUINOX.CONFIGADMIN.VERSION'  : equinoxCmVersion,
            'EQUINOX.DS.VERSION'           : equinoxDsVersion,
            'EQUINOX.SC.VERSION'           : equinoxSimpleConfiguratorVersion,
            'EQUINOX.SC.M.VERSION'         : equinoxSimpleConfiguratorManipulatorVersion,
            'EQUINOX.CONSOLE.VERSION'      : equinoxConsoleVersion,
            'EQUINOX.CONSOLE.SSH.VERSION'  : equinoxConsoleSshVersion,
            'EQUINOX.EVENT'                : equinoxEventVersion,
            'EQUINOX.FRKA.E.VERSION'       : equinoxFrameworkadminEquinoxVersion,
            'EQUINOX.FRKA.VERSION'         : equinoxFrameworkadminVersion,
            'EQUINOX.PFRCS.VERSION'        : equinoxPreferencesVersion,
            'REGION.VERSION'               : equinoxRegionVersion,
            'EQUINOX.REGISTRY.VERSION'     : equinoxRegistryVersion,
            'EQUINOX.SECURITY.VERSION'     : equinoxSecurityVersion,

            'CONTENTTYPE.VERSION'          : eclipseCoreContenttypeVersion,
            'JOBS.VERSION'                 : eclipseCoreJobsVersion,
            'CORE.NET.VERSION'             : eclipseCoreNetVersion,
            'CORE.VERSION'                 : eclipseCoreRuntimeVersion,

            'ECF.FT.VERSION'               : eclipseEcfFiletransferVersion,
            'ECF.I.VERSION'                : eclipseEcfIdentityVersion,
            'ECF.P.FT.VERSION'             : eclipseEcfProviderFiletransferVersion,
            'ECF.SSL.VERSION'              : eclipseEcfSslVersion,
            'ECF.VERSION'                  : eclipseEcfVersion,

            'MINA.CORE.VERSION'            : minaCoreVersion,
            'SSHD.CORE.VERSION'            : apacheSshdCoreVersion,
            'FELIX.GOGO.COMMAND.VERSION'   : gogoCommandVersion, // used in oev.kernel.userregion.properties and oev.shell.feature/feature.xml
            'FELIX.GOGO.RUNTIME.VERSION'   : gogoRuntimeVersion, // used in oev.kernel.userregion.properties and oev.shell.feature/feature.xml
            'FELIX.GOGO.SHELL.VERSION'     : gogoShellVersion, // used in oev.kernel.userregion.properties and oev.shell.feature/feature.xml

            'JOLOKIA.VERSION'              : jolokiaVersion,

            'SPRING.VERSION'               : springframeworkVersion,

            'GEMINI.MANAGEMENT.VERSION'    : geminiManagementVersion,
            // TODO rename to 'GENIMI.BLUEPRINT.VERSION'
            'SPRING.DM.VERSION'            : geminiBlueprintVersion,
            'GEMINI.WEB.VERSION'           : geminiWebVersion,

            'CATALINA.VERSION'             : apacheCatalinaVersion,

            'ASPECTJ'                      : aspectjVersion,

            'C.FILEUPLOAD.VERSION'         : commonsFileuploadVersion,
            'C.IO.VERSION'                 : commonsIoVersion,

            'SCANNOTATION'                 : scannotationVersion,
            'JAVASSIST'                    : javassistVersion,
            'JOTM'                         : jotmVersion,
            'OBJECTWEB.ASM'                : objectwebAsmVersion,

            'JAVAX.ACTIVATION'             : javaxActivationVersion,
            'JAVAX.ANNOTATION'             : javaxAnnotationVersion,
            'JAVAX.EJB'                    : javaxEjbVersion,
            'JAVAX.INJECT'                 : javaxInjectVersion,
            'JAVAX.JMS'                    : javaxJmsVersion,
            'JAVAX.MAIL'                   : javaxMailVersion,
            'JAVAX.PERSISTENCE'            : javaxPersistenceVersion,
            'JAVAX.RESOURCE'               : javaxResourceVersion,
            'JAVAX.SECURITY.AUTH'          : javaxSecurityAuthMessageVersion,
            'JAVAX.SECURITY.JACC'          : javaxSecurityJaccVersion,
            'JAVAX.SERVLET.VERSION'        : javaxServletVersion,
            'JAVAX.SERVLET.JSTL.VERSION'   : javaxServletJspJstlVersion,
            'JSTL.IMPL'                    : javaxServletJspJstlImplOsgiVersion,
            'JAVAX.TRANSACTION'            : javaxTransactionVersion,
            'JAVAX.VALIDATION'             : javaxValidationVersion,
            'JAVAX.WEBSOCKET'              : javaxWebsocketVersion,
            'JAVAX.WSDL'                   : javaxWsdlVersion,
            'JAVAX.WS.RS'                  : javaxWsRsVersion,
            'JAVAX.XML.RPC'                : javaxXmlRpcVersion,

            'JETTY.VERSION'                : jettyVersion,

            'P2.A.R.VERSION'               : p2ArtifactRepositoryVersion,
            'P2.CONSOLE.VERSION'           : p2ConsoleVersion,
            'P2.CORE.VERSION'              : p2CoreVersion,
            'P2.DIRECTOR.VERSION'          : p2DirectorVersion,
            'P2.ENGINE.VERSION'            : p2EngineVersion,
            'P2.GC.VERSION'                : p2GarbageCollectorVersion,
            'P2.JP.VERSION'                : p2JarProcessorVersion,
            'P2.METADATA.VERSION'          : p2MetadataVersion,
            'P2.M.R.VERSION'               : p2MetadataRepositoryVersion,
            'P2.PUBLISHER.VERSION'         : p2PublisherVersion,
            'P2.P.E.VERSION'               : p2PublisherEclipseVersion,
            'P2.REPOSITORY.VERSION'        : p2RepositoryVersion,
            'P2.T.E.VERSION'               : p2TouchpointEclipseVersion,
            'P2.T.N.VERSION'               : p2TouchpointNativesVersion,
            'P2.T.ECF.VERSION'             : p2TransportEcfVersion,

            'QUARTZ'                       : quartzVersion,
            'WB.COMMON'                    : apacheOpenwebbeansVersion,
            'WB.EE'                        : apacheOpenwebbeansEEVersion,
            'WB.EJB'                       : apacheOpenwebbeansEEVersion,
            'WB.IMPL'                      : apacheOpenwebbeansVersion,
            'WB.SPI'                       : apacheOpenwebbeansVersion,
            'WB.WEB'                       : apacheOpenwebbeansVersion,
            'WB.JSF'                       : apacheOpenwebbeansVersion,
            'WB.TOMCAT7'                   : apacheOpenwebbeansTomcat7Version,

            'COMMOMS.BEANUTILS'            : commonsBeanutilsVersion,
            'COMMONS.CLI'                  : commonsCliVersion,
            'COMMONS.COLLECTIONS'          : commonsCollectionsVersion,
            'COMMONS.DBCP'                 : commonsDbcpVersion,
            'COMMONS.LANG'                 : commonsLangVersion,
            'COMMONS.POOL'                 : commonsPoolVersion,

            'BVAL'                         : apacheBvalVersion,
            'G.CONNECTOR'                  : geronimoComponentsConnectorVersion,
            'G.TRANSACTIONS'               : geronimoComponentsTransactionVersion,
            'G.MANAGEMENT'                 : geronimoSpecsJ2eeManagementVersion,
            'G.OSGI.LOCATOR'               : geronimoSpecsOsgiLocatorVersion,
            'G.OSGI.REGISTRY'              : geronimoSpecsOsgiRegistryVersion,

            'CDI.API'                      : cdiApiVersion,

            'OE.API'                       : apacheOpenejbVersion,
            'OE.CORE'                      : apacheOpenejbCoreVersion,
            'OE.JAVAAGENT'                 : apacheOpenejbVersion,
            'OE.JEE'                       : apacheOpenejbVersion,
            'OE.LOADER'                    : apacheOpenejbVersion,
            'OE.JPA.INTEGRATION'           : apacheOpenejbVersion,
            'XB.ASM'                       : apacheXBeanAsmVersion,
            'XB.BUNDLEUTILS'               : apacheXBeanBundleutilsVersion,
            'XB.FINDER'                    : apacheXBeanFinderVersion,
            'XB.NAMING'                    : apacheXBeanNamingVersion,
            'XB.REFLECT'                   : apacheXBeanReflectVersion,
            'EL.ANTLR'                     : eclipsePersistenceAntlrVersion,
            'EL.ASM'                       : eclipsePersistenceAsmVersion,
            'EL.CORE'                      : eclipsePersistenceCoreVersion,
            'EL.JPA'                       : eclipsePersistenceJpaVersion,
            'EL.JPQL'                      : eclipsePersistenceJpaJpqlVersion,
            'FACES.API'                    : glassfishJavaxFacesVersion,
            'FACES.IMPL'                   : glassfishComSunFacesVersion,

            'DERBY'                        : apacheDerbyVersion,

            // used in documentation
            'project.name'                 : 'Virgo',
            'runtime.category'             : 'EclipseRT',
            'umbrella.product.name'        : 'Virgo Runtime Environment',
            'umbrella.product.name.short'  : 'Virgo Runtime',
            'tomcat.product.name'          : 'Virgo Server for Apache Tomcat',
            'tomcat.product.name.short'    : 'VTS',
            'jetty.product.name'           : 'Virgo Jetty Server',
            'jetty.product.name.short'     : 'VJS',
            'kernel.product.name'          : 'Virgo Kernel',
            'kernel.product.name.short'    : 'VK',
            'nano.product.name'            : 'Virgo Nano',
            'nano.product.name.short'      : 'VN',
            'nanoweb.product.name'         : 'Virgo Nano Web',
            'snaps.product.name'           : 'Virgo Snaps',
            'snaps.product.name.short'     : 'VS',
            'ebr'                          : 'SpringSource Enterprise Bundle Repository',
            'p2repo'                       : "http://download.eclipse.org/virgo/updatesite/${version}".toString(),
            'bundle.version'               : "${version}".toString(),
    ]
}

configure(javaProjects + osgiProjects) {

    apply plugin: 'java'
    apply plugin: 'eclipse'

    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'

    compileJava {
        options.encoding = 'utf-8'
        options.fork = true
        doFirst {
            options.forkOptions.with {
                executable = 'java'
                jvmArgs = [
                        '-cp',
                        configurations.ecj.asPath,
                        'org.eclipse.jdt.internal.compiler.batch.Main',
                        '-warn:-unused'
                ]
            }
        }
    }
    compileTestJava {
        options.encoding = 'utf-8'
        options.fork = true
        doFirst {
            options.forkOptions.with {
                executable = 'java'
                jvmArgs = [
                        '-cp',
                        configurations.ecj.asPath,
                        'org.eclipse.jdt.internal.compiler.batch.Main',
                        '-warn:-unused'
                ]
            }
        }
    }

    test {
        if (System.properties['ci.build'] == 'true') {
            ignoreFailures = true
        }
    }

    configurations { ecj {} }

    dependencies {
        ecj group: "org.eclipse.jdt.core.compiler", name: "ecj", version: ecjVersion

        implementation 'org.slf4j:slf4j-api'

        testImplementation 'junit:junit'
        testImplementation 'org.hamcrest:hamcrest-core'
        testImplementation 'org.easymock:easymock'
    }

    eclipse {
        jdt {
            sourceCompatibility = 1.8
            targetCompatibility = 1.8
        }
    }
}

configure(javaProjects + osgiProjects) {
    assemble.doLast {
        println '|--> Assembled Jar File: ' + jar.archivePath
        if (System.properties['ci.build.signjars'] == 'true') {
            println '|--> Normalize Jar File: ' + jar.archivePath
            project.javaexec {
                main = 'org.eclipse.equinox.internal.p2.jarprocessor.Main'
                classpath Config.on(project).jarProcessorJar
                args = [
                        '-repack',
                        jar.archivePath
                ]
            }
            println '|--> Signing Jar File: ' + jar.archivePath
            exec {
                workingDir jar.destinationDir
                commandLine 'curl',
                        '-o',
                        jar.archivePath,
                        '-F',
                        "file=@${jar.archivePath}",
                        '--show-error',
                        'http://build.eclipse.org:31338/sign'
            }
            println '|--> Compress Jar File: ' + jar.archivePath
            project.javaexec {
                main = 'org.eclipse.equinox.internal.p2.jarprocessor.Main'
                classpath Config.on(project).jarProcessorJar
                args = [
                        '-pack',
                        jar.archivePath
                ]
            }
        } else {
            println '|--> Skipping normalize/signing/compression of Jar File: ' + jar.archivePath
        }
    }
}

// FIXME Equinox migration - Investigate how to create Java + OSGi source bundles
println "FIXME Equinox migration - how to create Java + OSGi source bundles"
//configure(javaProjects + osgiProjects) {
//    task sourcesJar(type: Jar, dependsOn: classes) {
//        classifier = 'sources'
//        from sourceSets.main.allSource
//    }
//
//    artifacts {
//        archives sourcesJar
//    }
//}

// FIXME Equinox migration - Investigate how to publish Java + OSGi bundles
println "FIXME Equinox migration - how to publish Java + OSGi bundles"
//configure(javaProjects + osgiProjects) {
//    apply plugin: 'maven-publish'
//    publishing {
//        repositories {
//            maven {
//                name = "BuildEclipseOrg"
//                url "/opt/public/rt/virgo/gradle/bundles"
//            }
//        }
//        publications {
//            virgo(MavenPublication) {
//                groupId 'org.eclipse.virgo'
//                from components.java
//                artifact sourcesJar {
//                    classifier "sources"
//                }
//            }
//        }
//    }
//}

configure(javaProjects + osgiProjects + packagingProjects + project(":org.eclipse.virgo.site") + project("3rd-party")) {
    apply plugin: "io.spring.dependency-management"

    repositories {
        mavenCentral()
        // Gemini Web and Tomcat dependencies aren't at Maven Central
        ivy {
            url "https://build.eclipse.org/rt/virgo/ivy/bundles/release/"
            patternLayout { artifact "[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" }
        }
    }

    dependencyManagement {
        dependencies {
            // Equinox OSGi runtime
            dependency "org.eclipse.platform:org.eclipse.osgi:3.11.2"

            dependency "org.apache.felix:org.apache.felix.gogo.command:${gogoCommandVersion}"
            dependency "org.apache.felix:org.apache.felix.gogo.runtime:${gogoRuntimeVersion}"
            dependency "org.apache.felix:org.apache.felix.gogo.shell:${gogoShellVersion}"

            // 3rd party dependencies
            dependency "org.glassfish.hk2.external:javax.inject:${glassfishJavaxInjectVersion}"
            dependencySet(group:'org.slf4j', version: slf4jVersion) {
                entry 'jcl-over-slf4j'
                entry 'log4j-over-slf4j'
                entry 'jul-to-slf4j'
                entry 'slf4j-api'
                entry 'slf4j-nop'
            }
            dependencySet(group:'ch.qos.logback', version: logbackVersion) {
                entry 'logback-core'
                entry 'logback-classic'
            }

            dependency "commons-codec:commons-codec:${commonsCodecVersion}"
            dependency "commons-cli:commons-cli:${commonsCliVersion}"

            dependency "org.apache.httpcomponents:httpcore:${httpcoreVersion}"
            dependency "org.apache.httpcomponents:httpclient:${httpclientVersion}"

            dependency "org.hibernate:hibernate-core:${hibernateCoreVersion}"

            // Spring dependencies
            dependency "aopalliance:aopalliance:${aopallianceVersionMaven}"
            dependency "org.aspectj:aspectjweaver:${aspectjVersion}"

            dependency "javax.el:javax.el-api:${javaxElVersion}"
            dependency "javax.servlet:javax.servlet-api:${javaxServletVersion}"
            dependency "javax.servlet.jsp:javax.servlet.jsp-api:${javaxServletJspVersion}"
            dependency "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:${javaxServletJspJstlVersion}"

            dependency "org.aspectj:aspectjrt:${aspectjVersion}" // used by AspectJ compiler
            dependency "org.aspectj:aspectjtools:${aspectjVersion}" // used by AspectJ compiler -> configuration ajtools

            dependencySet(group:'org.springframework', version: springframeworkVersion) {
                entry 'spring-aspects'
                entry 'spring-aop'
                entry 'spring-beans'
                entry 'spring-context'
                entry 'spring-context-support'
                entry 'spring-core'
                entry 'spring-expression'
                entry 'spring-jdbc'
                entry 'spring-messaging'
                entry 'spring-jms'
                entry 'spring-orm'
                entry 'spring-oxm'
                entry 'spring-tx'
                entry 'spring-web'
                entry 'spring-webflux'
                entry 'spring-webmvc'
                entry 'spring-websocket'

                entry 'spring-test'
            }

            dependency "com.squareup.okio:okio:${okioVersion}"
            dependency "com.squareup.okhttp3:okhttp:${okhttp3Version}"

            // testing
            dependency "junit:junit:${junitVersion}"
            dependency "org.hamcrest:hamcrest-core:${hamcrestCoreVersion}"
            dependency "org.easymock:easymock:${easymockVersion}"

            dependency "org.ops4j.pax.exam:pax-exam-junit4:${paxExamJunit4Version}"
            dependency "org.ops4j.pax.exam:pax-exam-container-native:${paxExamContainerNativeVersion}"
            dependency "org.ops4j.pax.exam:pax-exam-link-mvn:${paxExamLinkMvnVersion}"
            dependency "org.ops4j.pax.url:pax-url-aether:${paxUrlAetherVersion}"
        }
    }
}

configure(javaProjects + osgiProjects) {
    if (System.properties['ci.build'] == 'true' || System.properties['include.spotbugs'] == 'true') {
        apply plugin: "com.github.spotbugs"

        spotbugs {
            toolVersion = '3.1.12'
            ignoreFailures = true
            effort = 'max'
            showProgress = true
            reportLevel = "high"
            excludeFilter = file("$rootProject.projectDir/config/findbugs/excludeFilter.xml")
        }
        // only run 'spotbugsMain'
        tasks['spotbugsTest'].enabled = false
    }
}

configure(javaProjects + osgiProjects) {
    if (System.properties['ci.build'] == 'true' || System.properties['include.jacoco'] == 'true') {
        apply plugin: "jacoco"

        jacoco {
            toolVersion = "0.8.5"
        }

        test {
            jacoco {
                excludes = [ 'aspectj.*' ]
            }
        }
    }
}

configure(packagingProjects) {
    configurations {
        aspects { // visibility="private"
            description = "Aspects to be woven"
        }

        nanoLib {
            description = "Dependencies to be packaged in lib"
            transitive = true
            exclude module: "org.eclipse.osgi"
        }
        nanoLibEndorsed { description = "Dependencies to be packaged in endorsed" }
        nanoLibPersistence {
            transitive = false
            description = "Dependencies to be packaged in lib/persistence"
        }
        nanoPickup {
            transitive = false
            description = "Dependencies to be packaged in pickup"
        }
        kernelPluginsExtras {
            transitive = false
            description = "Dependencies to be published without p2 into Kernel plugin directory"
        }
        repositoryExt {
            transitive = false
            description = "Dependencies to be packaged in repository/ext"
        }
    }
}

configure(osgiProjects) {
    apply plugin: 'biz.aQute.bnd.builder'

    jar.bndfile = "bundle.bnd"
    jar.manifest.attributes(
            '-classpath': sourceSets.main.output.classesDirs.asPath,
            'Bundle-Vendor': 'Eclipse Virgo',
            'Bundle-SymbolicName': project.name,
            '-removeheaders': 'Bnd-LastModified,Created-By',
    )
}

configure(aspectjProjects) {
    configurations {
        ajtools {
            transitive = false
            description = "AspectJ tools runtime"
        }
    }

    apply plugin: AspectJPlugin

    configurations.compile.dependencies.each { Dependency dep ->
        println dep.class
        if (dep.hasProperty("dependencyProject")) {
            println "Has property dependencyProject" + dep.class
            println "dependent project: ${dep}"
            iajcClasspath += ":" + dep.dependencyProject.buildDir + "/bundles/release/classes.jar"
        } else {
            println "other dependency: ${dep}"
        }
    }

    configurations {
        ajtools {
            transitive = false
            description = "AspectJ tools runtime"
        }

        aspectpath {
            transitive = false
            description = "Aspects are applied to types present in the project"
        }

        testAspectpath {
            transitive = false
            description = "Aspects are applied to tests present in the project"
        }
    }

    dependencies {
        implementation 'org.aspectj:aspectjrt'

        ajtools 'org.aspectj:aspectjtools'
    }

    // Add nature and buildCommand
    eclipse.project {
        natures 'org.eclipse.ajdt.ui.ajnature'
        buildCommand 'org.eclipse.ajdt.core.ajbuilder'
    }

    eclipse {
        classpath {
            file {
                withXml { xmlProvider ->
                    def classpath = xmlProvider.asNode()
                    def xmlparser = new XmlParser()
                    configurations.aspectpath.dependencies.each { dep ->
                        if (dep.hasProperty("dependencyProject")) {
                            println "Name of project containing aspects to weave: " + dep.dependencyProject.name
                            classpath.children().findAll { it['@path'] == '/' + dep.dependencyProject.name }.each {
                                println "Adding ${it['@path']} to Aspect Path"
                                def attrs = xmlparser.createNode(it, 'attributes', [:])
                                xmlparser.createNode(attrs, 'attribute', [name: 'org.eclipse.ajdt.aspectpath', value: 'org.eclipse.ajdt.aspectpath']);
                            }
                        }
                    }
                }
            }
        }
    }
}

configure([
        project(':util:org.eclipse.virgo.util.integrationtest'),
        //	project(':medic:org.eclipse.virgo.medic.integrationtest'),
]) {
    dependencies {
        // OSGi runtime
        testRuntime group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi", version: equinoxVersion, configuration: "compile", ext: "jar"

        testImplementation 'org.glassfish.hk2.external:javax.inject'

        // PaxExam
        testCompile group: "org.ops4j.pax.exam", name: "pax-exam-junit4", version: paxExamJunit4Version
        testRuntime group: "org.ops4j.pax.exam", name: "pax-exam-container-native", version: paxExamContainerNativeVersion
        testRuntime group: "org.ops4j.pax.exam", name: "pax-exam-link-mvn", version: paxExamLinkMvnVersion
        testRuntime group: "org.ops4j.pax.url", name: "pax-url-aether", version: paxUrlAetherVersion
        testRuntime group: "org.ops4j.pax.url", name: "pax-url-aether", version: paxUrlAetherVersion
        testRuntime group: "org.ops4j.pax.url", name: "pax-url-wrap", version: paxUrlWrapVersion
    }
}
