import virgobuild.Constants

import static virgobuild.UpdateSitePlugin.CREATE_P2_REPOSITORY_TASK_NAME
import static virgobuild.VirgoToolsPlugin.installProduct
import static virgobuild.VirgoToolsPlugin.publishProduct

apply plugin: virgobuild.UpdateSitePlugin
apply plugin: 'org.hidetake.ssh'

buildscript {
    repositories { jcenter() }
    dependencies { classpath 'org.hidetake:gradle-ssh-plugin:1.1.2' }
}

updateSite {
    extraResources = files('epl-v10.html', 'notice.html', 'p2.index')
    hook { Project project ->
        postProcessing(project)
    }
    signing { File unsignedFolder, File signedFolder ->
        if (gradle.taskGraph.hasTask(uploadUpdateSite)) {
            signByEclipseService(unsignedFolder, signedFolder)
        } else {
            signLocally(unsignedFolder, signedFolder)
        }
    }
    mutateArtifactsXml { Node artifactsXml ->
        addExtraPropertiesToArtifactsXml(artifactsXml)
    }
}

remotes {
    eclipseDotOrg {
        host = ECLIPSE_ORG_FTP_HOST
        user = ECLIPSE_ORG_FTP_USER
        password = ECLIPSE_ORG_FTP_PASSWORD
        knownHosts = project.rootProject.file('gradle/ssh/known_hosts')
    }
}

