build.gradle 38.7 KB
Newer Older
1
buildscript {
2
	repositories {
P
Phillip Webb 已提交
3
		maven { url "http://repo.springsource.org/plugins-release" }
4 5
	}
	dependencies {
6
		classpath("org.springframework.build.gradle:propdeps-plugin:0.0.5")
R
Rob Winch 已提交
7
		classpath("org.asciidoctor:asciidoctor-gradle-plugin:0.7.0")
8
		classpath("org.springframework.build.gradle:docbook-reference-plugin:0.2.8")
9
	}
10 11
}

C
Chris Beams 已提交
12
configure(allprojects) { project ->
13 14
	group = "org.springframework"
	version = qualifyVersionIfNecessary(version)
15

16 17 18 19 20 21 22 23
	ext.aspectjVersion    = "1.7.4"
	ext.groovyVersion     = "1.8.9"
	ext.hibernate3Version = "3.6.9.Final"
	ext.hsqldbVersion     = "2.3.1"
	ext.jettyVersion      = "9.1.0.v20131115"
	ext.junitVersion      = "4.11"
	ext.slf4jVersion      = "1.6.1"
	ext.gradleScriptDir   = "${rootProject.projectDir}/gradle"
24

25
	apply plugin: "propdeps"
P
Phillip Webb 已提交
26
	apply plugin: "java"
27
	apply plugin: "test-source-set-dependencies"
28
	apply from: "${gradleScriptDir}/ide.gradle"
C
Chris Beams 已提交
29

P
Phillip Webb 已提交
30 31 32 33 34 35
	compileJava.options*.compilerArgs = [
		"-Xlint:serial", "-Xlint:varargs", "-Xlint:cast", "-Xlint:classfile",
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
		"-Xlint:try", "-Xlint:fallthrough", "-Xlint:rawtypes", "-Xlint:deprecation",
		"-Xlint:unchecked", "-Xlint:-options", "-Werror"
36
	]
C
Chris Beams 已提交
37

P
Phillip Webb 已提交
38 39 40 41 42 43 44
	compileTestJava.options*.compilerArgs = [
		"-Xlint:serial", "-Xlint:varargs", "-Xlint:cast", "-Xlint:classfile",
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
		"-Xlint:try", "-Xlint:-fallthrough", "-Xlint:-rawtypes", "-Xlint:-deprecation",
		"-Xlint:-unchecked", "-Xlint:-options"]

45 46 47 48 49 50
	compileJava {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

	compileTestJava {
J
Juergen Hoeller 已提交
51 52 53 54
		sourceCompatibility=1.7
		targetCompatibility=1.7
	}

P
Phillip Webb 已提交
55
	sourceSets.test.resources.srcDirs = ["src/test/resources", "src/test/java"]
C
Chris Beams 已提交
56

C
Chris Beams 已提交
57 58
	test {
		systemProperty("java.awt.headless", "true")
59
		systemProperty("testGroups", project.properties.get("testGroups"))
60 61 62
		scanForTestClasses = false
		include '**/*Tests.*'
		exclude '**/*Abstract*.*'
C
Chris Beams 已提交
63
	}
C
Chris Beams 已提交
64

65
	repositories {
66 67
		maven { url "http://repo.spring.io/libs-release" }
		maven { url "http://repo.spring.io/milestone" }  // for AspectJ 1.8.0.M1
J
Juergen Hoeller 已提交
68
		maven { url "https://oss.sonatype.org/content/repositories/releases" }  // javax.cache
69
	}
C
Chris Beams 已提交
70

71
	dependencies {
72
		testCompile("junit:junit:${junitVersion}")
73
		testCompile("org.hamcrest:hamcrest-all:1.3")
74
		testCompile("org.mockito:mockito-core:1.9.5")
75
	}
C
Chris Beams 已提交
76 77

	ext.javadocLinks = [
P
Phillip Webb 已提交
78
		"http://docs.oracle.com/javase/7/docs/api/",
J
Juergen Hoeller 已提交
79 80 81 82
		"http://docs.oracle.com/javaee/6/api/",
		"http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/", // CommonJ
		"http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.javadoc.doc/web/apidocs/",
		"http://glassfish.java.net/nonav/docs/v3/api/",
P
Phillip Webb 已提交
83 84
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
J
Juergen Hoeller 已提交
85 86 87 88 89
		"http://commons.apache.org/proper/commons-lang/javadocs/api-2.5/",
		"http://commons.apache.org/proper/commons-codec/apidocs/",
		"http://commons.apache.org/proper/commons-dbcp/apidocs/",
		"http://portals.apache.org/pluto/portlet-2.0-apidocs/",
		"http://tiles.apache.org/framework/apidocs/",
P
Phillip Webb 已提交
90
		"http://aopalliance.sourceforge.net/doc/",
C
Chris Beams 已提交
91
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
J
Juergen Hoeller 已提交
92 93
		"http://ehcache.org/apidocs/",
		"http://quartz-scheduler.org/api/2.1.7/",
P
Phillip Webb 已提交
94
		"http://jackson.codehaus.org/1.9.4/javadoc/",
95 96
		"http://fasterxml.github.com/jackson-core/javadoc/2.3.0/",
		"http://fasterxml.github.com/jackson-databind/javadoc/2.3.0/",
P
Phillip Webb 已提交
97
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs"
C
Chris Beams 已提交
98
	] as String[]
99 100
}

101
configure(subprojects - project(":spring-build-src")) { subproject ->
102
	apply plugin: "merge"
103 104 105
	apply from: "${gradleScriptDir}/publish-maven.gradle"

	jar {
P
Phillip Webb 已提交
106 107 108 109
		manifest.attributes["Created-By"] =
			"${System.getProperty("java.version")} (${System.getProperty("java.specification.vendor")})"
		manifest.attributes["Implementation-Title"] = subproject.name
		manifest.attributes["Implementation-Version"] = subproject.version
110 111 112 113 114

		from("${rootProject.projectDir}/src/dist") {
			include "license.txt"
			include "notice.txt"
			into "META-INF"
P
Phillip Webb 已提交
115
			expand(copyright: new Date().format("yyyy"), version: project.version)
116 117 118 119
		}
	}

	javadoc {
C
Chris Beams 已提交
120 121
		description = "Generates project-level javadoc for use in -javadoc jar"

122 123 124
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = project.name
C
Chris Beams 已提交
125
		options.links(project.ext.javadocLinks)
126
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
127 128 129 130 131

		// suppress warnings due to cross-module @see and @link references;
		// note that global 'api' task does display all warnings.
		logging.captureStandardError LogLevel.INFO
		logging.captureStandardOutput LogLevel.INFO // suppress "## warnings" message
132 133 134
	}

	task sourcesJar(type: Jar, dependsOn:classes) {
P
Phillip Webb 已提交
135
		classifier = "sources"
136
		from sourceSets.main.allJava.srcDirs
P
Phillip Webb 已提交
137
		include "**/*.java", "**/*.aj"
138 139 140
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
141
		classifier = "javadoc"
142 143 144 145 146 147 148
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
149 150
}

151 152
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
153
	apply plugin: "groovy"
154 155 156

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
157
		compile localGroovy()
158 159 160 161 162
	}

	configurations.archives.artifacts.clear()
}

