build.gradle 36.8 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

J
Juergen Hoeller 已提交
16
	ext.aspectjVersion  = "1.8.0.M1"
J
Juergen Hoeller 已提交
17
	ext.groovyVersion   = "1.8.9"
P
Phillip Webb 已提交
18
	ext.hsqldbVersion   = "2.3.1"
P
Phillip Webb 已提交
19 20
	ext.junitVersion    = "4.11"
	ext.slf4jVersion    = "1.6.1"
B
Brian Clozel 已提交
21
	ext.jettyVersion    = "9.1.0.v20131115"
22
	ext.gradleScriptDir = "${rootProject.projectDir}/gradle"
23

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

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
	[compileJava, 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:-options",     // intentionally disabled
		"-Xlint:-fallthrough", // intentionally disabled
		"-Xlint:-rawtypes",    // TODO enable and fix warnings
		"-Xlint:-deprecation", // TODO enable and fix warnings
		"-Xlint:-unchecked"    // TODO enable and fix warnings
	]
C
Chris Beams 已提交
49

50 51 52 53 54 55
	compileJava {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

	compileTestJava {
J
Juergen Hoeller 已提交
56 57 58 59
		sourceCompatibility=1.7
		targetCompatibility=1.7
	}

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

C
Chris Beams 已提交
62 63
	test {
		systemProperty("java.awt.headless", "true")
64
		systemProperty("testGroups", project.properties.get("testGroups"))
65 66 67
		scanForTestClasses = false
		include '**/*Tests.*'
		exclude '**/*Abstract*.*'
C
Chris Beams 已提交
68
	}
C
Chris Beams 已提交
69

70
	repositories {
71 72
		maven { url "http://repo.spring.io/libs-release" }
		maven { url "http://repo.spring.io/milestone" }  // for AspectJ 1.8.0.M1
R
Rossen Stoyanchev 已提交
73 74
		maven { url "https://repository.apache.org/content/repositories/releases" }  // tomcat 8
		// maven { url "https://repository.apache.org/content/repositories/snapshots" }  // tomcat 8 snapshots
J
Juergen Hoeller 已提交
75
		maven { url "https://maven.java.net/content/repositories/releases" }  // javax.websocket, tyrus
J
Juergen Hoeller 已提交
76
		maven { url "https://oss.sonatype.org/content/repositories/releases" }  // javax.cache
77
	}
C
Chris Beams 已提交
78

79
	dependencies {
80
		testCompile("junit:junit:${junitVersion}")
81
		testCompile("org.hamcrest:hamcrest-all:1.3")
82
		testCompile("org.mockito:mockito-core:1.9.5")
83
	}
C
Chris Beams 已提交
84 85

	ext.javadocLinks = [
P
Phillip Webb 已提交
86
		"http://docs.oracle.com/javase/7/docs/api/",
J
Juergen Hoeller 已提交
87 88 89 90
		"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 已提交
91 92
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
J
Juergen Hoeller 已提交
93 94 95 96 97
		"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 已提交
98
		"http://aopalliance.sourceforge.net/doc/",
C
Chris Beams 已提交
99
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
J
Juergen Hoeller 已提交
100 101
		"http://ehcache.org/apidocs/",
		"http://quartz-scheduler.org/api/2.1.7/",
102
		"http://jackson.codehaus.org/1.9.12/javadoc/",
103
		"http://fasterxml.github.com/jackson-core/javadoc/2.2.2/",
C
Chris Beams 已提交
104
	] as String[]
105 106
}

107
configure(subprojects - project(":spring-build-src")) { subproject ->
108
	apply plugin: "merge"
109 110 111
	apply from: "${gradleScriptDir}/publish-maven.gradle"

	jar {
P
Phillip Webb 已提交
112 113 114 115
		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
116 117 118 119 120

		from("${rootProject.projectDir}/src/dist") {
			include "license.txt"
			include "notice.txt"
			into "META-INF"
P
Phillip Webb 已提交
121
			expand(copyright: new Date().format("yyyy"), version: project.version)
122 123 124 125
		}
	}

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

128 129 130
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = project.name
C
Chris Beams 已提交
131
		options.links(project.ext.javadocLinks)
132
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
133 134 135 136 137

		// 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
138 139 140
	}

	task sourcesJar(type: Jar, dependsOn:classes) {
P
Phillip Webb 已提交
141
		classifier = "sources"
142
		from sourceSets.main.allJava.srcDirs
P
Phillip Webb 已提交
143
		include "**/*.java", "**/*.aj"
144 145 146
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
147
		classifier = "javadoc"
148 149 150 151 152 153 154
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
155 156
}