dependencies {
    localPlugin project(':kernel:org.eclipse.virgo.kernel.agent.dm')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.artifact')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.deployer')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.deployer.dm')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.dmfragment')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.equinox.extensions')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.kerneldmfragment')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.model')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.osgi')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.services')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.userregion')
    localPlugin project(':kernel:org.eclipse.virgo.kernel.userregionfactory')
    localPlugin project(':kernel:org.eclipse.virgo.management.console')
    localPlugin project(':kernel:org.eclipse.virgo.management.fragment')
    localPlugin project(':kernel:org.eclipse.virgo.shell.command')

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

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

    localPlugin project(':repository:org.eclipse.virgo.repository')
    // TODO - review if all those signedExternalPlugins are signed
    signedExternalPlugin group: 'org.eclipse.virgo.mirrored', name: 'org.apache.commons.codec', version: commonsCodecVersion, ext: "jar"
    // optional requirement for org.springframework.core

    signedExternalPlugin group: 'org.eclipse.virgo.mirrored', name: 'oevm.org.apache.commons.httpclient', version: commonsHttpClientVersion, ext: "jar"

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

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

    // TODO - review if all those signedExternalPlugins are signed
    signedExternalPlugin group: "org.slf4j", name: "slf4j-api", version: slf4jVersion
    signedExternalPlugin group: "org.slf4j", name: "jul-to-slf4j", version: slf4jVersion
    // exports package org.apache.commons.logging (jcl - Jakarta Commons Logging)
    signedExternalPlugin group: "org.slf4j", name: "jcl-over-slf4j", version: slf4jVersion
    signedExternalPlugin group: "org.slf4j", name: "log4j-over-slf4j", version: slf4jVersion

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.aspectj.weaver", version: aspectjVersion, ext: "jar"

    // TODO - rename feature to region'_'
    localFeature project(':org.eclipse.virgo.site:org.eclipse.equinox.regions')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.region", version: equinoxRegionVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.core')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.ds')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi", version: equinoxVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi.services", version: osgiServicesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.common", version: equinoxCommonVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.ds", version: equinoxDsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.event", version: equinoxEventVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.util", version: equinoxUtilVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.cm", version: equinoxCmVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.kernel')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.equinox.http.jetty')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.http.jetty", version: equinoxHttpJettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.http.servlet", version: equinoxHttpServletVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.continuation", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.http", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.io", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.security", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.server", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.servlet", version: jettyVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jetty.util", version: jettyVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.servlet", version: javaxServletVersion, configuration: "runtime", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.kernel.springintegration')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.expression", version: springframeworkVersion, ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.management')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "osgi.enterprise", version: osgiEnterpriseVersion, configuration: "compile", ext: "jar"
    // contains org.osgi.jmx
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.gemini.management", version: geminiManagementVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.medic')
    signedExternalPlugin group: "ch.qos.logback", name: "logback-core", version: logbackVersion
    signedExternalPlugin group: "ch.qos.logback", name: "logback-classic", version: logbackVersion

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.deployer')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.mbeans')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.mbeans.controller')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.shell')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.console", version: equinoxConsoleVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.console.ssh", version: equinoxConsoleSshVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.mina.core", version: minaCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.sshd.core", version: apacheSshdCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.felix.gogo.command", version: gogoCommandVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.felix.gogo.runtime", version: gogoRuntimeVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.felix.gogo.shell", version: gogoShellVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.simpleconfigurator')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.simpleconfigurator", version: equinoxSimpleConfiguratorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.simpleconfigurator.manipulator", version: equinoxSimpleConfiguratorManipulatorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.frameworkadmin", version: equinoxFrameworkadminVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.frameworkadmin.equinox", version: equinoxFrameworkadminEquinoxVersion, configuration: "compile", ext: "jar"

    // TODO - rename feature to org.eclipse.gemini.blueprint
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.springdm')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "oevm.org.aopalliance", version: orgAopAllianceVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.aop", version: springframeworkVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.beans", version: springframeworkVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.context", version: springframeworkVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.springframework.core", version: springframeworkVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-io", version: geminiBlueprintVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-core", version: geminiBlueprintVersion, ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini.blueprint", name: "gemini-blueprint-extender", version: geminiBlueprintVersion, ext: "jar"

    // nano base
    // TODO - merge to oev.nano.services ?
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.services.concurrent')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.services.ds')

    // TODO - merge with management features above?
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.webconsole.deps')

    signedExternalPlugin group: "commons-fileupload", name: "commons-fileupload", version: commonsFileuploadVersion, ext: "jar"
    signedExternalPlugin group: "commons-io", name: "commons-io", version: commonsIoVersion, ext: "jar"
    signedExternalPlugin group: "org.jolokia", name: "jolokia-osgi", version: jolokiaVersion, ext: "jar"

    // nano full
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.p2.provisioning')
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.contenttype", version: eclipseCoreContenttypeVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.jobs", version: eclipseCoreJobsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.net", version: eclipseCoreNetVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.core.runtime", version: eclipseCoreRuntimeVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf", version: eclipseEcfVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.filetransfer", version: eclipseEcfFiletransferVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.identity", version: eclipseEcfIdentityVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.provider.filetransfer", version: eclipseEcfProviderFiletransferVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.ecf.ssl", version: eclipseEcfSslVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.app", version: equinoxAppVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.preferences", version: equinoxPreferencesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.registry", version: equinoxRegistryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.security", version: equinoxSecurityVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.sat4j.core", version: sat4jCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.sat4j.pb", version: sat4jPbVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.artifact.repository", version: p2ArtifactRepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.console", version: p2ConsoleVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.core", version: p2CoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.director", version: p2DirectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.engine", version: p2EngineVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.garbagecollector", version: p2GarbageCollectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.jarprocessor", version: p2JarProcessorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.metadata", version: p2MetadataVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.metadata.repository", version: p2MetadataRepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.publisher", version: p2PublisherVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.publisher.eclipse", version: p2PublisherEclipseVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.repository", version: p2RepositoryVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.touchpoint.eclipse", version: p2TouchpointEclipseVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.touchpoint.natives", version: p2TouchpointNativesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.equinox.p2.transport.ecf", version: p2TransportEcfVersion, configuration: "compile", ext: "jar"

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.nano.war.deployer')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.enterprise')
    localFeature project(':org.eclipse.virgo.site:org.eclipse.gemini.web')
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.core", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.extender", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.tomcat", version: geminiWebVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.gemini", name: "org.eclipse.gemini.web.jaspic.fragment", version: geminiWebVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.log4j", version: apacheLog4jVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.objectweb.asm", version: objectwebAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javassist", version: javassistVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "scannotation", version: scannotationVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.bval", version: apacheBvalVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.quartz", version: quartzVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.ow2.jotm.jotm-core", version: jotmVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "javax.interceptor", name: "javax.interceptor-api", version: javaxInterceptorVersion
    signedExternalPlugin group: "javax.transaction", name: "javax.transaction-api", version: javaxTransactionVersion
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.annotation", version: javaxAnnotationVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.ejb", version: javaxEjbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.inject", version: javaxInjectVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.jms", version: javaxJmsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.persistence", version: javaxPersistenceVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.resource", version: javaxResourceVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.security.auth.message", version: javaxSecurityAuthMessageVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.security.jacc", version: javaxSecurityJaccVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "javax.servlet.jsp.jstl", name: "javax.servlet.jsp.jstl-api", version: javaxServletJspJstlApiVersion
    signedExternalPlugin group: "org.glassfish.web", name: "javax.servlet.jsp.jstl", version: javaxServletJspJstlImplVersion
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.validation", version: javaxValidationVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.wsdl", version: javaxWsdlVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.ws.rs", version: javaxWsRsVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.glassfish.javax.faces", version: glassfishJavaxFacesVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.glassfish.com.sun.faces", version: glassfishComSunFacesVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.components.connector", version: geronimoComponentsConnectorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.components.transaction", version: geronimoComponentsTransactionVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.j2ee.management", version: geronimoSpecsJ2eeManagementVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.osgi.locator", version: geronimoSpecsOsgiLocatorVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.geronimo.specs.osgi.registry", version: geronimoSpecsOsgiRegistryVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.beanutils", version: commonsBeanutilsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "oevm.org.apache.commons.cli", version: commonsCliVersion, ext: "jar"
    signedExternalPlugin group: "commons-collections", name: "commons-collections", version: commonsCollectionsVersion
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.lang", version: commonsLangVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.dbcp", version: commonsDbcpVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.commons.pool", version: commonsPoolVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "cdi.api", version: cdiApiVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.api", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.core", version: apacheOpenejbCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.javaagent", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.jee", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.loader", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openejb.jpa-integration", version: apacheOpenejbVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ee", version: apacheOpenwebbeansEEVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ee.common", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.ejb", version: apacheOpenwebbeansEEVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.impl", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.jsf", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.spi", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.tomcat7", version: apacheOpenwebbeansTomcat7Version, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.openwebbeans.web", version: apacheOpenwebbeansVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.asm", version: apacheXBeanAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.bundleutils", version: apacheXBeanBundleutilsVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.finder", version: apacheXBeanFinderVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.naming", version: apacheXBeanNamingVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.xbean.reflect", version: apacheXBeanReflectVersion, configuration: "compile", ext: "jar"

    // Tomcat Runtime
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.el", version: javaxElVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "com.sun.mail", name: "javax.mail", version: javaxMailVersion
    // TODO - check CQ and put version into properties
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.activation", version: '1.1.0.v201211130549', configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.servlet.jsp", version: javaxServletJspVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.websocket", version: javaxWebsocketVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "javax.xml.rpc", version: javaxXmlRpcVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina.ha", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.catalina.tribes", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.coyote", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.el", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.jasper", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.juli", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.api", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.util", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.jni", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.tomcat.websocket", version: apacheCatalinaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.jdt.core.compiler.batch", version: eclipseJdtCoreCompilerBatchVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.antlr", version: eclipsePersistenceAntlrVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.asm", version: eclipsePersistenceAsmVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.core", version: eclipsePersistenceCoreVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.jpa", version: eclipsePersistenceJpaVersion, configuration: "compile", ext: "jar"
    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.eclipse.persistence.jpa.jpql", version: eclipsePersistenceJpaJpqlVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin group: "org.eclipse.virgo.mirrored", name: "org.apache.derby", version: apacheDerbyVersion, configuration: "compile", ext: "jar"

    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.appdeployer')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.applistener')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.catalina.fragment.webbeans')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.extension')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.javax.persistence.provider.initializer')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.jsf.support')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.bval')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jotm')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.jpa')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.fragment.webbeans')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.initialiser')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openejb.tomcat.factory')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.openwebbeans.initialiser')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.persistence.openejb.classloading.hook')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security.openejb.classloading.hook')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.security.valve')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.enterprise.services.accessor')
    signedExternalPlugin project(':web:org.eclipse.virgo.web.war.deployer')

    localFeature project(':org.eclipse.virgo.site:org.eclipse.virgo.tools')
}