P
Phillip Webb 已提交
163 164
project("spring-core") {
	description = "Spring Core"
165

166 167
	// As of Spring 4.0, spring-core includes asm 4.2 and repackages cglib 3.1, inlining
	// both into the spring-core jar. cglib 3.1 itself depends on asm 4, and is therefore
168
	// further transformed by the JarJar task to depend on org.springframework.asm; this
169
	// avoids including two different copies of asm unnecessarily.
170 171
	def cglibVersion = "3.1"
	def objenesisVersion = "2.1"
172 173 174 175

	configurations {
		jarjar
		cglib
176
		objenesis
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
	}

	task cglibRepackJar(type: Jar) { repackJar ->
		repackJar.baseName = "spring-cglib-repack"
		repackJar.version = cglibVersion

		doLast() {
			project.ant {
				taskdef name: "jarjar", classname: "com.tonicsystems.jarjar.JarJarTask",
					classpath: configurations.jarjar.asPath
				jarjar(destfile: repackJar.archivePath) {
					configurations.cglib.each { originalJar ->
						zipfileset(src: originalJar)
					}
					// repackage net.sf.cglib => org.springframework.cglib
P
Phillip Webb 已提交
192 193
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
					// as mentioned above, transform cglib"s internal asm dependencies from
194 195
					// org.objectweb.asm => org.springframework.asm. Doing this counts on the
					// the fact that Spring and cglib depend on the same version of asm!
P
Phillip Webb 已提交
196
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
197 198 199 200 201
				}
			}
		}
	}

202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
	task objenesisRepackJar(type: Jar) { repackJar ->
		repackJar.baseName = "spring-objenesis-repack"
		repackJar.version = objenesisVersion

		doLast() {
			project.ant {
				taskdef name: "jarjar", classname: "com.tonicsystems.jarjar.JarJarTask",
					classpath: configurations.jarjar.asPath
				jarjar(destfile: repackJar.archivePath) {
					configurations.objenesis.each { originalJar ->
						zipfileset(src: originalJar)
					}
					// repackage org.objenesis => org.springframework.objenesis
					rule(pattern: "org.objenesis.**", result: "org.springframework.objenesis.@1")
				}
			}
		}
	}

221
	dependencies {
222
		cglib("cglib:cglib:${cglibVersion}@jar")
223
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
224
		jarjar("com.googlecode.jarjar:jarjar:1.3")
225

P
Phillip Webb 已提交
226
		compile(files(cglibRepackJar))
227
		compile("commons-logging:commons-logging:1.1.1")
228
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
229
		optional("net.sf.jopt-simple:jopt-simple:4.4")
230
		optional("log4j:log4j:1.2.17")
P
Phillip Webb 已提交
231
		testCompile("xmlunit:xmlunit:1.3")
P
Phillip Webb 已提交
232 233 234
		testCompile("org.codehaus.woodstox:wstx-asl:3.2.7") {
			exclude group: "stax", module: "stax-api"
		}
235 236 237
	}

	jar {
238
		// inline repackaged cglib classes directly into the spring-core jar
239 240
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
241
			include "org/springframework/cglib/**"
242
		}
243 244 245 246 247

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
248
	}
J
Juergen Hoeller 已提交
249 250 251 252 253 254

	compileTestJava {
		sourceCompatibility=1.8
		targetCompatibility=1.8
		compileTestJava.options.compilerArgs += "-parameters"
	}
C
Chris Beams 已提交
255 256
}

P
Phillip Webb 已提交
257 258
project("spring-beans") {
	description = "Spring Beans"
259

260
	dependencies {
261 262
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
263
		provided("javax.el:javax.el-api:2.2.4")
264 265
		provided("javax.inject:javax.inject:1")
		testCompile("log4j:log4j:1.2.17")
266
	}
C
Chris Beams 已提交
267 268
}

