cuba/build.gradle

663 lines
20 KiB
Groovy

/*
* Copyright (c) 2008-2013 Haulmont. All rights reserved.
* Use is subject to license terms, see http://www.cuba-platform.com/license for details.
*/
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')
cuba {
artifact {
group = 'com.haulmont.cuba'
version = project.cubaVersion.replace('-SNAPSHOT', '')
isSnapshot = project.cubaVersion.endsWith('-SNAPSHOT')
}
ide {
vcs = 'svn'
}
}
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 = 'org.apache.tomcat:tomcat-servlet-api:8.0.26'
def groovyArtifact = 'org.codehaus.groovy:groovy-all:2.4.4'
def poi = 'com.haulmont.thirdparty:poi:3.12.cuba.1'
def postgres = 'org.postgresql:postgresql:9.4-1201-jdbc41'
def hsqldb = 'org.hsqldb:hsqldb:2.3.3'
/* Shared web dependencies */
def commonsUpload = [group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.1']
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(group: 'org.antlr', name: 'antlr-runtime', version: '3.5.2')
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.cuba1'
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('junit:junit:4.12')
}
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"
}
}
}
jar {
manifest {
attributes("Implementation-Version": cubaVersion)
}
}
}
// 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('org.jgroups:jgroups:3.6.4')
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)
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: '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 "${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-web-auth')
}
deploy << {
copy {
from "$buildDir/web"
into "$cuba.tomcat.dir/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) {
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")
classifier = 'debug'
}
artifacts {
archives webArchive
if (!cuba.artifact.isSnapshot) {
archives webDebugArchive
}
}
task deploy(dependsOn: buildWidgetSet) << {
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(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(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()
}