blob: 9d572417627257cc7b84daa2c8b5c2e262fd4a29 [file] [log] [blame]
// Plugins
plugins {
id 'java'
id 'application'
}
/* Meta Data Info */
def title = 'Apache Wave Server'
def vendor = 'The Apache Software Foundation'
/* 3rd Part Repositories */
repositories {
mavenCentral()
maven {
url 'http://archiva.comunes.org/repository/comunes-snapshots/'
}
maven {
url 'https://oauth.googlecode.com/svn/code/maven/'
}
maven {
url 'https://oss.sonatype.org/content/repositories/google-snapshots/'
}
}
mainClassName = "org.waveprotocol.box.server.ServerMain"
applicationDefaultJvmArgs = [
"-Xmx1024M",
"-Dorg.eclipse.jetty.LEVEL=DEBUG",
"-Djava.security.auth.login.config=config/jaas.config"
]
configurations {
compile {
description = 'compile classpath'
}
generateGXP {
description = 'classpath for generating GXP files'
}
gwt {
description = 'classpath for compiling the gwt sources'
}
}
sonarqube {
properties {
property "sonar.exclusions", "src/generated/**/*.java"
}
}
/* Project Dependencies */
dependencies {
// code-gen
compile(
[group: "org.antlr", name: "antlr", version: "3.2"],
//TODO(wisebaldone) renable when gwt using jetty 9
//[group: "com.google.gwt", name: "gwt-dev", version: "2.8.0"],
//[group: "com.google.gwt", name: "gwt-user", version: "2.8.0"],
//[group: "com.google.gwt", name: "gwt-codeserver", version: "2.8.0"],
[group: "org.apache.velocity", name: "velocity", version: "1.6.3"]
)
gwt(
[group: "org.antlr", name: "antlr", version: "3.2"],
[group: "org.apache.velocity", name: "velocity", version: "1.6.3"],
[group: "javax.validation", name: "validation-api", version: "1.1.0.Final"],
[group: "javax.validation", name: "validation-api", version: "1.1.0.Final", classifier: "sources"]
)
// compile
compile (
[group: "aopalliance", name: "aopalliance", version: "1.0"],
[group: "org.bouncycastle", name: "bcprov-jdk16", version: "1.45"],
[group: "commons-fileupload", name: "commons-fileupload", version: "1.2.2"],
[group: "commons-cli", name: "commons-cli", version: "1.2"],
[group: "commons-codec", name: "commons-codec", version: "1.4"],
[group: "commons-io", name: "commons-io", version: "2.4"],
[group: "commons-collections", name: "commons-collections", version: "3.2.1"],
[group: "commons-configuration", name: "commons-configuration", version: "1.6"],
[group: "commons-httpclient", name: "commons-httpclient", version: "3.1"],
[group: "commons-lang", name: "commons-lang", version: "2.5"],
[group: "commons-logging", name: "commons-logging-api", version: "1.1"],
[group: "commons-logging", name: "commons-logging", version: "1.1.1"],
[group: "dom4j", name: "dom4j", version: "1.6.1"],
[group: "com.google.code.gson", name: "gson", version: "2.2.4"],
[group: "com.google.guava", name: "guava", version: "15.0"],
[group: "com.google.guava", name: "guava-gwt", version: "15.0"],
[group: "com.google.inject.extensions", name: "guice-assistedinject", version: "3.0"],
[group: "com.google.inject.extensions", name: "guice-servlet", version: "3.0"],
[group: "com.google.inject", name: "guice", version: "3.0"],
[group: "javax.inject", name: "javax.inject", version: "1"],
[group: "com.google.gxp", name: "google-gxp", version: "0.2.4-beta"],
[group: "javax.jdo", name: "jdo2-api", version: "2.1"],
[group: "org.jdom", name: "jdom", version: "1.1.3"],
[group: "com.google.code.findbugs", name: "jsr305", version: "2.0.1"],
[group: "jline", name: "jline", version: "0.9.94"],
[group: "joda-time", name: "joda-time", version: "1.6"],
[group: "org.apache.lucene", name: "lucene-core", version: "3.5.0"],
[group: "org.mongodb", name: "mongo-java-driver", version: "2.11.2"],
[group: "net.oauth.core", name: "oauth-provider", version: "20100527"],
[group: "net.oauth.core", name: "oauth", version: "20100527"],
[group: "net.oauth.core", name: "oauth-consumer", version: "20100527"],
[group: "com.google.protobuf", name: "protobuf-java", version: "2.5.0"],
[group: "com.googlecode.protobuf-java-format", name: "protobuf-java-format", version: "1.2"],
[group: "org.igniterealtime", name: "tinder", version: "1.2.1"],
[group: "xpp3", name: "xpp3", version: "1.1.4c"],
[group: "xpp3", name: "xpp3_xpath", version: "1.1.4c"],
[group: "org.gnu.inet", name: "libidn", version: "1.15"],
[group: "cc.kune", name: "gwt-initials-avatars-shared", version: "1.0-SNAPSHOT"],
[group: "cc.kune", name: "gwt-initials-avatars-server", version: "1.0-SNAPSHOT"],
[group: "com.typesafe", name: "config", version: "1.2.1"],
[group: "xerces", name: "xerces", version: "2.4.0"],
[group: "org.slf4j", name: "slf4j-api", version: "1.6.1"],
[group: "org.slf4j", name: "slf4j-simple", version: "1.6.1"],
[group: "org.eclipse.jetty", name: "jetty-annotations", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-client", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-continuation", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-http", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-io", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-proxy", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-security", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-server", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-servlet", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-servlets", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-util", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-webapp", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty", name: "jetty-xml", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty.websocket", name: "websocket-api", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty.websocket", name: "websocket-client", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty.websocket", name: "websocket-common", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty.websocket", name: "websocket-server", version: "9.1.1.v20140108"],
[group: "org.eclipse.jetty.websocket", name: "websocket-servlet", version: "9.1.1.v20140108"],
//TODO: Following are included due to tests being in the main src directory
[group: "org.mockito", name: "mockito-all", version: "1.9.5"],
[group: "org.hamcrest", name: "hamcrest-all", version: "1.3"]
)
compile fileTree(dir: 'dependencies/compile', include: "**/*.jar")
compile fileTree(dir: '../wave-proto/build/libs', include: "**/*.jar")
generateGXP (
[group: "com.google.gxp", name: "google-gxp", version: "0.2.4-beta"]
)
// tests
testCompile(
[group: 'junit', name: 'junit', version: '4.11'],
[group: "org.ow2.asm", name: "asm", version: "5.0.4"],
[group: "cglib", name: "cglib", version: "2.2"],
[group: "com.novocode", name: "junit-interface", version: "0.11"],
[group: "emma", name: "emma", version: "2.0.5312"],
[group: "emma", name: "emma_ant", version: "2.1.5320"],
[group: "org.hamcrest", name: "hamcrest-all", version: "1.3"],
[group: "org.jmock", name: "jmock-junit3", version: "2.6.0"],
[group: "org.jmock", name: "jmock", version: "2.6.0"],
[group: "org.mockito", name: "mockito-all", version: "1.9.5"]
)
}
/* Source Sets */
sourceSets {
main {
java {
srcDirs = [
'src/main/java',
'src/generated/gxp',
'src/generated/messages'
]
}
resources {
srcDir 'src/main/resources'
}
}
test {
java {
srcDir 'src/test/java'
}
resources {
srcDir 'src/test/resources'
}
}
}
task generateMessages {
description = 'Generates source files from Antlr String types and protobuf'
FileTree inputFiles = fileTree(dir: '../wave-proto/build/classes/main/', include: '**/*.class')
inputs.property "files", inputFiles
File outputDir = file("src/generated/messages")
outputs.dir outputDir
doLast {
List<String> proto_classes = [
"../wave-proto/build/classes/main/org/waveprotocol/box/common/comms/WaveClientRpc.class",
"../wave-proto/build/classes/main/org/waveprotocol/box/search/SearchProto.class",
"../wave-proto/build/classes/main/org/waveprotocol/box/profile/ProfilesProto.class",
"../wave-proto/build/classes/main/org/waveprotocol/box/server/rpc/Rpc.class",
"../wave-proto/build/classes/main/org/waveprotocol/box/attachment/AttachmentProto.class",
"../wave-proto/build/classes/main/org/waveprotocol/wave/federation/Proto.class",
"../wave-proto/build/classes/main/org/waveprotocol/wave/concurrencycontrol/ClientServer.class",
"../wave-proto/build/classes/main/org/waveprotocol/wave/diff/Diff.class"
]
List<String> templates = [
"src/main/java/org/waveprotocol/pst/templates/api/api.st",
"src/main/java/org/waveprotocol/pst/templates/builder/builder.st",
"src/main/java/org/waveprotocol/pst/templates/pojo/pojo.st",
"src/main/java/org/waveprotocol/pst/templates/jso/jso.st",
"src/main/java/org/waveprotocol/pst/templates/util/util.st",
"src/main/java/org/waveprotocol/pst/templates/gson/gson.st",
"src/main/java/org/waveprotocol/pst/templates/proto/proto.st"
]
proto_classes.each { proto ->
javaexec {
main = "org.waveprotocol.pst.PstMain"
classpath += configurations.compile
args = [
'-s',
'pst',
'-d',
'src/generated/messages',
'-f',
proto
]
args += templates
}
}
}
}
generateMessages.dependsOn ":pst:jar"
task generateGXP {
description = 'Generate source files from GXP prototypes'
FileTree inputFiles = fileTree(dir: 'src/main/gxp', include: '**/*.gxp')
inputs.property "files", inputFiles
File outputDir = file("src/generated/gxp")
outputs.dir outputDir
doLast {
javaexec {
main = "com.google.gxp.compiler.cli.Gxpc"
classpath += configurations.generateGXP
args = [
"--dir",
"src/generated/gxp",
"--source",
"src/main/gxp",
"--output_language",
"java"
]
args += fileTree(dir: 'src/main/gxp', include: '**/*.gxp').getFiles()
}
}
}
task compileGwt {
description = 'Compiles the GWT sources for production'
doLast {
javaexec {
main = "com.google.gwt.dev.Compiler"
classpath {
[
sourceSets.main.java.srcDirs,
sourceSets.main.compileClasspath,
sourceSets.main.resources.srcDirs,
configurations.gwt
]
}
jvmArgs = [
"-Xmx1024M"
]
args = [
"-style", "OBFUSCATED",
"-XdisableClassMetadata",
"-XdisableCastChecking",
"-localWorkers", "4",
"org.waveprotocol.box.webclient.WebClientProd"
]
}
}
}
compileGwt.mustRunAfter compileJava
run.dependsOn compileGwt
task compileGwtDemo {
description = 'Compiles the GWT sources for Demo'
doLast {
javaexec {
main = "com.google.gwt.dev.Compiler"
classpath {
[
sourceSets.main.java.srcDirs,
sourceSets.main.compileClasspath,
sourceSets.main.resources.srcDirs,
configurations.gwt
]
}
args = [
"-style", "Pretty",
"-ea",
"org.waveprotocol.box.webclient.WebClientDemo"
]
}
}
}
task compileGwtDev {
description = 'Compiles the GWT sources for Development'
doLast {
javaexec {
main = "com.google.gwt.dev.Compiler"
classpath {
[
sourceSets.main.java.srcDirs,
sourceSets.main.compileClasspath,
sourceSets.main.resources.srcDirs,
configurations.gwt
]
}
args = [
"-style", "PRETTY",
"-draftCompile",
"-ea",
"-strict",
"org.waveprotocol.box.webclient.WebClientDev"
]
}
}
}
task extractApi(type: Copy) {
from (configurations.compile.collect { zipTree(it) }) {
//Note: readonly files which get overwritten crash windows.
exclude "LICENSE"
} into "$buildDir/api"
}
extractApi.mustRunAfter compileJava
compileJava.dependsOn = [generateMessages, generateGXP]
/* Gwt Dev Tasks */
task gwtDev {
description = 'Runs the hosted mode server, for debugging the Gwt client ' +
'in a JVM.'
doFirst {
println ''
println '----------------------------------------------'
println ' Running Gwt Dev mode. '
println 'Note: This currently has a classpath conflict.'
println '----------------------------------------------'
println ''
}
doLast {
javaexec {
main = "com.google.gwt.dev.DevMode"
classpath {
[
sourceSets.main.java.srcDirs,
sourceSets.main.compileClasspath,
sourceSets.main.resources.srcDirs,
configurations.gwt,
]
}
args = [
"-noserver",
"-bindAddress", "127.0.0.1",
"-startupUrl", "http://localhost:9898",
"-logLevel", "DEBUG",
"org.waveprotocol.box.webclient.WebClientDev",
]
}
}
}
/* Test Tasks */
test {
include "**/*Test*"
exclude "**/*GwtTest*"
exclude "**/server/persistence/mongodb/**/*Test*"
exclude "**/*LargeTest*"
minHeapSize = "512m"
maxHeapSize = "1024m"
doFirst {
println ''
println '---------------------'
println ' Running unit tests. '
println '---------------------'
println ''
}
}
/* TODO(wisebaldone) not working due to gwt conflict talked about above, cant
have everything on classpath because 2 jetty versions. */
task testGwt(type: Test) {
include "**/*GwtTest*"
minHeapSize = "512m"
maxHeapSize = "1024m"
forkEvery = 1
doFirst {
println ''
println '--------------------'
println ' Running Gwt tests. '
println '--------------------'
println ''
}
}
testGwt.dependsOn compileGwt
task testMongo(type: Test) {
include "**/server/persistence/mongodb/**/*Test*"
doFirst {
println ''
println '--------------------------'
println ' Testing MongoDB backend. '
println '--------------------------'
println ''
}
}
testMongo.dependsOn compileJava
task testLarge(type: Test) {
include "**/*LargeTest*"
doFirst {
println ''
println '-------------------------------'
println ' Testing Large Tests. '
println 'These tests may take some time.'
println '-------------------------------'
println ''
}
}
testLarge.dependsOn compileJava
task testAll() {
doFirst {
println ''
println '--------------------------'
println ' Tests completed. '
println '--------------------------'
println ''
}
}
testAll.dependsOn compileJava, compileGwt
testAll.dependsOn test, testMongo, testLarge, testGwt
testGwt.mustRunAfter compileGwt, testLarge
testMongo.mustRunAfter compileJava, test
testLarge.mustRunAfter test
ant.importBuild 'config/server-config.xml'
jar {
manifest {
attributes "Specification-Vendor": vendor,
"Specification-Title": title,
"Specification-Version": version,
"Implementation-Vendor": vendor,
"Implementation-Title": title,
"Implementation-Version": version,
"Built-By": "No one in particular",
"Main-Class": mainClassName
}
from "$buildDir/api"
include "META-INF/services/*"
include "com/mongodb/**/*"
include "org/slf4j/**/*"
include "org/atmosphere/**/*"
include "com/google/common/**/*"
include "com/google/gson/**/*"
include "com/google/gxp/**/*"
include "com/google/gwt/core/server/**/*"
include "com/google/gwt/core/shared/**/*"
include "com/google/gwt/logging/**/*"
include "com/google/gwt/user/server/**/*"
include "com/google/gwt/user/client/rpc/**/*"
include "com/google/inject/**/*"
include "com/google/protobuf/**/*"
include "com/google/wave/**/*"
include "com/typesafe/**/*"
include "gnu/inet/**/*"
include "javax/inject/**/*"
include "javax/servlet/**/*"
include "javax/xml/**/*"
include "net/oauth/**/*"
include "org/aopalliance/**/*"
include "org/apache/commons/cli/**/*"
include "org/apache/commons/codec/**/*"
include "org/apache/commons/collections/**/*"
include "org/apache/commons/configuration/**/*"
include "org/apache/commons/fileupload/**/*"
include "org/apache/commons/httpclient/**/*"
include "org/apache/commons/lang/**/*"
include "org/apache/commons/logging/**/*"
include "org/apache/lucene/**/*"
include "org/apache/commons/io/**/*"
include "org/apache/xerces/**/*"
include "org/bson/**/*"
include "org/dom4j/**/*"
include "org/eclipse/**/*"
include "org/jdom/**/*"
include "org/jivesoftware/**/*"
include "org/joda/time/**/*"
include "org/json/**/*"
include "org/waveprotocol/**/*"
include "org/xmlpull/**/*"
include "org/xmpp/**/*"
include "cc/kune/initials/**/*"
exclude "org/waveprotocol/box/webclient/**/*"
exclude "org/waveprotocol/box/consoleclient/**/*"
exclude "org/waveprotocol/box/expimp/**/*"
exclude "org/waveprotocol/wave/client/*"
exclude "org/waveprotocol/wave/client/account/**/*"
exclude "org/waveprotocol/wave/client/autohide/**/*"
exclude "org/waveprotocol/wave/client/clipboard/**/*"
exclude "org/waveprotocol/wave/client/common/**/*"
exclude "org/waveprotocol/wave/client/concurrencycontrol/**/*"
exclude "org/waveprotocol/wave/client/debug/**/*"
exclude "org/waveprotocol/wave/client/doodad/**/*"
exclude "org/waveprotocol/wave/client/paging/**/*"
exclude "org/waveprotocol/wave/client/render/**/*"
exclude "org/waveprotocol/wave/client/scheduler/**/*"
exclude "org/waveprotocol/wave/client/scroll/**/*"
exclude "org/waveprotocol/wave/client/state/**/*"
exclude "org/waveprotocol/wave/client/testing/**/*"
exclude "org/waveprotocol/wave/client/uibuilder/**/*"
exclude "org/waveprotocol/wave/client/uibuilder/**/*"
exclude "org/waveprotocol/wave/client/util/**/*"
exclude "org/waveprotocol/wave/client/wave/**/*"
exclude "org/waveprotocol/wave/client/wavepanel/**/*"
exclude "org/waveprotocol/wave/client/widget/**/*"
exclude "com/google/api/client/**/*"
}
jar.dependsOn compileJava, compileGwt, extractApi
/* Distribution Tasks */
task createPropertiesFile(type: Copy) {
from 'src/main/configs'
include 'wave.conf'
into 'config'
expand([
version: version
])
}
task createDistBinZip(type: Zip) {
baseName = this.group + "-bin"
destinationDir = file('../distributions')
from(jar) {
into 'apache-wave/bin'
}
from('dist') {
into 'apache-wave'
}
from('config') {
into 'apache-wave/config'
}
from('war') {
into 'apache-wave/war'
}
from('../THANKS') {
into 'apache-wave'
}
from('../RELEASE-NOTES') {
into 'apache-wave'
}
from('../KEYS') {
into 'apache-wave'
}
from('../DISCLAIMER') {
into 'apache-wave'
}
}
task createDistBinTar(type: Tar) {
baseName = this.group + "-bin"
destinationDir = file('../distributions')
from(jar) {
into 'apache-wave/bin'
}
from('dist') {
into 'apache-wave'
}
from('config') {
into 'apache-wave/config'
}
from('war') {
into 'apache-wave/war'
}
from('../THANKS') {
into 'apache-wave'
}
from('../RELEASE-NOTES') {
into 'apache-wave'
}
from('../KEYS') {
into 'apache-wave'
}
from('../DISCLAIMER') {
into 'apache-wave'
}
}
createDistBinZip.dependsOn jar, createPropertiesFile
createDistBinTar.dependsOn jar, createPropertiesFile
task createDistBin() {
doFirst {
println ''
println '--------------------------------------------------------'
println ' Creating Deployment '
println '--------------------------------------------------------'
println ''
}
}
createDistBin.dependsOn createDistBinZip, createDistBinTar
// Additional Clean
clean {
delete "war/WEB-INF"
delete "war/webclient"
delete "src/generated"
delete "gwt-unitCache"
}