J
Juergen Hoeller 已提交
269 270 271
project('spring-beans-groovy') {
	description 'Groovy Bean Definitions'
	merge.into = project(":spring-beans")
272
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
273 274 275

	dependencies {
		compile(project(":spring-core"))
276
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
J
Juergen Hoeller 已提交
277 278 279 280 281 282 283 284 285 286 287
	}

	// this module's Java and Groovy sources need to be compiled together
	compileJava.enabled=false
	sourceSets {
		main {
			groovy {
				srcDir 'src/main/java'
			}
		}
	}
288 289 290 291 292

	compileGroovy {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}
J
Juergen Hoeller 已提交
293 294
}

P
Phillip Webb 已提交
295 296
project("spring-aop") {
	description = "Spring AOP"
297

298
	dependencies {
299 300
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
301
		compile(files(project(":spring-core").objenesisRepackJar))
302
		compile(project(":spring-beans"))
303
		compile("aopalliance:aopalliance:1.0")
304 305 306
		optional("com.jamonapi:jamon:2.4")
		optional("commons-pool:commons-pool:1.5.3")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
307
	}
C
Chris Beams 已提交
308 309
}

P
Phillip Webb 已提交
310 311
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
312

313
	dependencies {
314
		compile(project(":spring-core"))
315
	}
C
Chris Beams 已提交
316 317
}

P
Phillip Webb 已提交
318 319
project("spring-instrument") {
	description = "Spring Instrument"
320

321
	jar {
P
Phillip Webb 已提交
322 323
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
324 325
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
326 327 328
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
329
	}
C
Chris Beams 已提交
330 331
}

P
Phillip Webb 已提交
332 333
project("spring-instrument-tomcat") {
	description = "Spring Instrument Tomcat"
334

335
	dependencies {
336
		provided("org.apache.tomcat:catalina:6.0.16")
337
	}
C
Chris Beams 已提交
338 339
}

P
Phillip Webb 已提交
340 341
project("spring-context") {
	description = "Spring Context"
342
	apply plugin: "groovy"
343

344
	dependencies {
345
		optional(project(":spring-instrument"))
346 347 348 349 350
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
351 352
		optional("javax.ejb:ejb-api:3.0")
		optional("javax.inject:javax.inject:1")
353
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
354
		optional("org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1")
355
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
356
		optional("joda-time:joda-time:2.2")
357
		optional("org.beanshell:bsh:2.0b4")
J
Juergen Hoeller 已提交
358
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
359
		optional("org.jruby:jruby:1.7.2")
360
		optional("org.slf4j:slf4j-api:${slf4jVersion}")
361
		optional("javax.validation:validation-api:1.0.0.GA")
362
		optional("org.hibernate:hibernate-validator:4.3.0.Final")
363 364
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
		optional("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1")
365
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
366
		testCompile("javax.inject:javax.inject-tck:1")
367 368
	}

369 370 371
	// pick up RmiInvocationWrapperRTD.xml in src/main
	sourceSets.main.resources.srcDirs += "src/main/java"

372
	test {
P
Phillip Webb 已提交
373
		jvmArgs = ["-disableassertions:org.aspectj.weaver.UnresolvedType"] // SPR-7989
374
	}
375 376 377 378 379 380 381 382 383
}

project("spring-messaging") {
	description = "Spring Messaging"

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
384
		optional("com.fasterxml.jackson.core:jackson-databind:2.3.0")
R
Rossen Stoyanchev 已提交
385 386
		optional("org.projectreactor:reactor-core:1.0.0.RELEASE")
		optional("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
B
Brian Clozel 已提交
387
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
388 389
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
390
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
391 392
		testCompile(project(":spring-test"))
		testCompile("com.thoughtworks.xstream:xstream:1.4.4")
393 394
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
		testCompile("javax.inject:javax.inject-tck:1")
395
		testCompile("javax.servlet:javax.servlet-api:3.1.0")
396
		testCompile("javax.validation:validation-api:1.0.0.GA")
397
		testCompile("log4j:log4j:1.2.17")
398 399 400 401 402
		testCompile("org.apache.activemq:activemq-broker:5.8.0")
		testCompile("org.apache.activemq:activemq-kahadb-store:5.8.0") {
			exclude group: "org.springframework", module: "spring-context"
		}
		testCompile("org.apache.activemq:activemq-stomp:5.8.0")
B
Brian Clozel 已提交
403
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
404
			exclude group: "javax.servlet", module: "javax.servlet-api"
405
		}
406 407
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC10")
		testCompile("org.apache.tomcat.embed:tomcat-embed-logging-juli:8.0.0-RC10")
408
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
409
	}
C
Chris Beams 已提交
410 411
}

P
Phillip Webb 已提交
412 413
project("spring-tx") {
	description = "Spring Transaction"
414

415
	dependencies {
416 417
		optional(project(":spring-context")) // for JCA, @EnableTransactionManagement
		optional(project(":spring-aop"))
418 419
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
420
		compile("aopalliance:aopalliance:1.0")
421 422
		provided("com.ibm.websphere:uow:6.0.2.17")
		optional("javax.resource:connector-api:1.5")
423
		optional("javax.transaction:javax.transaction-api:1.2")
424
		optional("javax.ejb:ejb-api:3.0")
425
		testCompile("org.eclipse.persistence:javax.persistence:2.0.0")
426
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
427
	}
C
Chris Beams 已提交
428 429
}

P
Phillip Webb 已提交
430 431 432
project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"
433

P
Phillip Webb 已提交
434 435 436 437
	// The following is a work-around until the Gradle build uses
	// Ant 1.9.x by default. This is necessary to avoid the genCastor
	// "Class not found: javac1.8" issue with Ant versions prior to 1.9.x
	ant.properties["build.compiler"] = "javac1.7"