157 158
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
159
	apply plugin: "groovy"
160 161 162

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
163
		compile localGroovy()
164 165 166 167 168
	}

	configurations.archives.artifacts.clear()
}

P
Phillip Webb 已提交
169 170
project("spring-core") {
	description = "Spring Core"
171

172
	// As of Spring 4.0, spring-core includes asm 4.2 and repackages cglib 3.0, inlining
173
	// both into the spring-core jar. cglib 3.0 itself depends on asm 4, and is therefore
174
	// further transformed by the JarJar task to depend on org.springframework.asm; this
175
	// avoids including two different copies of asm unnecessarily.
P
Phillip Webb 已提交
176
	def cglibVersion = "3.0"
177
	def objenesisVersion = "2.0"
178 179 180 181

	configurations {
		jarjar
		cglib
182
		objenesis
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
	}

	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 已提交
198 199
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
					// as mentioned above, transform cglib"s internal asm dependencies from
200 201
					// 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 已提交
202
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
203 204 205 206 207
				}
			}
		}
	}

208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
	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")
				}
			}
		}
	}

227
	dependencies {
228
		cglib("cglib:cglib:${cglibVersion}@jar")
229
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
230
		jarjar("com.googlecode.jarjar:jarjar:1.3")
231

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

	jar {
244
		// inline repackaged cglib classes directly into the spring-core jar
245 246
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
247
			include "org/springframework/cglib/**"
248
		}
249 250 251 252 253

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
254
	}
J
Juergen Hoeller 已提交
255 256 257 258 259 260

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

P
Phillip Webb 已提交
263 264
project("spring-beans") {
	description = "Spring Beans"
265

266
	dependencies {
267 268
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
269
		provided("javax.el:javax.el-api:2.2.4")
270 271
		provided("javax.inject:javax.inject:1")
		testCompile("log4j:log4j:1.2.17")
272
	}
C
Chris Beams 已提交
273 274
}

J
Juergen Hoeller 已提交
275 276 277
project('spring-beans-groovy') {
	description 'Groovy Bean Definitions'
	merge.into = project(":spring-beans")
278
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
279 280 281

	dependencies {
		compile(project(":spring-core"))
282
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
J
Juergen Hoeller 已提交
283 284 285 286 287 288 289 290 291 292 293
	}

	// this module's Java and Groovy sources need to be compiled together
	compileJava.enabled=false
	sourceSets {
		main {
			groovy {
				srcDir 'src/main/java'
			}
		}
	}
294 295 296 297 298

	compileGroovy {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}
J
Juergen Hoeller 已提交
299 300
}

P
Phillip Webb 已提交
301 302
project("spring-aop") {
	description = "Spring AOP"
303

304
	dependencies {
305 306
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
307
		compile(files(project(":spring-core").objenesisRepackJar))
308
		compile(project(":spring-beans"))
309
		compile("aopalliance:aopalliance:1.0")
310 311 312
		optional("com.jamonapi:jamon:2.4")
		optional("commons-pool:commons-pool:1.5.3")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
313
	}
C
Chris Beams 已提交
314 315
}

P
Phillip Webb 已提交
316 317
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
318

319
	dependencies {
320
		compile(project(":spring-core"))
321
	}
C
Chris Beams 已提交
322 323
}

P
Phillip Webb 已提交
324 325
project("spring-instrument") {
	description = "Spring Instrument"
326

327
	jar {
P
Phillip Webb 已提交
328 329
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
330 331
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
332 333 334
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
335
	}
C
Chris Beams 已提交
336 337
}

P
Phillip Webb 已提交
338 339
project("spring-instrument-tomcat") {
	description = "Spring Instrument Tomcat"
340

341
	dependencies {
342
		provided("org.apache.tomcat:catalina:6.0.16")
343
	}
C
Chris Beams 已提交
344 345
}

