/* * Copyright (c) 2008-2016 Haulmont. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ buildscript { ext.cubaVersion = '6.10-SNAPSHOT' ext.cubaVersion = rootProject.hasProperty('buildVersion') ? rootProject['buildVersion'] : cubaVersion println("CUBA Platform Version ${ext.cubaVersion}") println("") repositories { mavenLocal() maven { credentials { username System.getenv('HAULMONT_REPOSITORY_USER') ?: 'cuba' password System.getenv('HAULMONT_REPOSITORY_PASSWORD') ?: 'cuba123' } url System.getenv('HAULMONT_REPOSITORY_URL') ?: 'https://repo.cuba-platform.com/content/groups/work' } } dependencies { classpath group: 'com.haulmont.gradle', name: 'cuba-plugin', version: cubaVersion } } apply(plugin: 'base') apply(plugin: 'maven') apply(plugin: 'idea') apply(plugin: 'cuba') bom.load file('modules/global/src/com/haulmont/cuba/bom.properties') cuba { artifact { group = 'com.haulmont.cuba' version = project.cubaVersion.replace('-SNAPSHOT', '') isSnapshot = project.cubaVersion.endsWith('-SNAPSHOT') } ide { vcs = 'Git' copyright = '''Copyright (c) 2008-$today.year Haulmont. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.''' } } def sharedLibModule = project(':cuba-shared-lib') def globalModule = project(':cuba-global') def coreModule = project(':cuba-core') def clientModule = project(':cuba-client') def guiModule = project(':cuba-gui') def desktopModule = project(':cuba-desktop') def portalModule = project(':cuba-portal') def restApiModule = project(':cuba-rest-api') def webToolkitModule = project(':cuba-web-toolkit') def webModule = project(':cuba-web') def idpModule = project(':cuba-idp') def uberJarModule = project(':cuba-uberjar') def frontModule = project(':cuba-front') def webModuleThemesModule = project(':cuba-web-themes') def coreTestsModule = project(':cuba-core-tests') def clientTestsModule = project(':cuba-client-tests') configure([sharedLibModule, globalModule, coreModule, clientModule, guiModule, webModule, desktopModule, portalModule, restApiModule, idpModule, uberJarModule, frontModule]) { apply(plugin: 'java') apply(plugin: 'groovy') apply(plugin: 'idea') apply(plugin: 'maven') apply(plugin: 'cuba') // code quality apply(plugin: 'findbugs') apply(plugin: 'pmd') dependencies { testCompile(bom['org.jmockit:jmockit']) testCompile(bom['junit:junit']) testCompile(bom['org.spockframework:spock-core']) { exclude(group: 'org.codehaus.groovy', module: 'groovy-all') } } sourceSets { test { java { include '**/testmodel/**' } groovy { exclude '**/testmodel/**' srcDir 'test' } } } task sourceJar(type: Jar) { from file('src') classifier = 'sources' } artifacts { archives sourceJar } jar { manifest { attributes("Implementation-Version": cubaVersion) } } test { maxHeapSize = '256m' } javadoc { // move to plugin ? options.addStringOption("sourcepath", "") } findbugs { toolVersion = "3.0.1" ignoreFailures = false omitVisitors = ['FindDoubleCheck'] excludeFilter = rootProject.file("findbugs/exclude-filter.xml") effort = "max" reportLevel = "high" } findbugsMain { reports { xml.enabled = false html { enabled = true stylesheet = rootProject.resources.text.fromFile("findbugs/fancy-hist.xsl") destination file("${project.buildDir}/reports/findbugs/${project.name}.html") } } } findbugsTest { reports { xml.enabled = false html { enabled = true stylesheet = rootProject.resources.text.fromFile("findbugs/fancy-hist.xsl") destination file("${project.buildDir}/reports/findbugs/test-${project.name}.html") } } } pmd { ignoreFailures = true sourceSets = [sourceSets.main] reportsDir = file("${project.buildDir}/reports/pmd") ruleSets = [ "java-basic", "java-braces", "java-design", "java-unusedcode" ] } pmdMain { excludes = [ "**/JPAParser.java", "**/JPA2Parser.java" ] reports { xml.enabled = true html.enabled = false } source project.fileTree("src") } task pmdReport(dependsOn: pmdMain, group: 'verification', description: 'Generates a HTML report after executing PMD checks.') { doLast { ant.xslt( in: "${project.buildDir}/reports/pmd/main.xml", style: "${rootDir}/findbugs/pmd-nicerhtml.xsl", out: "${project.buildDir}/reports/pmd/main.html") } } check { dependsOn += ['pmdReport'] } } // Jacoco configure([sharedLibModule, globalModule, coreModule, clientModule, guiModule, webModule]) { apply(plugin: 'jacoco') jacoco { toolVersion = "0.8.0" } jacocoTestReport { reports { xml.enabled = true html.enabled = true } afterEvaluate { // without enhanced-classes output classDirectories = files(new File(project.buildDir, 'classes/java/main')) } } if (rootProject.hasProperty('jacocoTeamcity')) { jacocoTestReport.doLast { println "##teamcity[jacocoReport dataPath='modules/${project.projectDir.name}/build/jacoco/test.exec' " + "includes='com.haulmont.cuba.*' " + "classpath='+:modules/${project.projectDir.name}/build/classes/java/main/**']" } } } // configure web toolkit module configure(webToolkitModule) { apply(plugin: 'java') apply(plugin: 'idea') apply(plugin: 'maven') apply(plugin: 'cuba') task sourceJar(type: Jar) { from file('src') classifier = 'sources' } artifacts { archives sourceJar } javadoc { // move to plugin ? options.addStringOption("sourcepath", "") } } configure(sharedLibModule) { dependencies { compile(bom['ch.qos.logback:logback-classic']) compile(bom['org.slf4j:log4j-over-slf4j']) jdbc(bom['org.postgresql:postgresql']) jdbc(bom['org.hsqldb:hsqldb']) } } configure(globalModule) { dependencies { compile(bom['org.codehaus.groovy:groovy-all']) compile(bom['commons-lang:commons-lang']) compile(bom['org.apache.commons:commons-lang3']) // simplify version management with reports and bpm compile(bom['org.apache.commons:commons-collections4']) compile(bom['commons-io:commons-io']) compile(bom['commons-cli:commons-cli']) compile(bom['commons-codec:commons-codec']) compile(bom['org.apache.httpcomponents:httpclient']) // simplify version management for selenium compile(bom['org.apache.commons:commons-pool2']) compile(bom['org.apache.commons:commons-compress']) compile(bom['dom4j:dom4j']) compile(bom['xml-apis:xml-apis']) // simplify version management with core compile(bom['javax.activation:activation']) // simplify version management with core compile(bom['com.sun.mail:javax.mail']) compile(bom['ch.qos.logback:logback-classic']) compile(bom['org.slf4j:log4j-over-slf4j']) compile(bom['org.perf4j:perf4j']) compile(bom['com.google.code.findbugs:jsr305']) compile(bom['javax:javaee-api']) compile(bom['antlr:antlr']) compile(bom['org.antlr:antlr-runtime']) compile(bom['com.google.guava:guava']) compile(bom['org.eclipse.persistence:javax.persistence']) compile(bom['org.eclipse.persistence:commonj.sdo']) compile(bom['org.glassfish:javax.json']) compile(bom['com.haulmont.thirdparty:eclipselink']) compile(bom['org.freemarker:freemarker']) compile(bom['aopalliance:aopalliance']) compile(bom['org.springframework:spring-core']) compile(bom['org.springframework:spring-beans']) compile(bom['org.springframework:spring-context']) compile(bom['org.springframework:spring-web']) compile(bom['com.esotericsoftware:kryo-shaded']) compile(bom['de.javakaffee:kryo-serializers']) { exclude(group: 'com.esotericsoftware', module: 'kryo') } compile(bom['org.json:json']) compile(bom['com.google.code.gson:gson']) compile(bom['org.hibernate:hibernate-validator']) compile(bom['org.glassfish.web:javax.el']) provided(bom['javax.servlet:javax.servlet-api']) } task generateReleaseTimestamp(type: CubaReleaseTimeStamp) { releaseTimeStampPath = "$buildDir/release-number/com/haulmont/cuba/core/global/release.timestamp" releaseNumberPath = "$buildDir/release-number/com/haulmont/cuba/core/global/release.number" } // do not use classes directory, because it will break Gradle task UP-TO-DATE caching jar { from new File(project.buildDir, 'release-number') } task enhance(type: CubaEnhancing) task filterDummyEntities { ext.srcFile1 = file('src/base-persistence.xml') ext.srcFile2 = file('src/cuba-persistence.xml') ext.dstDir = file("$buildDir/tmp/filtered") ext.dstFile1 = new File(ext.dstDir, "base-persistence.xml") ext.dstFile2 = new File(ext.dstDir, "cuba-persistence.xml") inputs.file srcFile1 inputs.file srcFile2 outputs.file dstFile1 outputs.file dstFile2 doLast { dstDir.mkdirs() dstFile1.write(srcFile1.readLines().findAll{ !it.contains('.entity.dummy.') }.join('\n')) dstFile2.write(srcFile2.readLines().findAll{ !it.contains('.entity.dummy.') }.join('\n')) } } jar { exclude '**/entity/dummy/*' exclude { it.file == file("$buildDir/resources/main/base-persistence.xml") } exclude { it.file == file("$buildDir/resources/main/cuba-persistence.xml") } from "$buildDir/tmp/filtered" manifest { attributes('App-Component-Id': cuba.artifact.group) attributes('App-Component-Version': cubaVersion) } } jar.dependsOn filterDummyEntities sourceJar { exclude '**/entity/dummy/*' exclude { (it.file.name == 'base-persistence.xml' || it.file.name == 'cuba-persistence.xml') && sourceSets.main.java.srcDirs.contains(it.file.parentFile) } from "$buildDir/tmp/filtered" } sourceJar.dependsOn filterDummyEntities findbugsMain { classes = classes.filter { !it.path.contains(new File("com/haulmont/cuba/core/global/release.").path) } } } configure(coreModule) { configurations { dbscripts } dependencies { compile(globalModule) compile(sharedLibModule) compile(bom['javax.validation:validation-api']) compile(bom['com.thoughtworks.xstream:xstream']) compile(bom['org.jgroups:jgroups']) compile(bom['org.aspectj:aspectjrt']) compile(bom['org.aspectj:aspectjweaver']) compile(bom['org.mybatis:mybatis']) compile(bom['org.mybatis:mybatis-spring']) compile(bom['org.springframework:spring-context-support']) compile(bom['org.springframework:spring-orm']) compile(bom['org.springframework:spring-tx']) compile(bom['org.springframework:spring-webmvc']) compile(bom['org.apache.poi:poi']) // POI is actually not required by core, but remains here to simplify dependencies for reports project compile(bom['org.jsoup:jsoup']) // simplify version management for fts provided(bom['javax.servlet:javax.servlet-api']) jdbc(bom['org.postgresql:postgresql']) jdbc(bom['org.hsqldb:hsqldb']) testCompile(bom['org.apache.commons:commons-dbcp2']) testRuntime(bom['javax.servlet:javax.servlet-api']) testRuntime(bom['org.hsqldb:hsqldb']) testRuntime(bom['org.postgresql:postgresql']) } task enhanceTestModel(type: CubaTestEnhancing) test { scanForTestClasses = false includes = ['**/*Test.class'] jvmArgs '-XX:-UseSplitVerifier' systemProperties = [ 'logback.configurationFile': System.getProperty('logback.configurationFile') ] } task testEntityCache(type: Test) { scanForTestClasses = false includes = ['com/haulmont/cuba/entity_cache/EntityCacheTestSuite.class'] } assembleDbScripts { moduleAlias = '10-cuba' } task deploy(dependsOn: assemble, type: CubaDeployment) { appName = 'cuba-core' appJars('cuba-global', 'cuba-core') } def hsqlDbName = 'cubadb' def hsqlPort = 9111 task startDb(description: 'Starts local HSQLDB server', type: CubaHsqlStart) { dbPort = hsqlPort dbName = hsqlDbName } task stopDb(description: 'Stops local HSQLDB server', type: CubaHsqlStop) { dbPort = hsqlPort dbName = hsqlDbName } task removeDb(description: 'Removes local HSQL database', type: Delete) { delete new File("$rootProject.projectDir/data") } task killDb(description: "Kill local HSQLDB server process running on port $hsqlPort", type: CubaKillProcess) { port = hsqlPort } task createDb(dependsOn: assembleDbScripts, description: 'Creates local HSQL database', type: CubaDbCreation) { dbms = 'hsql' host = "localhost:$hsqlPort" dbName = hsqlDbName dbUser = 'sa' dbPassword = '' } task createTestDb(dependsOn: assembleDbScripts, description: 'Creates local HSQL database', type: CubaDbCreation) { dbms = 'hsql' host = "localhost:$hsqlPort" dbName = hsqlDbName dbUser = 'sa' dbPassword = '' auxiliaryScript = file('test/com/haulmont/cuba/testmodel/create-db.sql') } } configure(coreTestsModule) { apply(plugin: 'java') apply(plugin: 'maven') apply(plugin: 'cuba') buildDir = file('../build/core-tests') sourceSets { main { java { srcDir '.' include 'com/haulmont/cuba/core/CubaTestCase.java' include 'com/haulmont/cuba/testsupport/*.java' include '*' } resources { srcDir '.' } } } dependencies { compile(coreModule) compile(bom['org.apache.commons:commons-dbcp2']) compile(bom['org.jmockit:jmockit']) compile(bom['junit:junit']) } task sourceJar(type: Jar) { from file('.') include 'com/haulmont/cuba/core/CubaTestCase*.class' include 'com/haulmont/cuba/core/CubaTestCase*.java' include 'com/haulmont/cuba/testsupport/*' include '*' classifier = 'sources' } artifacts { archives sourceJar } } configure(clientModule) { dependencies { compile(globalModule) compile(bom['org.jsoup:jsoup']) // simplify version management for fts } } configure(clientTestsModule) { apply(plugin: 'java') apply(plugin: 'maven') apply(plugin: 'cuba') buildDir = file('../build/client-tests') sourceSets { main { java { srcDir '.' } resources { srcDir '.' } } } dependencies { compile(clientModule) compile(bom['org.jmockit:jmockit']) compile(bom['junit:junit']) } task sourceJar(type: Jar) { from file('.') classifier = 'sources' } artifacts { archives sourceJar } } configure(guiModule) { dependencies { compile(clientModule) compile(bom['org.apache.poi:poi']) testCompile(clientModule.sourceSets.test.output) } task enhance(type: CubaEnhancing) test { scanForTestClasses = false includes = ['**/*Test.class'] exclude 'com/haulmont/cuba/gui/components/*ComponentTest.class' exclude 'com/haulmont/cuba/gui/components/*FieldTest.class' } } configure(webModule) { configurations { themes } dependencies { compile(sharedLibModule) compile(guiModule) compile(restApiModule) compile(idpModule) compile(bom['org.springframework.ldap:spring-ldap-core']) { exclude(group: 'org.slf4j', module: 'jcl-over-slf4j') // removed because it defines its own Log4j LogFactory via JDK services mechanism } // use the same spring-tx as core compile(bom['org.springframework:spring-tx']) compile(bom['org.springframework:spring-webmvc']) compile(bom['commons-fileupload:commons-fileupload']) // required for Spring multipart resolver compile(bom['com.vaadin:vaadin-push']) { exclude(group: 'com.vaadin.external.atmosphere', module: 'atmosphere-runtime') } compile(bom['com.vaadin.external.atmosphere:atmosphere-runtime']) compile(bom['com.vaadin:vaadin-shared']) compile(bom['com.vaadin:vaadin-server']) { exclude(group: 'com.vaadin', module: 'vaadin-sass-compiler') } compile(bom['org.jsoup:jsoup']) // use the same version as core /* Vaadin addons */ compile(bom['org.vaadin.addons:popupbutton']) { exclude(group: 'com.vaadin', module: 'vaadin-client') exclude(group: 'com.vaadin', module: 'vaadin-server') } compile(bom['org.vaadin.addons:aceeditor']) compile(bom['org.vaadin.addons:dragdroplayouts']) compile(bom['com.vaadin.addon:vaadin-context-menu']) { exclude(group: 'com.vaadin', module: 'vaadin-sass-compiler') } /* WebJar dependencies */ compile(bom['org.webjars:webjars-locator']) compile(bom['org.webjars:jquery']) compile(bom['org.webjars:jquery-ui']) compile(bom['org.webjars.bower:jquery-file-upload']) compile(bom['org.webjars:swfobject']) compile(bom['org.webjars:swfupload']) compile(bom['org.webjars.npm:object-fit-images']) compile(bom['com.haulmont.cuba-resources:cuba-png-icons']) provided(bom['javax.servlet:javax.servlet-api']) themes(bom['com.vaadin:vaadin-themes']) testCompile(clientModule.sourceSets.test.output) testCompile(guiModule.sourceSets.test.output) testRuntime(bom['javax.servlet:javax.servlet-api']) } task enhance(type: CubaEnhancing) jar { with copySpec { from sourceSets.main.allJava include "com/haulmont/cuba/web/toolkit/ui/client/**" } } task buildScssThemes(type: CubaWebScssThemeCreation) { themes = ['halo', 'havana'] // compress = true // sprites = true // cleanup = true } assemble.dependsOn buildScssThemes task deployThemes(type: CubaDeployThemeTask, dependsOn: buildScssThemes) { } task buildHalo(type: CubaWebScssThemeCreation) { themes = ['halo'] // compress = true // sprites = true // cleanup = true } task deployHalo(type: Copy, dependsOn: buildHalo) { from file("$webModule.buildDir/web/VAADIN/themes/halo") into "${cuba.tomcat.dir}/webapps/cuba/VAADIN/themes/halo" exclude '**/web.xml' } task buildHavana(type: CubaWebScssThemeCreation) { themes = ['havana'] // compress = true // sprites = true // cleanup = true } task deployHavana(type: Copy, dependsOn: buildHavana) { from file("$webModule.buildDir/web/VAADIN/themes/havana") into "${cuba.tomcat.dir}/webapps/cuba/VAADIN/themes/havana" exclude '**/web.xml' } def webOutDir = file("$buildDir/web") task webArchive(dependsOn: buildScssThemes, type: Zip) { from file('web') from webOutDir exclude '**/web.xml', '**/app.properties' classifier = 'web' } artifacts { archives webArchive } task deploy(dependsOn: assemble, type: CubaDeployment) { appName = 'cuba' appJars('cuba-global', 'cuba-client', 'cuba-gui', 'cuba-web', 'cuba-rest-api', 'cuba-idp') } } configure(webModuleThemesModule) { apply(plugin: 'java') apply(plugin: 'maven') apply(plugin: 'cuba') appModuleType = 'web-themes' buildDir = file('../build/scss-themes') sourceSets { main { java { srcDir '.' } resources { srcDir '.' } } } dependencies { compile(bom['com.vaadin:vaadin-themes']) } } configure(webToolkitModule) { dependencies { compile(webModule) compile(bom['com.vaadin:vaadin-client']) { exclude(group: 'com.vaadin.external.gwt', module: 'gwt-elemental') } compile(bom['com.vaadin:vaadin-client-compiler']) { exclude(group: 'com.vaadin.external.gwt', module: 'gwt-elemental') exclude(group: 'com.vaadin.external.gwt', module: 'gwt-dev') } compile(bom['com.google.gwt:gwt-elemental']) compile(bom['com.google.gwt:gwt-dev']) runtime(bom['javax.servlet:javax.servlet-api']) } task buildWidgetSet(type: CubaWidgetSetBuilding) { widgetSetClass = 'com.haulmont.cuba.web.toolkit.ui.WidgetSet' // Strict strict = true // Debug flags: printCompilerClassPath = false logLevel = 'INFO' // Parallel thread count workers = 2 // Performance and widgetset size: style = 'OBF' // 'OBF' or 'PRETTY' or 'DETAILED' disableCastChecking = false optimize = 9 draft = false // Compiler JVM xmx = '-Xmx512m' xss = '-Xss8m' xxMPS = '-XX:MaxPermSize=256m' } task buildDebugWidgetSet(type: CubaWidgetSetBuilding) { widgetSetsDir = "$project.buildDir/web-debug/VAADIN/widgetsets" widgetSetClass = 'com.haulmont.cuba.web.toolkit.ui.WidgetSet' // Performance and widgetset size: style = 'PRETTY' } task debugWidgetSet(type: CubaWidgetSetDebug) { widgetSetClass = 'com.haulmont.cuba.web.toolkit.ui.WidgetSet' } jar { from sourceSets.main.allJava } task webArchive(dependsOn: buildWidgetSet, type: Zip) { from file("$buildDir/web") classifier = 'web' } task webDebugArchive(dependsOn: buildDebugWidgetSet, type: Zip) { from file("$buildDir/web-debug") classifier = 'debug' } artifacts { archives webArchive if (!cuba.artifact.isSnapshot) { archives webDebugArchive } } task deploy(dependsOn: buildWidgetSet) { doLast { delete { "$cuba.tomcat.dir/webapps/cuba/VAADIN/widgetsets" } copy { from "$buildDir/web" into "$cuba.tomcat.dir/webapps/cuba" } } } task cleanWidgetSet(dependsOn: clean) { } } configure(desktopModule) { apply(plugin: 'application') mainClassName = 'com.haulmont.cuba.desktop.App' dependencies { compile(guiModule) compile(bom['com.miglayout:miglayout-swing']) compile(bom['com.fifesoft:rsyntaxtextarea']) compile(bom['com.haulmont.thirdparty:glazedlists']) compile(bom['com.haulmont.thirdparty:swingx-core']) compile(bom['com.haulmont.cuba-resources:cuba-png-icons']) testCompile(clientModule.sourceSets.test.output) testCompile(guiModule.sourceSets.test.output) testRuntime(bom['javax.servlet:javax.servlet-api']) } // disable building of *.tar and *.zip artifacts by default assemble task configurations.archives.artifacts.removeAll { it.file =~ 'tar' || it.file =~ 'zip' } } configure(restApiModule) { dependencies { compile(globalModule) compile(clientModule) compile(sharedLibModule) compile(bom['commons-fileupload:commons-fileupload']) // required for Spring multipart resolver compile(bom['org.springframework:spring-webmvc']) compile(bom['org.springframework:spring-context-support']) compile(bom['org.springframework.ldap:spring-ldap-core']) { exclude(group: 'org.slf4j', module: 'jcl-over-slf4j') // removed because it defines its own Log4j LogFactory via JDK services mechanism } compile(bom['org.json:json']) compile(bom['com.fasterxml.jackson.core:jackson-databind']) compile(bom['com.fasterxml.jackson.core:jackson-annotations']) compile(bom['com.fasterxml.jackson.dataformat:jackson-dataformat-yaml']) compile(bom['org.springframework.security:spring-security-core']) compile(bom['org.springframework.security:spring-security-web']) compile(bom['org.springframework.security:spring-security-config']) compile(bom['org.springframework.security.oauth:spring-security-oauth2']) { exclude(group: 'org.springframework.security') } compile(bom['io.swagger:swagger-models']) provided(bom['javax.servlet:javax.servlet-api']) testCompile(clientModule.sourceSets.test.output) } } configure(portalModule) { dependencies { compile(globalModule) compile(clientModule) compile(sharedLibModule) compile(restApiModule) compile(bom['org.springframework:spring-webmvc']) compile(bom['org.springframework:spring-context-support']) compile(bom['org.springframework:spring-jdbc']) compile(bom['org.springframework.security:spring-security-core']) compile(bom['org.springframework.security:spring-security-web']) compile(bom['org.springframework.security:spring-security-config']) compile(bom['org.springframework.security:spring-security-taglibs']) compile(bom['org.json:json']) compile(bom['org.thymeleaf:thymeleaf']) compile(bom['org.thymeleaf:thymeleaf-spring4']) compile(bom['org.thymeleaf.extras:thymeleaf-extras-springsecurity4']) provided(bom['javax.servlet:javax.servlet-api']) testCompile(clientModule.sourceSets.test.output) } test { scanForTestClasses = false includes = ['**/*Test.class'] } task deploy(dependsOn: assemble, type: CubaDeployment) { appName = 'cuba-portal' appJars('cuba-global', 'cuba-client', 'cuba-portal', 'cuba-rest-api') } } configure(idpModule) { dependencies { compile(globalModule) compile(clientModule) compile(sharedLibModule) compile(bom['org.springframework:spring-webmvc']) compile(bom['org.springframework:spring-context-support']) compile(bom['org.springframework.ldap:spring-ldap-core']) { exclude(group: 'org.slf4j', module: 'jcl-over-slf4j') // removed because it defines its own Log4j LogFactory via JDK services mechanism } compile(bom['org.springframework.security:spring-security-core']) compile(bom['org.springframework.security:spring-security-config']) compile(bom['org.springframework.security:spring-security-web']) testCompile(clientModule.sourceSets.test.output) provided(bom['javax.servlet:javax.servlet-api']) } task webArchive(type: Zip) { from file('web') classifier = 'web' } artifacts { archives webArchive } task deploy(dependsOn: assemble) { doLast { delete { "$cuba.tomcat.dir/webapps/cuba/idp" } copy { from "$projectDir/web" into "$cuba.tomcat.dir/webapps/cuba" } } } } configure(uberJarModule) { dependencies { compile(bom['org.eclipse.jetty:jetty-server']) { exclude module: 'jetty-util' } compile(bom['org.eclipse.jetty:jetty-webapp']) { exclude module: 'jetty-util' } compile(bom['org.eclipse.jetty:jetty-plus']) { exclude module: 'jetty-util' } compile(bom['org.eclipse.jetty:jetty-jndi']) { exclude module: 'jetty-util' } compile(bom['org.eclipse.jetty.websocket:websocket-server']) { exclude module: 'jetty-util' } compile(bom['org.eclipse.jetty:jetty-util']) compile(bom['commons-cli:commons-cli']) compile(bom['commons-io:commons-io']) compile(bom['org.apache.commons:commons-dbcp2']) compile(bom['ch.qos.logback:logback-classic']) compile(bom['org.slf4j:log4j-over-slf4j']) compile(bom['org.perf4j:perf4j']) } } configure(frontModule) { dependencies { compile(bom['org.springframework:spring-webmvc']) compile(bom['org.springframework:spring-context-support']) provided(bom['javax.servlet:javax.servlet-api']) } } task restart(dependsOn: ['stop', ':cuba-core:deploy', ':cuba-web:deploy', ':cuba-web-toolkit:deploy'], description: 'Redeploys applications and restarts local Tomcat') { doLast { ant.waitfor(maxwait: 6, maxwaitunit: 'second', checkevery: 2, checkeveryunit: 'second') { not { socket(server: 'localhost', port: '8787') } } start.execute() } } apply plugin: 'jacoco' jacoco { toolVersion = "0.8.0" } task jacocoProjectReport(type: JacocoReport, group: 'Reporting') { description = 'Generates an aggregate report from all subprojects' def jacocoProjects = subprojects.findAll { prj -> return prj.project.extensions.findByName('jacoco') != null } dependsOn(jacocoProjects.jacocoTestReport) additionalSourceDirs = generateSourceFiles(jacocoProjects) sourceDirectories = generateSourceFiles(jacocoProjects) classDirectories = generateClassDirs(jacocoProjects) executionData = rootProject.files(jacocoProjects.jacocoTestReport.executionData) reports { html { enabled true destination new File(rootProject.buildDir, 'reports/jacoco/project') } xml { enabled true destination new File(rootProject.buildDir, 'reports/jacoco/project/jacoco-project.xml') } } doFirst { executionData = files(executionData.findAll { it.exists() }) } } def generateSourceFiles(Collection projects) { def dirs = projects.collect { prj -> new File(prj.projectDir, 'src') } return rootProject.files(dirs) } def generateClassDirs(Collection projects) { def trees = projects.collect { prj -> return prj.fileTree(dir: new File(prj.buildDir, 'classes/java/main')) } return trees.inject(files().asFileTree) { sum, current -> sum += current } } task aggregateJavadoc(type: Javadoc, description: 'Generate javadocs from all child projects as if it was a single project', group: 'Documentation') { destinationDir = file("$buildDir/docs/javadoc") title = "${project.name.toUpperCase()} ${cubaVersion.replace('-SNAPSHOT','')} API" options.encoding = 'UTF-8' options.addStringOption("sourcepath", "") options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PUBLIC exclude 'com/haulmont/cuba/core/app/cache/**' exclude 'com/haulmont/cuba/core/sys/jpql/antlr2/**' exclude 'com/haulmont/cuba/core/sys/utils/**' exclude 'com/haulmont/cuba/restapi/**' exclude 'com/haulmont/cuba/gui/components/compatibility/**' exclude 'com/haulmont/cuba/gui/xml/layout/loaders/**' exclude 'com/haulmont/cuba/desktop/sys/**' exclude 'com/haulmont/cuba/desktop/gui/components/**' exclude 'com/haulmont/cuba/desktop/gui/data/**' exclude 'com/haulmont/cuba/desktop/gui/executors/**' exclude 'com/haulmont/cuba/web/toolkit/**' exclude 'com/haulmont/cuba/web/controllers/**' exclude 'com/haulmont/cuba/web/gui/components/**' exclude 'com/haulmont/cuba/web/gui/data/**' exclude 'com/haulmont/cuba/web/gui/executors/**' exclude 'org/eclipse/**' subprojects.each { proj -> def javadocTask = proj.tasks.getByPath('javadoc') source += javadocTask.source classpath += javadocTask.classpath } }