J
Juergen Hoeller 已提交
438

P
Phillip Webb 已提交
439
	compileTestJava {
440 441 442 443 444 445
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

446
	dependencies {
447 448
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
449
		testCompile(project(":spring-context"))
450 451 452
		optional("com.thoughtworks.xstream:xstream:1.4.4")
		optional("org.jibx:jibx-run:1.2.5")
		optional("org.apache.xmlbeans:xmlbeans:2.6.0")
453
		optional("org.codehaus.castor:castor-xml:1.3.2")
454
		testCompile("org.codehaus.jettison:jettison:1.0.1")
P
Phillip Webb 已提交
455
		testCompile("xmlunit:xmlunit:1.3")
456
		testCompile("xmlpull:xmlpull:1.1.3.4a")
457 458 459 460
		testCompile(files(genCastor.classesDir).builtBy(genCastor))
		testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
		testCompile(files(genXmlbeans.classesDir).builtBy(genXmlbeans))
	}
C
Chris Beams 已提交
461 462
}

P
Phillip Webb 已提交
463 464
project("spring-jms") {
	description = "Spring JMS"
465

466
	dependencies {
467 468 469 470 471
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
		compile(project(":spring-tx"))
472
		optional(project(":spring-oxm"))
473
		compile("aopalliance:aopalliance:1.0")
474 475 476
		provided("org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1")
		optional("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1")
		optional("javax.resource:connector-api:1.5")
477
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
478
		optional("com.fasterxml.jackson.core:jackson-databind:2.3.0")
479
	}
C
Chris Beams 已提交
480 481
}

P
Phillip Webb 已提交
482 483
project("spring-jdbc") {
	description = "Spring JDBC"
484

485
	dependencies {
486 487
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
488
		optional(project(":spring-context")) // for JndiDataSourceLookup
489
		compile(project(":spring-tx"))
490
		optional("c3p0:c3p0:0.9.1.2")
P
Phillip Webb 已提交
491
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
492
		optional("com.h2database:h2:1.0.71")
493 494
		optional("org.apache.derby:derby:10.10.1.1")
		optional("org.apache.derby:derbyclient:10.10.1.1")
495
		optional("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1")
496
	}
C
Chris Beams 已提交
497 498
}

P
Phillip Webb 已提交
499 500
project("spring-context-support") {
	description = "Spring Context Support"
501

502
	dependencies {
503 504 505
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
506 507
		optional(project(":spring-jdbc")) // for Quartz support
		optional(project(":spring-tx")) // for Quartz support
508
		optional("javax.mail:mail:1.4.7")
J
Juergen Hoeller 已提交
509
		optional("javax.cache:cache-api:1.0.0-RC1")
510
		optional("com.google.guava:guava:16.0")
511 512
		optional("net.sf.ehcache:ehcache-core:2.6.5")
		optional("org.quartz-scheduler:quartz:1.8.6") {
513 514
			exclude group: "org.slf4j", module: "slf4j-log4j12"
		}
515
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
516
		optional("org.apache.velocity:velocity:1.7")
517
		optional("org.freemarker:freemarker:2.3.20")
518
		optional("com.lowagie:itext:2.1.7")
519
		optional("net.sf.jasperreports:jasperreports:5.5.0")
520 521
		optional("org.slf4j:slf4j-api:${slf4jVersion}")
		provided("javax.activation:activation:1.1")
522
		testCompile("org.apache.poi:poi:3.9")
523 524
		testCompile("commons-beanutils:commons-beanutils:1.8.0") // for Velocity/JasperReports
		testCompile("commons-digester:commons-digester:1.8.1") // for Velocity/JasperReports
P
Phillip Webb 已提交
525
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
526 527 528
	}

	// pick up **/*.types files in src/main
P
Phillip Webb 已提交
529
	sourceSets.main.resources.srcDirs += "src/main/java"
C
Chris Beams 已提交
530 531
}

P
Phillip Webb 已提交
532 533
project("spring-web") {
	description = "Spring Web"
534

535
	dependencies {
536 537 538 539
		compile(project(":spring-core"))
		compile(project(":spring-beans")) // for MultiPartFilter
		compile(project(":spring-aop")) // for JaxWsPortProxyFactoryBean
		compile(project(":spring-context"))
540
		optional(project(":spring-oxm")) // for MarshallingHttpMessageConverter
541
		compile("aopalliance:aopalliance:1.0")
542
		provided("javax.el:javax.el-api:2.2.4")
543
		provided("javax.faces:javax.faces-api:2.2")
544 545 546 547
		provided("javax.portlet:portlet-api:2.0")
		provided("javax.servlet:javax.servlet-api:3.0.1")
		provided("javax.servlet.jsp:jsp-api:2.1")
		provided("javax.activation:activation:1.1")
548
		optional("com.caucho:hessian:4.0.7")
549
		optional("rome:rome:1.0")
550
		optional("commons-fileupload:commons-fileupload:1.3")
551 552
		optional("org.apache.httpcomponents:httpclient:4.3.1")
		optional("org.apache.httpcomponents:httpasyncclient:4.0")
553
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
554
		optional("com.fasterxml.jackson.core:jackson-databind:2.3.0")
555
		optional("taglibs:standard:1.1.2")
B
Brian Clozel 已提交
556
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
557
			exclude group: "javax.servlet", module: "javax.servlet-api"
558
		}
B
Brian Clozel 已提交
559
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
560
			exclude group: "javax.servlet", module: "javax.servlet-api"
561
		}