P
Phillip Webb 已提交
346 347
project("spring-context") {
	description = "Spring Context"
348
	apply plugin: "groovy"
349

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

375 376 377
	// pick up RmiInvocationWrapperRTD.xml in src/main
	sourceSets.main.resources.srcDirs += "src/main/java"

378
	test {
P
Phillip Webb 已提交
379
		jvmArgs = ["-disableassertions:org.aspectj.weaver.UnresolvedType"] // SPR-7989
380
	}
381 382 383 384 385 386 387 388 389 390
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		optional(project(":spring-websocket"))
391
		optional(project(":spring-webmvc"))
392
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
R
Rossen Stoyanchev 已提交
393 394
		optional("org.projectreactor:reactor-core:1.0.0.RELEASE")
		optional("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
B
Brian Clozel 已提交
395
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
396 397
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
398
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
399 400
		testCompile(project(":spring-test"))
		testCompile("com.thoughtworks.xstream:xstream:1.4.4")
401 402
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
		testCompile("javax.inject:javax.inject-tck:1")
403 404
		testCompile("javax.servlet:javax.servlet-api:3.1.0")
		testCompile("log4j:log4j:1.2.17")
405 406 407 408 409
		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 已提交
410
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
411
			exclude group: "javax.servlet", module: "javax.servlet-api"
412
		}
R
Rossen Stoyanchev 已提交
413 414
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC5")
		testCompile("org.apache.tomcat.embed:tomcat-embed-logging-juli:8.0.0-RC5")
415
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
416
	}
C
Chris Beams 已提交
417 418
}

