/* * Copyright (c) 2008-2013 Haulmont. All rights reserved. * Use is subject to license terms, see http://www.cuba-platform.com/license for details. */ allprojects { ext.artifactGroup = 'com.haulmont.cuba' ext.artifactVersion = cubaVersion.replace('-SNAPSHOT', '') ext.isSnapshot = cubaVersion.endsWith('-SNAPSHOT') ext.vcs = 'svn' //ext.tomcatDir = rootDir.absolutePath + '/../tomcat' } buildscript { ext.cubaVersion = '6.0-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') password System.getenv('HAULMONT_REPOSITORY_PASSWORD') } url "http://repository.haulmont.com:8587/nexus/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') 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 webAuthModule = project(':cuba-web-auth') def webToolkitModule = project(':cuba-web-toolkit') def webModule = project(':cuba-web') def webModuleThemes = project(':cuba-web-themes') apply from: "$rootProject.projectDir/lib.gradle" def springVersion = '4.2.0.RELEASE' def springSecurityVersion = '4.0.2.RELEASE' def servletApi = [group: 'org.apache.tomcat', name: 'tomcat-servlet-api', version: '7.0.53'] def groovyArtifact = 'org.codehaus.groovy:groovy-all:2.4.4' //def asm = [group: 'org.ow2.asm', name: 'asm', version: '5.0.3'] def poi = [group: 'com.haulmont.thirdparty', name: 'poi', version: '3.9.20130515'] def postgres = 'org.postgresql:postgresql:9.4-1201-jdbc41' def hsqldb = [group: 'org.hsqldb', name: 'hsqldb', version: '2.2.9'] /* Shared web dependencies */ def commonsUpload = [group: 'commons-fileupload', name: 'commons-fileupload', version: '1.2.2'] configure([sharedLibModule, globalModule, coreModule, clientModule, guiModule, webModule, desktopModule, portalModule, webAuthModule]) { apply(plugin: 'java') apply(plugin: 'idea') apply(plugin: 'maven') apply(plugin: 'checkstyle') apply(plugin: 'findbugs') apply(plugin: 'cuba') dependencies { compile('commons-logging:commons-logging:1.2') compile(group: 'commons-lang', name: 'commons-lang', version: '2.6') compile(group: 'commons-collections', name: 'commons-collections', version: '3.2.1') compile('commons-io:commons-io:2.4') compile('commons-codec:commons-codec:1.10') compile('commons-cli:commons-cli:1.3.1') compile('org.apache.commons:commons-pool2:2.4.2') compile('org.apache.commons:commons-compress:1.9') compile(group: 'dom4j', name: 'dom4j', version: '1.6.1') compile('com.sun.mail:javax.mail:1.5.4') compile('ch.qos.logback:logback-classic:1.1.3') compile('org.slf4j:log4j-over-slf4j:1.7.12') compile(group: 'org.perf4j', name: 'perf4j', version: '0.9.16') compile('com.google.code.findbugs:jsr305:3.0.0') compile(group: 'com.haulmont.thirdparty', name: 'javaee-api', version: '6.0.20091228') compile(groovyArtifact) compile(group: 'antlr', name: 'antlr', version: '2.7.7') // compile(asm) compile('com.google.guava:guava:18.0') compile 'org.eclipse.persistence:javax.persistence:2.1.0' compile 'org.eclipse.persistence:commonj.sdo:2.1.1' compile 'org.glassfish:javax.json:1.0.4' compile 'com.haulmont.thirdparty:eclipselink:2.6.0.cuba.1' compile(group: 'org.antlr', name: 'antlr-runtime', version: '3.5.2') compile('org.freemarker:freemarker:2.3.23') compile(group: 'aopalliance', name: 'aopalliance', version: '1.0') compile(group: 'org.springframework', name: 'spring-core', version: springVersion) compile(group: 'org.springframework', name: 'spring-beans', version: springVersion) compile(group: 'org.springframework', name: 'spring-context', version: springVersion) compile(group: 'org.springframework', name: 'spring-web', version: springVersion) testCompile('org.jmockit:jmockit:1.15') testCompile(group: 'junit', name: 'junit', version: '4.5') } task sourceJar(type: Jar) { from file('src') exclude "com/haulmont/cuba/security/app/UserSessions.java" classifier = 'sources' } artifacts { archives sourceJar } String checkstyleConfigDir = "${rootProject.projectDir}/config/checkstyle" checkstyle { configFile = new File("${checkstyleConfigDir}/checkstyle.xml".toString()) configProperties = [ 'checkstyleConfigDir' : checkstyleConfigDir ] reportsDir = new File("${buildDir}/checkstyle".toString()) } checkstyleMain << { def checkstyleDir = "${project.buildDir}/checkstyle".toString() ant.xslt('in': "$checkstyleDir/main.xml", out: "$checkstyleDir/$project.name-checkstyle.html", style: "$checkstyleConfigDir/checkstyle.xsl") } findbugs { toolVersion = "2.0.3" ignoreFailures = true omitVisitors = ['FindDoubleCheck'] } findbugsMain { reports { xml.enabled = false html { enabled = true destination "${project.buildDir}/findbugs/$project.name-findbugs.html" } } } } // configure web toolkit modules configure(webToolkitModule) { apply(plugin: 'java') apply(plugin: 'idea') apply(plugin: 'maven') apply(plugin: 'cuba') task sourceJar(type: Jar) { from file('src') exclude "com/haulmont/cuba/security/app/UserSessions.java" classifier = 'sources' } artifacts { archives sourceJar } } configure(sharedLibModule) { dependencies { jdbc(postgres) jdbc(hsqldb) } } configure(globalModule) { dependencies { provided(servletApi) } task generateReleaseTimestamp(type: CubaReleaseTimeStamp) { releaseTimeStampPath = "$buildDir/classes/main/com/haulmont/cuba/core/global/release.timestamp" releaseNumberPath = "$buildDir/classes/main/com/haulmont/cuba/core/global/release.number" } task enhance(type: CubaEnhancing) { persistenceConfig = 'cuba-persistence.xml' metadataXml = "$globalModule.projectDir/src/cuba-metadata.xml" } task filterDummyEntities { ext.srcFile = file('src/cuba-persistence.xml') ext.dstDir = file("$buildDir/tmp/filtered") ext.dstFile = new File(ext.dstDir, "cuba-persistence.xml") inputs.file srcFile outputs.file dstFile doLast { dstDir.mkdirs() List lines = srcFile.readLines() def result = lines.findAll{ !it.contains('.entity.dummy.') }.join('\n') dstFile.write(result) } } jar { exclude '**/entity/dummy/*' exclude { it.file == file("$buildDir/resources/main/cuba-persistence.xml") } from "$buildDir/tmp/filtered" } jar.dependsOn filterDummyEntities sourceJar { exclude '**/entity/dummy/*' exclude { it.file.name == 'cuba-persistence.xml' && sourceSets.main.java.srcDirs.contains(it.file.parentFile) } from "$buildDir/tmp/filtered" } sourceJar.dependsOn filterDummyEntities } configure(coreModule) { configurations { dbscripts } dependencies { compile(globalModule) compile(sharedLibModule) compile 'javax.validation:validation-api:1.1.0.Final' compile(group: 'com.haulmont.thirdparty', name: 'xstream', version: '1.4.2.20120702') runtime(group: 'xpp3', name: 'xpp3_min', version: '1.1.4c') runtime(group: 'xmlpull', name: 'xmlpull', version: '1.1.3.1') compile(group: 'org.ocpsoft.prettytime', name: 'prettytime-nlp', version: '3.2.5.Final') compile(group: 'org.jgroups', name: 'jgroups', version: '3.6.1.Final') compile('org.aspectj:aspectjrt:1.8.6') compile('org.aspectj:aspectjweaver:1.8.6') compile('org.mybatis:mybatis:3.2.7') compile('org.mybatis:mybatis-spring:1.2.3') compile(group: 'org.springframework', name: 'spring-context-support', version: springVersion) compile(group: 'org.springframework', name: 'spring-orm', version: springVersion) compile(group: 'org.springframework', name: 'spring-tx', version: springVersion) compile(group: 'org.springframework', name: 'spring-webmvc', version: springVersion) compile(poi) // POI is actually not required by core, but remains here to simplify dependencies for reports project provided(servletApi) jdbc(postgres) jdbc(hsqldb) testCompile('org.apache.commons:commons-dbcp2:2.1.1') testRuntime(servletApi) testRuntime(hsqldb) testRuntime(postgres) } task recompileNoDebug(type: JavaCompile) { source = sourceSets.main.java classpath = sourceSets.main.compileClasspath destinationDir = new File(buildDir, 'nodebug-classes') options.debug = false } jar { exclude { details -> return details.file == new File("${sourceSets.main.output.classesDir}/com/haulmont/cuba/security/app/UserSessions.class") } from("$buildDir/nodebug-classes") { include "com/haulmont/cuba/security/app/UserSessions.class" } } jar.dependsOn(recompileNoDebug) test { scanForTestClasses = false includes = ['**/*Test.class'] jvmArgs '-XX:-UseSplitVerifier' } task testsJar(dependsOn: testClasses, type: Jar) { from sourceSets.test.output.classesDir from sourceSets.test.output.resourcesDir from project.file('test') include 'com/haulmont/cuba/core/CubaTestCase*.class' include 'com/haulmont/cuba/core/CubaTestCase*.java' include 'com/haulmont/cuba/testsupport/*' include '*' includeEmptyDirs = false classifier = 'tests' duplicatesStrategy= DuplicatesStrategy.EXCLUDE } assembleDbScripts { moduleAlias = '10-cuba' } artifacts { archives testsJar } task deploy(dependsOn: assemble, type: CubaDeployment) { appName = 'cuba-core' appJars('cuba-global', 'cuba-core') } def hsqlDbName = 'cubadb' task startDb(description: 'Starts local HSQLDB server', type: CubaHsqlStart) { dbName = hsqlDbName } task stopDb(description: 'Stops local HSQLDB server', type: CubaHsqlStop) { 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 9001', type: CubaKillProcess) { port = 9001 } task createDb(dependsOn: assembleDbScripts, description: 'Creates local HSQL database', type: CubaDbCreation) { dbms = 'hsql' dbName = hsqlDbName dbUser = 'sa' dbPassword = '' } } configure(clientModule) { dependencies { compile(globalModule) compile('org.apache.httpcomponents:httpclient:4.5') } task testsJar(dependsOn: testClasses, type: Jar) { from sourceSets.test.output.classesDir from project.file('test') classifier = 'tests' } artifacts { archives testsJar } } configure(guiModule) { dependencies { compile(clientModule) compile(poi) compile(groovyArtifact) // compile(asm) testCompile(clientModule.sourceSets.test.output) } task enhance(type: CubaEnhancing) { metadataXml = "$guiModule.projectDir/src/cuba-gui-metadata.xml" } test { scanForTestClasses = false includes = ['**/*Test.class'] exclude 'com/haulmont/cuba/gui/components/*ComponentTest.class' exclude 'com/haulmont/cuba/gui/components/*FieldTest.class' } } configure(webModule) { dependencies { compile(sharedLibModule) compile(guiModule) compile(webAuthModule) compile(commonsUpload) compile(group: 'org.springframework', name: 'spring-webmvc', version: springVersion) compile(vaadinShared) { exclude(group: 'com.vaadin.external.google', module: 'guava') } compile(vaadinServer) { exclude(group: 'com.vaadin', module: 'vaadin-sass-compiler') } /* Vaadin addons */ compile(group: 'com.haulmont.thirdparty', name: 'appletintegration', version: '1.2.10') compile(group: 'com.haulmont.thirdparty', name: 'popupbutton', version: '2.5.2.cuba.3') compile(group: 'com.haulmont.thirdparty', name: 'aceeditor', version: '0.8.15') compile(group: 'org.vaadin.addons', name: 'contextmenu', version: '4.5') provided(servletApi) testCompile(clientModule.sourceSets.test.output) testCompile(guiModule.sourceSets.test.output) testRuntime(servletApi) } task enhance(type: CubaEnhancing) { metadataXml = "$webModule.projectDir/src/cuba-web-metadata.xml" } jar { from sourceSets.main.allJava } task buildScssThemes(type: CubaWebScssThemeCreation) { themes = ['halo', 'havana'] // compress = true // sprites = true // cleanup = true } 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 "${project.tomcatDir}/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 "${project.tomcatDir}/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-web-auth') } deploy << { copy { from "$buildDir/web" into "$tomcatDir/webapps/cuba" } } } configure(webModuleThemes) { apply(plugin: 'java') apply(plugin: 'maven') apply(plugin: 'cuba') buildDir = file('../build/scss-themes') sourceSets { main { java { srcDir '.' } resources { srcDir '.' } } } } configure(webAuthModule) { dependencies { compile(globalModule) compile(group: 'org.springframework', name: 'spring-tx', version: springVersion) compile(group: 'org.springframework.ldap', name: 'spring-ldap-core', version: '2.0.2.RELEASE') { exclude(group: 'org.slf4j', module: 'jcl-over-slf4j') // removed because it defines its own Log4j LogFactory via JDK services mechanism } provided(servletApi) } } configure(webToolkitModule) { dependencies { compile(webModule) compile(vaadinClient) compile(vaadinCompiler) runtime(servletApi) } 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' String xxMPS = '-XX:MaxPermSize=256m' } task buildDebugWidgetSet(type: CubaWidgetSetBuilding) { 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") classifier = 'debug' } artifacts { archives webArchive archives webDebugArchive } task deploy(dependsOn: buildWidgetSet) << { delete { "$tomcatDir/webapps/cuba/VAADIN/widgetsets" } copy { from "$buildDir/web" into "$tomcatDir/webapps/cuba" } } task cleanWidgetSet(dependsOn: clean) { } } configure(desktopModule) { apply(plugin: 'application') mainClassName = 'com.haulmont.cuba.desktop.App' dependencies { compile(guiModule) compile(group: 'com.miglayout', name: 'miglayout-swing', version: '4.2') compile(group: 'com.fifesoft', name: 'rsyntaxtextarea', version: '2.5.6') compile(group: 'com.haulmont.thirdparty', name: 'glazedlists', version: '1.9.20110801') compile(group: 'com.haulmont.thirdparty', name: 'swingx-core', version: '1.6.5-1.cuba.0') assemble.dependsOn = [classes] testCompile(clientModule.sourceSets.test.output) testCompile(guiModule.sourceSets.test.output) testRuntime(servletApi) } installApp { into("$buildDir/app/" + applicationName) } task desktopInstall(dependsOn: assemble) << { jar.execute() startScripts.execute() installApp.execute() } task desktopDist(dependsOn: assemble) << { distZip.execute() } task desktopStart(dependsOn: desktopInstall) << { run.execute() } } configure(portalModule) { dependencies { compile(globalModule) compile(clientModule) compile(sharedLibModule) provided(servletApi) compile(group: 'org.springframework', name: 'spring-webmvc', version: springVersion) compile(group: 'org.springframework.security', name: 'spring-security-core', version: springSecurityVersion) compile(group: 'org.springframework.security', name: 'spring-security-web', version: springSecurityVersion) compile(group: 'org.springframework.security', name: 'spring-security-config', version: springSecurityVersion) compile(group: 'org.springframework.security', name: 'spring-security-taglibs', version: springSecurityVersion) compile(group: 'org.json', name: 'json', version: '20140107') compile(groovyArtifact) // compile(asm) compile(group: 'org.springframework', name: 'spring-tx', version: springVersion) compile(group: 'org.springframework', name: 'spring-jdbc', version: springVersion) testCompile(clientModule.sourceSets.test.output) } test { scanForTestClasses = false includes = ['**/*Test.class'] } } task restart(dependsOn: ['stop', ':cuba-core:deploy', ':cuba-web:deploy', ':cuba-web-toolkit:deploy'], description: 'Redeploys applications and restarts local Tomcat') << { ant.waitfor(maxwait: 6, maxwaitunit: 'second', checkevery: 2, checkeveryunit: 'second') { not { socket(server: 'localhost', port: '8787') } } start.execute() }