562
		optional("log4j:log4j:1.2.17")
563
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
P
Phillip Webb 已提交
564
		testCompile("xmlunit:xmlunit:1.3")
565 566
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("log4j:log4j:1.2.17")
567 568 569
	}

	// pick up ContextLoader.properties in src/main
P
Phillip Webb 已提交
570
	sourceSets.main.resources.srcDirs += "src/main/java"
C
Chris Beams 已提交
571 572
}

573
project("spring-websocket") {
574
	description = "Spring WebSocket"
575 576 577 578 579

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
580
		optional(project(":spring-messaging"))
581
		optional(project(":spring-webmvc"))
582
		optional("javax.servlet:javax.servlet-api:3.1.0")
583
		optional("javax.websocket:javax.websocket-api:1.0")
584
		optional("org.apache.tomcat:tomcat-websocket:8.0.0-RC10") {
585 586 587
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
588 589
		optional("org.glassfish.tyrus:tyrus-websocket-core:1.2.1")
		optional("org.glassfish.tyrus:tyrus-container-servlet:1.2.1")
B
Brian Clozel 已提交
590
		optional("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
591 592
			exclude group: "javax.servlet", module: "javax.servlet"
		}
B
Brian Clozel 已提交
593
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
594
			exclude group: "javax.servlet", module: "javax.servlet"
595
		}
B
Brian Clozel 已提交
596
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
597 598 599 600 601 602 603
		optional("io.undertow:undertow-core:1.0.0.Beta31")
		optional("io.undertow:undertow-servlet:1.0.0.Beta31") {
			exclude group: "org.jboss.spec.javax.servlet", module: "jboss-servlet-api_3.1_spec"
		}
		optional("io.undertow:undertow-websockets-jsr:1.0.0.Beta31") {
			exclude group: "org.jboss.spec.javax.websocket", module: "jboss-websocket-api_1.0_spec"
		}
604
		optional("com.fasterxml.jackson.core:jackson-databind:2.3.0")
605
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC10")
606 607
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("log4j:log4j:1.2.17")
608 609
		testCompile("org.projectreactor:reactor-core:1.0.0.RELEASE")
		testCompile("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
610 611 612
	}
}

P
Phillip Webb 已提交
613 614
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
615

616 617
	dependencies {
		compile("aopalliance:aopalliance:1.0")
618 619 620
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
		optional("org.eclipse.persistence:org.eclipse.persistence.core:2.4.0")
		optional("org.eclipse.persistence:org.eclipse.persistence.jpa:2.4.0")
621 622
		optional("org.hibernate:hibernate-core:${hibernate3Version}")
		optional("org.hibernate:hibernate-entitymanager:${hibernate3Version}")
623
		optional("org.apache.openjpa:openjpa:2.2.1")
624
		optional("javax.jdo:jdo-api:3.0")
625
		provided("javax.servlet:javax.servlet-api:3.0.1")
626 627
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
P
Phillip Webb 已提交
628
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
629 630
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
631 632
		optional(project(":spring-aop"))
		optional(project(":spring-context"))
633 634
		compile(project(":spring-tx"))
		compile(project(":spring-jdbc"))
635
		optional(project(":spring-web"))
636
	}
C
Chris Beams 已提交
637 638
}

P
Phillip Webb 已提交
639 640
project("spring-orm-hibernate4") {
	description = "Spring Object/Relational Mapping - Hibernate 4 support"
641
	merge.into = project(":spring-orm")
642

643
	dependencies {
644 645
		provided(project(":spring-tx"))
		provided(project(":spring-jdbc"))
J
Juergen Hoeller 已提交
646 647
		optional("org.hibernate:hibernate-core:4.2.2.Final")
		optional("org.hibernate:hibernate-entitymanager:4.2.2.Final")
648
		optional(project(":spring-web"))
649
		optional("javax.servlet:javax.servlet-api:3.0.1")
650
	}
651 652
}

P
Phillip Webb 已提交
653 654
project("spring-webmvc") {
	description = "Spring Web MVC"
655

656
	dependencies {
657
		compile(project(":spring-core"))
658
		compile(files(project(":spring-core").objenesisRepackJar))
659 660 661 662
		compile(project(":spring-expression"))
		compile(project(":spring-beans"))
		compile(project(":spring-web"))
		compile(project(":spring-context"))
663 664
		optional(project(":spring-context-support")) // for Velocity support
		optional(project(":spring-oxm")) // for MarshallingView
665 666
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		optional("com.fasterxml.jackson.core:jackson-databind:2.3.0")
667
		optional("net.sf.jasperreports:jasperreports:5.5.0") {
668
			exclude group: "xml-apis", module: "xml-apis"
669
		}
670
		optional("rome:rome:1.0")
671
		optional("com.lowagie:itext:2.1.7")
672
		optional("net.sourceforge.jexcelapi:jxl:2.6.12")
673
		optional("org.apache.poi:poi:3.9")
674 675
		optional("org.apache.velocity:velocity:1.7")
		optional("velocity-tools:velocity-tools-view:1.4")
676
		optional("org.freemarker:freemarker:2.3.20")
677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693
		optional("org.apache.tiles:tiles-api:2.2.2")
		optional("org.apache.tiles:tiles-core:2.2.2") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
		optional("org.apache.tiles:tiles-servlet:2.2.2") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
		optional("org.apache.tiles:tiles-jsp:2.2.2") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
		optional("org.apache.tiles:tiles-el:2.2.2") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
		optional("org.apache.tiles:tiles-extras:2.2.2") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
			exclude group: "org.springframework", module: "spring-web"
		}
694 695 696
		provided("javax.servlet:jstl:1.2")
		provided("javax.servlet:javax.servlet-api:3.0.1")
		provided("javax.servlet.jsp:jsp-api:2.1")
697 698 699
		testCompile(project(":spring-aop"))
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("rhino:js:1.7R1")
P
Phillip Webb 已提交
700
		testCompile("xmlunit:xmlunit:1.3")
701
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
702
			exclude group: "xml-apis", module: "xml-apis"
703 704
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
705 706 707
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
708
		}