P
Phillip Webb 已提交
419 420
project("spring-tx") {
	description = "Spring Transaction"
421

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

P
Phillip Webb 已提交
437 438 439
project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"
440

P
Phillip Webb 已提交
441 442 443 444
	// 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 已提交
445

P
Phillip Webb 已提交
446
	compileTestJava {
447 448 449 450 451 452
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

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

P
Phillip Webb 已提交
470 471
project("spring-jms") {
	description = "Spring JMS"
472

473
	dependencies {
474 475 476 477 478
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
		compile(project(":spring-tx"))
479
		optional(project(":spring-oxm"))
480
		compile("aopalliance:aopalliance:1.0")
481 482 483
		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")
484
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
485
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
486
	}
C
Chris Beams 已提交
487 488
}

P
Phillip Webb 已提交
489 490
project("spring-jdbc") {
	description = "Spring JDBC"
491

492
	dependencies {
493 494
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
495
		optional(project(":spring-context")) // for JndiDataSourceLookup
496
		compile(project(":spring-tx"))
497
		optional("c3p0:c3p0:0.9.1.2")
P
Phillip Webb 已提交
498
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
499 500 501 502
		optional("com.h2database:h2:1.0.71")
		optional("org.apache.derby:derby:10.5.3.0_1")
		optional("org.apache.derby:derbyclient:10.5.3.0_1")
		optional("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1")
503
	}
C
Chris Beams 已提交
504 505
}

P
Phillip Webb 已提交
506 507
project("spring-context-support") {
	description = "Spring Context Support"
508

509
	dependencies {
510 511 512
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
513 514
		optional(project(":spring-jdbc")) // for Quartz support
		optional(project(":spring-tx")) // for Quartz support
515
		optional("javax.mail:mail:1.4.7")
J
Juergen Hoeller 已提交
516
		optional("javax.cache:cache-api:1.0.0-PFD")
517 518
		optional("net.sf.ehcache:ehcache-core:2.6.5")
		optional("org.quartz-scheduler:quartz:1.8.6") {
519 520
			exclude group: "org.slf4j", module: "slf4j-log4j12"
		}
521
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
522
		optional("org.apache.velocity:velocity:1.7")
523
		optional("org.freemarker:freemarker:2.3.19")
524
		optional("com.lowagie:itext:2.1.7")
525
		optional("net.sf.jasperreports:jasperreports:5.1.0")
526 527
		optional("org.slf4j:slf4j-api:${slf4jVersion}")
		provided("javax.activation:activation:1.1")
528
		testCompile("org.apache.poi:poi:3.9")
529 530
		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 已提交
531
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
532 533 534
	}

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

P
Phillip Webb 已提交
538 539
project("spring-web") {
	description = "Spring Web"
540

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

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

579
project("spring-websocket") {
580
	description = "Spring WebSocket"
581 582 583 584 585

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
586
		optional(project(":spring-webmvc"))
587
		optional("javax.servlet:javax.servlet-api:3.1.0")
588
		optional("javax.websocket:javax.websocket-api:1.0")
R
Rossen Stoyanchev 已提交
589
		optional("org.apache.tomcat:tomcat-websocket:8.0.0-RC5") {
590 591 592
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
593 594
		optional("org.glassfish.tyrus:tyrus-websocket-core:1.2.1")
		optional("org.glassfish.tyrus:tyrus-container-servlet:1.2.1")
B
Brian Clozel 已提交
595
		optional("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
596 597
			exclude group: "javax.servlet", module: "javax.servlet"
		}
B
Brian Clozel 已提交
598
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
599
			exclude group: "javax.servlet", module: "javax.servlet"
600
		}
B
Brian Clozel 已提交
601
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
602
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
R
Rossen Stoyanchev 已提交
603
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
R
Rossen Stoyanchev 已提交
604
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC5")
605 606
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("log4j:log4j:1.2.17")
607 608 609
	}
}

P
Phillip Webb 已提交
610 611
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
612

613 614
	dependencies {
		compile("aopalliance:aopalliance:1.0")
615 616 617 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")
		optional("org.hibernate:hibernate-core:3.6.9.Final")
		optional("org.hibernate:hibernate-entitymanager:3.6.9.Final")
		optional("org.apache.openjpa:openjpa:2.2.1")
621
		optional("javax.jdo:jdo-api:3.0")
622
		provided("javax.servlet:javax.servlet-api:3.0.1")
623 624
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
P
Phillip Webb 已提交
625
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
626 627
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
628 629
		optional(project(":spring-aop"))
		optional(project(":spring-context"))
630 631
		compile(project(":spring-tx"))
		compile(project(":spring-jdbc"))
632
		optional(project(":spring-web"))
633
	}
C
Chris Beams 已提交
634 635
}

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

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

P
Phillip Webb 已提交
650 651
project("spring-webmvc") {
	description = "Spring Web MVC"
652

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

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

P
Phillip Webb 已提交
711 712
project("spring-webmvc-tiles3") {
	description = "Spring Framework Tiles3 Integration"
713
	merge.into = project(":spring-webmvc")
714

715
	dependencies {
716 717
		provided(project(":spring-context"))
		provided(project(":spring-web"))
718
		provided("javax.el:javax.el-api:2.2.4")
719 720 721 722 723
		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 已提交
724
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
725
		}
726
		optional("org.apache.tiles:tiles-servlet:3.0.1") {
P
Phillip Webb 已提交
727
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
728
		}
729
		optional("org.apache.tiles:tiles-jsp:3.0.1") {
P
Phillip Webb 已提交
730
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
731 732 733
		}
		optional("org.apache.tiles:tiles-extras:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
P
Polish  
Phillip Webb 已提交
734
			exclude group: "org.springframework", module: "spring-web"
735
		}
736
		optional("org.apache.tiles:tiles-el:3.0.1") {
P
Phillip Webb 已提交
737
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
738
		}
739 740
		provided("javax.servlet:javax.servlet-api:3.0.1")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
741
	}
742 743
}

P
Phillip Webb 已提交
744 745
project("spring-webmvc-portlet") {
	description = "Spring Web Portlet"
746

747
	dependencies {
748
		provided("javax.servlet:javax.servlet-api:3.0.1")
749
		provided("javax.portlet:portlet-api:2.0")
750 751 752 753 754
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		compile(project(":spring-webmvc"))
755
		optional("commons-fileupload:commons-fileupload:1.2")
756 757 758
	}

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

P
Phillip Webb 已提交
762 763
project("spring-test") {
	description = "Spring TestContext Framework"
764

765
	dependencies {
766
		compile(project(":spring-core"))
767 768 769 770 771 772 773
		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 已提交
774
		optional(project(":spring-webmvc-portlet"))
775
		optional("junit:junit:${junitVersion}")
S
Sam Brannen 已提交
776
		optional("org.testng:testng:6.8.5")
777
		optional("javax.servlet:javax.servlet-api:3.0.1")
778 779
		optional("javax.servlet.jsp:jsp-api:2.1")
		optional("javax.portlet:portlet-api:2.0")
780
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
781 782 783 784
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
		provided("javax.inject:javax.inject:1")
		provided("javax.activation:activation:1.1")
		provided("javax.servlet:jstl:1.2")
785 786 787 788 789 790 791
		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"))
		testCompile("org.hibernate:hibernate-core:3.6.9.Final")
792
		testCompile "org.slf4j:slf4j-jcl:${slf4jVersion}"
P
Phillip Webb 已提交
793
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
794 795 796 797 798 799 800 801 802 803 804 805 806 807 808
		testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
		testCompile("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		testCompile("com.fasterxml.jackson.core:jackson-databind:2.2.2")
		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"
		}
809
	}
810 811 812 813 814 815 816 817 818

	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.
819
		getReports().getHtml().setEnabled(true)
820 821 822 823 824 825 826 827 828
	}

	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 已提交
829 830
}

P
Phillip Webb 已提交
831 832 833
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
834

835
	dependencies {
836 837 838 839 840 841
		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
842
		aspects(project(":spring-orm"))
843
		provided("org.eclipse.persistence:javax.persistence:2.0.0")
844
		testCompile("javax.mail:mail:1.4.7")
845
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
C
Chris Beams 已提交
846
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
847 848 849 850
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
		testCompile(project(":spring-core")) // for CodeStyleAspect
		compile(project(":spring-beans")) // for "p" namespace visibility
		testCompile(project(":spring-test"))
851
	}
852

853
	eclipse.project {
P
Phillip Webb 已提交
854
		natures += "org.eclipse.ajdt.ui.ajnature"
855
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
856
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
857
	}
C
Chris Beams 已提交
858 859
}

860
configure(rootProject) {
P
Phillip Webb 已提交
861
	description = "Spring Framework"
862

P
Phillip Webb 已提交
863
	apply plugin: "asciidoctor"
864
	apply plugin: "docbook-reference"
865
	apply plugin: "groovy"
R
Rob Winch 已提交
866

867
	// apply plugin: "detect-split-packages"
868 869
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
870
	asciidoctor {
871 872
		baseDir = project.file('src/asciidoc')
		backend = 'docbook5'
R
Rob Winch 已提交
873
		options = [
874 875 876 877 878 879 880
			eruby: 'erubis',
			attributes: [
				doctype: 'book',
				'spring-version' : project.version,
				revnumber : project.version,
				docinfo : ""
			]
R
Rob Winch 已提交
881
		]
882 883
	}

884 885 886 887 888 889 890 891 892 893
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

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

894 895 896 897 898
	// 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")
	// }
899

C
Chris Beams 已提交
900
	// don't publish the default jar for the root project
901 902 903
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
904 905 906 907 908 909 910 911 912 913
		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"))
914
		testCompile(project(":spring-orm"))
J
Juergen Hoeller 已提交
915
		testCompile("org.hibernate:hibernate-core:4.2.2.Final")
916
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
917 918 919 920
		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 已提交
921
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
922 923 924
	}

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

929 930 931 932 933
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
934 935 936
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
937
		options.overview = "src/api/overview.html"
938
		options.stylesheetFile = file("src/api/stylesheet.css")
939
		options.splitIndex = true
C
Chris Beams 已提交
940
		options.links(project.ext.javadocLinks)
941
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
942

943 944 945
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
946

P
Phillip Webb 已提交
947
		maxMemory = "1024m"
C
Chris Beams 已提交
948
		destinationDir = new File(buildDir, "api")
949 950 951 952 953 954 955 956 957 958 959 960

		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 })
		}