task zipUpdateSite(type: Zip, dependsOn: createP2Repository) {
    from "${buildDir}/repository"
    baseName 'repository'
}

task uploadUpdateSite(dependsOn: createP2Repository) {
    description = "Uploads the generated update site to the eclipse.org server."

    doLast {
        // folder structure
        // releases                    (main folder - composite update site if release repository)
        //  |--1.0                     (version folder - always a composite update site)
        //     |--1.0.0.v20150413-1512 (repository folder - simple update site)

        // define the folder structure
        def releaseTypeFolder = "${ECLIPSE_ORG_FTP_UPDATE_SITES_PATH}/${releaseTypeFolder(project)}"
        def versionFolder = "${releaseTypeFolder}/${releaseVersion()}"
        def repositoryFolder = "${versionFolder}/${project.version}"

        // create composite update site for the root of the release repository and for the versions folder
        def config = eclipsebuild.BuildshipConfig.on(project)
        def compositeFolders = config.isRelease() ? [
                releaseTypeFolder,
                versionFolder
        ] : [versionFolder]

        // upload the update site and update the composite descriptors
        ssh.run {
            session(remotes.eclipseDotOrg) {
                // create the leaf directory if not exist
                execute "mkdir -p $repositoryFolder"

                // copy the update site from the build directory to the remote location
                put from: files { file("$buildDir/repository").listFiles() }, into: repositoryFolder

                // recreate the compositeArtifacts.jar and the compositeContent.jar files
                compositeFolders.each {
                    execute("""cd ${it}
                      ${file('updateCompositeUpdateSite.sh').text}""")
                }
            }
        }
    }
}