B
Brian Clozel 已提交
709
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
710
			exclude group: "javax.servlet", module: "javax.servlet"
711
		}
B
Brian Clozel 已提交
712
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
713
			exclude group: "javax.servlet", module: "javax.servlet"
714 715
		}
		testCompile("javax.validation:validation-api:1.0.0.GA")
716
		testCompile("commons-fileupload:commons-fileupload:1.3")
717 718
		testCompile("commons-io:commons-io:1.3")
		testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
719
		testCompile("org.apache.httpcomponents:httpclient:4.3.1")
720
		testCompile("joda-time:joda-time:2.2")
721 722 723
	}

	// pick up DispatcherServlet.properties in src/main
P
Phillip Webb 已提交
724
	sourceSets.main.resources.srcDirs += "src/main/java"
C
Chris Beams 已提交
725 726
}

P
Phillip Webb 已提交
727 728
project("spring-webmvc-tiles3") {
	description = "Spring Framework Tiles3 Integration"
729
	merge.into = project(":spring-webmvc")
730

731
	dependencies {
732 733
		provided(project(":spring-context"))
		provided(project(":spring-web"))
734
		provided("javax.el:javax.el-api:2.2.4")
735 736 737 738 739
		provided("javax.servlet:jstl:1.2")
		provided("javax.servlet.jsp:jsp-api:2.1")
		optional("org.apache.tiles:tiles-request-api:1.0.1")
		optional("org.apache.tiles:tiles-api:3.0.1")
		optional("org.apache.tiles:tiles-core:3.0.1") {
P
Phillip Webb 已提交
740
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
741
		}
742
		optional("org.apache.tiles:tiles-servlet:3.0.1") {
P
Phillip Webb 已提交
743
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
744
		}
745
		optional("org.apache.tiles:tiles-jsp:3.0.1") {
P
Phillip Webb 已提交
746
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
747
		}
748
		optional("org.apache.tiles:tiles-el:3.0.1") {
749
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
750
		}
751
		optional("org.apache.tiles:tiles-extras:3.0.1") {
P
Phillip Webb 已提交
752
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
753
			exclude group: "org.springframework", module: "spring-web"
754
		}
755 756
		provided("javax.servlet:javax.servlet-api:3.0.1")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
757
	}
758 759
}

P
Phillip Webb 已提交
760 761
project("spring-webmvc-portlet") {
	description = "Spring Web Portlet"
762

763
	dependencies {
764
		provided("javax.servlet:javax.servlet-api:3.0.1")
765
		provided("javax.portlet:portlet-api:2.0")
766 767 768 769 770
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		compile(project(":spring-webmvc"))
771
		optional("commons-fileupload:commons-fileupload:1.3")
772 773 774
	}

	// pick up DispatcherPortlet.properties in src/main
P
Phillip Webb 已提交
775
	sourceSets.main.resources.srcDirs += "src/main/java"
C
Chris Beams 已提交
776 777
}