961 962
	}

963
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
964 965 966
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
967 968 969
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
970 971
		from("src/dist") {
			include "changelog.txt"
972 973 974
		}

		from (api) {
975
			into "javadoc-api"
976 977
		}

978 979
		from (reference) {
			into "spring-framework-reference"
980 981 982 983
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
984 985 986
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
987 988 989 990 991 992 993
		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 已提交
994
				it.path.endsWith("META-INF/spring.schemas")
995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011
			}?.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 已提交
1012 1013 1014
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1015 1016 1017 1018 1019
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

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

P
Phillip Webb 已提交
1020 1021 1022 1023
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1024
			into "${baseDir}"
P
Phillip Webb 已提交
1025
			expand(copyright: new Date().format("yyyy"), version: project.version)
1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038
		}

		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 已提交
1039
				if (subproject.tasks.findByPath("sourcesJar")) {
1040 1041
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1042
				if (subproject.tasks.findByPath("javadocJar")) {
1043 1044 1045 1046 1047 1048 1049 1050 1051
					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 已提交
1052 1053 1054
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1055 1056 1057 1058 1059 1060 1061 1062 1063 1064
		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 ->
1065 1066
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087
						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 已提交
1088
		description = "Generates gradlew[.bat] scripts"
P
Phillip Webb 已提交
1089
		gradleVersion = "1.9"
1090 1091

		doLast() {
1092
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1093
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1094
			File wrapperFile = file("gradlew")
1095 1096
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1097
			File wrapperBatFile = file("gradlew.bat")
1098 1099 1100 1101
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1102

1103
}
1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115

/*
 * 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-")) {
1116
			return version.replace('BUILD', qualifier)
1117 1118
		}
	}
1119
	return version
1120
}