// utility methods
def releaseTypeFolder(Project project) {
    def config = eclipsebuild.BuildshipConfig.on(project)
    if (config.isRelease()) {
        "releases"
    } else if (config.isMilestone()) {
        "milestones"
    } else if (config.isSnapshot()) {
        "snapshots"
    } else {
        throw new IllegalStateException("BuildshipConfig must either be a release, milestone, or snapshot.")
    }
}

def releaseVersion() {
    // crop the major.minor segment from the version number
    def matcher = version =~ /(\d+\.\d+)\.\d+\..*/
    matcher[0][1]
}

private void postProcessing(project) {
}

private void signByEclipseService(unsignedFolder, signedFolder) {
    ssh.run {
        session(remotes.eclipseDotOrg) {
            // the remote folder where the jars are signed
            def remoteFolder = "${ECLIPSE_ORG_TEMP_PATH}/${signedFolder.name}"

            // clean up the folder used for signing if the previous build failed
            execute """rm -rf $remoteFolder
                    mkdir -p $remoteFolder"""

            // transfer the unsigned files to the remote host
            put from: file(unsignedFolder).listFiles() as List, into: remoteFolder

            // perform the signing
            execute """ cd $remoteFolder
                    # iterate all jars in the subfolders
                    for jar in \$(find `pwd` -name '*.jar');
                    do
                        # save the signed jar into a temporary file copy and write it's content to the unsigned jar
                        curl -o signed.jar -F filedata=@\$jar http://build.eclipse.org:31338/sign
                        cp signed.jar \$jar
                        rm signed.jar
                    done
                    """

            // retrieve the signed content from the remote host into the build/signed-bundles folder
            get from: remoteFolder, into: signedFolder.parentFile

            // clean up the remote folder
            execute "rm -rf $remoteFolder"
        }
    }
}

private void signLocally(File unsignedFolder, File signedFolder) {
    def unsignedPluginsDir = new File(unsignedFolder, "plugins")
    def unsignedFeaturesDir = new File(unsignedFolder, "features")
    def signedPluginsDir = new File(signedFolder, "plugins")
    def signedFeaturesDir = new File(signedFolder, "features")

    signedPluginsDir.mkdirs()
    signedFeaturesDir.mkdirs()

    if (System.properties['skip.local.signing'] == 'true') {
        project.logger.warn("Skipping local signing process!")
        project.copy { from unsignedPluginsDir into signedPluginsDir }
        project.copy { from unsignedFeaturesDir into signedFeaturesDir }
    }

    // TODO - add assert "keystore exists" - otherwise print this help!
    // How to generate you own Java Key Store for local signing:
    // $ keytool -genkey -alias virgo -keystore virgo.jks -storepass changeme -keypass development -dname "cn=Florian Waibel, ou=Virgo, o=EclipseSource, c=DE" -validity 365
    // Verify the keystore on the command line:
    // $ jarsigner -keystore virgo.jks -storepass changeme -keypass development org.eclipse.virgo.util.env-3.7.0.M2.jar virgo
    // $ jarsigner -verify -verbose -certs org.eclipse.virgo.util.env-3.7.0.M2.jar
    File targetDir = signedPluginsDir
    def signBundle = {
        if (System.properties['skip.local.signing'] != 'true') {
            project.logger.info("Sign '${it.absolutePath}'")
            project.ant.signjar(
                    verbose: 'true',
                    destDir: targetDir,
                    alias: 'virgo',
                    jar: it,
                    keystore: project.findProject(':').file('config/signing/virgo.jks'),
                    storepass: 'changeme',
                    keypass: 'development',
                    sigalg: 'SHA1withDSA',
                    digestalg: 'SHA1',
                    preservelastmodified: 'true')
        }
    }

    unsignedPluginsDir.listFiles().each signBundle
    targetDir = signedFeaturesDir
    unsignedFeaturesDir.listFiles().each signBundle
}