P
Phillip Webb 已提交
778 779
project("spring-test") {
	description = "Spring TestContext Framework"
780

781
	dependencies {
782
		compile(project(":spring-core"))
783 784 785 786 787 788 789
		optional(project(":spring-beans"))
		optional(project(":spring-context"))
		optional(project(":spring-jdbc"))
		optional(project(":spring-tx"))
		optional(project(":spring-orm"))
		optional(project(":spring-web"))
		optional(project(":spring-webmvc"))
B
Brian Clozel 已提交
790
		optional(project(":spring-webmvc-portlet"))
791
		optional("junit:junit:${junitVersion}")
792
		optional("org.testng:testng:6.8.7")
793
		optional("javax.servlet:javax.servlet-api:3.0.1")
794 795
		optional("javax.servlet.jsp:jsp-api:2.1")
		optional("javax.portlet:portlet-api:2.0")
796
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
797 798 799 800
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
		provided("javax.inject:javax.inject:1")
		provided("javax.activation:activation:1.1")
		provided("javax.servlet:jstl:1.2")
801 802 803 804 805 806
		optional("org.hamcrest:hamcrest-core:1.3")
		optional("com.jayway.jsonpath:json-path:0.9.0")
		optional("xmlunit:xmlunit:1.3")
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
		testCompile(project(":spring-webmvc-tiles3"))
807
		testCompile("org.hibernate:hibernate-core:${hibernate3Version}")
808
		testCompile "org.slf4j:slf4j-jcl:${slf4jVersion}"
P
Phillip Webb 已提交
809
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
810 811
		testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
		testCompile("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
812
		testCompile("com.fasterxml.jackson.core:jackson-databind:2.3.0")
813 814 815 816 817 818 819 820 821 822 823 824
		testCompile("com.thoughtworks.xstream:xstream:1.4.4")
		testCompile("rome:rome:1.0")
		testCompile("javax.activation:activation:1.1")
		testCompile("javax.mail:mail:1.4.7")
		testCompile("org.apache.tiles:tiles-request-api:1.0.1")
		testCompile("org.apache.tiles:tiles-api:3.0.1")
		testCompile("org.apache.tiles:tiles-core:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
		testCompile("org.apache.tiles:tiles-servlet:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
825
	}
826 827 828 829 830 831 832 833 834

	task testNG(type: Test) {
		useTestNG()
		scanForTestClasses = false
		include "**/testng/*.*"
		exclude "**/FailingBeforeAndAfterMethodsTests.class"
		// "TestCase" classes are run by other test classes, not the build.
		exclude "**/*TestCase.class"
		// Generate TestNG reports alongside JUnit reports.
835
		getReports().getHtml().setEnabled(true)
836 837 838 839 840 841 842 843 844
	}

	test {
		dependsOn testNG
		useJUnit()
		exclude "**/testng/*.*"
		// "TestCase" classes are run by other test classes, not the build.
		exclude(["**/*TestCase.class", "**/*TestSuite.class"])
	}
C
Chris Beams 已提交
845 846
}

P
Phillip Webb 已提交
847 848 849
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
850

851
	dependencies {
852 853 854 855 856 857
		optional(project(":spring-beans")) // for @Configurable support
		optional(project(":spring-aop")) // for @Async support
		optional(project(":spring-context")) // for @Enable* support
		compile(project(":spring-context-support")) // for JavaMail support
		optional(project(":spring-tx")) // for JPA, @Transactional support
		optional(project(":spring-orm")) // for JPA exception translation support
858
		aspects(project(":spring-orm"))
859
		provided("org.eclipse.persistence:javax.persistence:2.0.0")
860
		testCompile("javax.mail:mail:1.4.7")
861 862 863
		ajc("org.aspectj:aspectjtools:1.8.0.M1") // needed for ajc on JDK 8 only
		rt("org.aspectj:aspectjrt:1.8.0.M1") // needed for ajc on JDK 8 only
		compile("org.aspectj:aspectjweaver:${aspectjVersion}") // exposing regular AspectJ version to users
864 865 866
		testCompile(project(":spring-core")) // for CodeStyleAspect
		compile(project(":spring-beans")) // for "p" namespace visibility
		testCompile(project(":spring-test"))
867
	}
868

869
	eclipse.project {
P
Phillip Webb 已提交
870
		natures += "org.eclipse.ajdt.ui.ajnature"
871
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
872
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
873
	}
C
Chris Beams 已提交
874 875
}

876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910
project("spring-framework-bom") {
	description = "Spring Framework (Bill of Materials)"

	configurations.archives.artifacts.clear()
	artifacts {
		// work around GRADLE-2406 by attaching text artifact
		archives(file("spring-framework-bom.txt"))
	}

	install {
		repositories.mavenInstaller {
			pom.whenConfigured {
				packaging = "pom"
				withXml {
					asNode().children().last() + {
						delegate.dependencyManagement {
							delegate.dependencies {
								parent.subprojects.sort { "$it.name" }.each { p ->
									if (p.hasProperty("merge") && p.merge.into == null && p != project) {
										delegate.dependency {
											delegate.groupId(p.group)
											delegate.artifactId(p.name)
											delegate.version(p.version)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

911
configure(rootProject) {
P
Phillip Webb 已提交
912
	description = "Spring Framework"
913

P
Phillip Webb 已提交
914
	apply plugin: "asciidoctor"
915
	apply plugin: "docbook-reference"
916
	apply plugin: "groovy"
R
Rob Winch 已提交
917

918
	// apply plugin: "detect-split-packages"
919 920
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
921
	asciidoctor {
922 923
		baseDir = project.file('src/asciidoc')
		backend = 'docbook5'
R
Rob Winch 已提交
924
		options = [
925 926 927 928 929 930 931
			eruby: 'erubis',
			attributes: [
				doctype: 'book',
				'spring-version' : project.version,
				revnumber : project.version,
				docinfo : ""
			]
R
Rob Winch 已提交
932
		]
933 934
	}

935 936 937 938 939 940 941 942 943 944
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

	afterEvaluate {
		tasks.findAll { it.name.startsWith("reference") }.each{ it.dependsOn.add("asciidoctor") }
	}

945 946 947 948 949
	// TODO: DetectSplitPackagesPlugin fails in line 154 due to method not found on java.io.File.
	// TODO: Possibly related to user rights or OS differences; passes on local Windows machine.
	// detectSplitPackages {
	//	projectsToScan -= project(":spring-instrument-tomcat")
	// }
950

C
Chris Beams 已提交
951
	// don't publish the default jar for the root project
952 953 954
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
955 956 957 958 959 960 961 962 963 964
		testCompile(project(":spring-core"))
		testCompile(project(":spring-beans"))
		testCompile(project(":spring-aop"))
		testCompile(project(":spring-expression"))
		testCompile(project(":spring-context"))
		testCompile(project(":spring-tx"))
		testCompile(project(":spring-jdbc"))
		testCompile(project(":spring-test"))
		testCompile(project(":spring-web"))
		testCompile(project(":spring-webmvc-portlet"))
965
		testCompile(project(":spring-orm"))
J
Juergen Hoeller 已提交
966
		testCompile("org.hibernate:hibernate-core:4.2.2.Final")
967
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
968 969 970 971
		testCompile("javax.portlet:portlet-api:2.0")
		testCompile("javax.inject:javax.inject:1")
		testCompile("javax.resource:connector-api:1.5")
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
P
Phillip Webb 已提交
972
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
973 974 975
	}

	task api(type: Javadoc) {
P
Phillip Webb 已提交
976 977
		group = "Documentation"
		description = "Generates aggregated Javadoc API documentation."
978
		title = "${rootProject.description} ${version} API"
C
Chris Beams 已提交
979

980 981 982 983 984
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
985 986 987
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
988
		options.overview = "src/api/overview.html"
989
		options.stylesheetFile = file("src/api/stylesheet.css")
990
		options.splitIndex = true
C
Chris Beams 已提交
991
		options.links(project.ext.javadocLinks)
992
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
993

994 995 996
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
997

P
Phillip Webb 已提交
998
		maxMemory = "1024m"
C
Chris Beams 已提交
999
		destinationDir = new File(buildDir, "api")
1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011

		doFirst {
			classpath = files(
				// ensure servlet 3.x and Hibernate 4.x have precedence on the Javadoc
				// classpath over their respective 2.5 and 3.x variants
				project(":spring-webmvc").sourceSets.main.compileClasspath.files.find { it =~ "servlet-api" },
				rootProject.sourceSets.test.compileClasspath.files.find { it =~ "hibernate-core" },
				// ensure the javadoc process can resolve types compiled from .aj sources
				project(":spring-aspects").sourceSets.main.output
			)
			classpath += files(subprojects.collect { it.sourceSets.main.compileClasspath })
		}
1012 1013
	}

1014
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1015 1016 1017
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1018 1019 1020
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1021 1022
		from("src/dist") {
			include "changelog.txt"
1023 1024 1025
		}

		from (api) {
1026
			into "javadoc-api"
1027 1028
		}

1029 1030
		from (reference) {
			into "spring-framework-reference"
1031 1032 1033 1034
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1035 1036 1037
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1038 1039 1040 1041 1042 1043 1044
		description = "Builds -${classifier} archive containing all " +
			"XSDs for deployment at http://springframework.org/schema."

		subprojects.each { subproject ->
			def Properties schemas = new Properties();

			subproject.sourceSets.main.resources.find {
P
Phillip Webb 已提交
1045
				it.path.endsWith("META-INF/spring.schemas")
1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062
			}?.withInputStream { schemas.load(it) }

			for (def key : schemas.keySet()) {
				def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
				assert shortName != key
				File xsdFile = subproject.sourceSets.main.resources.find {
					it.path.endsWith(schemas.get(key))
				}
				assert xsdFile != null
				into (shortName) {
					from xsdFile.path
				}
			}
		}
	}

	task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) {
P
Phillip Webb 已提交
1063 1064 1065
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1066 1067 1068 1069 1070
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

		ext.baseDir = "${baseName}-${project.version}";

P
Phillip Webb 已提交
1071 1072 1073 1074
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1075
			into "${baseDir}"
P
Phillip Webb 已提交
1076
			expand(copyright: new Date().format("yyyy"), version: project.version)
1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089
		}

		from(zipTree(docsZip.archivePath)) {
			into "${baseDir}/docs"
		}

		from(zipTree(schemaZip.archivePath)) {
			into "${baseDir}/schema"
		}

		subprojects.each { subproject ->
			into ("${baseDir}/libs") {
				from subproject.jar
P
Phillip Webb 已提交
1090
				if (subproject.tasks.findByPath("sourcesJar")) {
1091 1092
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1093
				if (subproject.tasks.findByPath("javadocJar")) {
1094 1095 1096 1097 1098 1099 1100 1101 1102
					from subproject.javadocJar
				}
			}
		}
	}

	// Create an distribution that contains all dependencies (required and optional).
	// Not published by default; only for use when building from source.
	task depsZip(type: Zip, dependsOn: distZip) { zipTask ->
P
Phillip Webb 已提交
1103 1104 1105
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1106 1107 1108 1109 1110 1111 1112 1113 1114 1115
		description = "Builds -${classifier} archive, containing everything " +
			"in the -${distZip.classifier} archive plus all runtime dependencies."

		from zipTree(distZip.archivePath)

		gradle.taskGraph.whenReady { taskGraph ->
			if (taskGraph.hasTask(":${zipTask.name}")) {
				def projectNames = rootProject.subprojects*.name
				def artifacts = new HashSet()
				subprojects.each { subproject ->
1116 1117
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138
						def dependency = artifact.moduleVersion.id
						if (!projectNames.contains(dependency.name)) {
							artifacts << artifact.file
						}
					}
				}

				zipTask.from(artifacts) {
					into "${distZip.baseDir}/deps"
				}
			}
		}
	}

	artifacts {
		archives docsZip
		archives schemaZip
		archives distZip
	}

	task wrapper(type: Wrapper) {
P
Phillip Webb 已提交
1139
		description = "Generates gradlew[.bat] scripts"
P
Phillip Webb 已提交
1140
		gradleVersion = "1.9"
1141 1142

		doLast() {
1143
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1144
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1145
			File wrapperFile = file("gradlew")
1146 1147
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1148
			File wrapperBatFile = file("gradlew.bat")
1149 1150 1151 1152
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1153

1154
}
1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166

/*
 * Support publication of artifacts versioned by topic branch.
 * CI builds supply `-P BRANCH_NAME=<TOPIC>` to gradle at build time.
 * If <TOPIC> starts with 'SPR-', change version
 *     from BUILD-SNAPSHOT => <TOPIC>-SNAPSHOT
 *     e.g. 3.2.1.BUILD-SNAPSHOT => 3.2.1.SPR-1234-SNAPSHOT
 */
def qualifyVersionIfNecessary(version) {
	if (rootProject.hasProperty("BRANCH_NAME")) {
		def qualifier = rootProject.getProperty("BRANCH_NAME")
		if (qualifier.startsWith("SPR-")) {
1167
			return version.replace('BUILD', qualifier)
1168 1169
		}
	}
1170
	return version
1171
}