private void addExtraPropertiesToArtifactsXml(Node artifactsXml) {
    // modify the artifacts.xml file only when it is deployed to the eclipse.org servers
    if (ECLIPSE_ORG_MIRROR_PATH) {
        // add p2.mirrorsUrl to the properties section
        // https://wiki.eclipse.org/Equinox/p2/p2.mirrorsURL
        def mainPropertiesNode = artifactsXml.depthFirst().find {
            it.parent()?.name() == 'repository' && it.name() == 'properties'
        }
        new Node(mainPropertiesNode, 'property', ['name': 'p2.mirrorsURL', 'value': calculateP2MirrorsUrl(project)])

        // add download.stats property to each installable unit
        // https://wiki.eclipse.org/Equinox_p2_download_stats#Enabling_stats_in_your_repository
        new Node(mainPropertiesNode, 'property', ['name': 'p2.statsURI', 'value': calculateStatsUri(project)])
        mainPropertiesNode.@size = mainPropertiesNode.children().size()

        // add <property name="download.stats" value="feature-id"/> node to the features
        artifactsXml.depthFirst().findAll {
            it.parent()?.parent()?.name() == 'artifacts' &&
                    it.parent()?.name() == 'artifact' &&
                    it.parent()?.@classifier == 'org.eclipse.update.feature' &&
                    it.name() == 'properties'
        }.each {
            new Node(it, 'property', ['name': 'download.stats', 'value': it.parent().@id])
            it.@size = it.children().size()
        }
    }
}

def calculateP2MirrorsUrl(Project project) {
    def repositoryPath = "${ECLIPSE_ORG_MIRROR_PATH}/${releaseTypeFolder(project)}/${releaseVersion()}/${project.version}"
    "http://www.eclipse.org/downloads/download.php?file=${repositoryPath}&format=xml"
}

def calculateStatsUri(Project project) {
    "http://download.eclipse.org/stats/virgo/${releaseTypeFolder(project)}/${releaseVersion()}"
}

// TODO - think about a way to trigger :org.eclipse.virgo.site:publishBase and :org.eclipse.virgo.site:publishKernelBase after site creation
project.tasks.addRule("Pattern: publish<ID>") { String taskName ->
    if (taskName.startsWith("publish")) {
        project.task(taskName, dependsOn: [
                ":org.eclipse.virgo.site:${CREATE_P2_REPOSITORY_TASK_NAME}",
        ]) {
            def product = 'undefined'
            switch (taskName.toString() - 'publish') {
                case 'Base': product = 'base'; break
                case 'KernelBase': product = 'kernel-base'; break
                case 'NanoCore': product = 'nano-core'; break
                case 'NanoBase': product = 'nano-base'; break
                case 'Nano': product = 'nano'; break
                case 'NanoFull': product = 'nano-full'; break
            }
            group = Constants.gradleTaskGroupName
            description = "Publishes a product to a p2 repository. The publishing uses ANY environment configurations."

            File productFileLocation = project.file("${project.projectDir}/publish_resources/products/${product}/${product}.product")

            inputs.file productFileLocation

            doLast { publishProduct(project, productFileLocation) }
        }
    }
}

// for testing purposes only
task('installProductNanoBase', dependsOn: [
        'publishNanoCore',
        'publishNanoBase'
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano-base'
    def shortProduct = 'VNB'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}

// for testing purposes only
task('installProductNano', dependsOn: [
        'publishNanoCore',
        'publishNanoBase',
        'publishNano',
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano'
    def shortProduct = 'VN'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}

// for testing purposes only
task('installProductNanoFull', dependsOn: [
        'publishNanoCore',
        'publishNanoBase',
        'publishNano',
        'publishNanoFull',
]) {

    description = "Installs a Virgo product to a desired destination. Default profile(roaming) is VIRGOProfile, the environment configurations are ANY."

    def product = 'nano-full'
    def shortProduct = 'VNF'
    def destinationDir = file("${buildDir}/${shortProduct}/${product}")
    def productIu = "${product}.product"

    doLast() { installProduct(project, productIu, destinationDir) }
}
