build.gradle 40.2 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
	ext.aspectjVersion       = "1.7.4"
	ext.groovyVersion        = "1.8.9"
	ext.hibernate3Version    = "3.6.10.Final"
19
	ext.hibernate4Version    = "4.2.11.Final"
20
	ext.hibValVersion        = "4.3.1.Final"
21
	ext.hsqldbVersion        = "2.3.2"
22 23
	ext.jackson2Version      = "2.3.1"
	ext.jasperReportsVersion = "5.5.1"
24
	ext.jettyVersion         = "9.1.3.v20140225"
25 26
	ext.jodaVersion          = "2.3"
	ext.junitVersion         = "4.11"
27
	ext.slf4jVersion         = "1.7.6"
28 29
	ext.tiles2Version        = "2.2.2"
	ext.tiles3Version        = "3.0.3"
30
	ext.xstreamVersion       = "1.4.7"
31

32
	ext.gradleScriptDir   = "${rootProject.projectDir}/gradle"
33

34
	apply plugin: "propdeps"
P
Phillip Webb 已提交
35
	apply plugin: "java"
36
	apply plugin: "test-source-set-dependencies"
37
	apply from: "${gradleScriptDir}/ide.gradle"
C
Chris Beams 已提交
38

P
Phillip Webb 已提交
39 40 41 42 43 44
	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"
45
	]
C
Chris Beams 已提交
46

P
Phillip Webb 已提交
47 48 49 50 51 52 53
	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"]

54 55 56 57 58 59
	compileJava {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

	compileTestJava {
J
Juergen Hoeller 已提交
60 61 62 63
		sourceCompatibility=1.7
		targetCompatibility=1.7
	}

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

C
Chris Beams 已提交
66 67
	test {
		systemProperty("java.awt.headless", "true")
68
		systemProperty("testGroups", project.properties.get("testGroups"))
69
		scanForTestClasses = false
70
		include(["**/*Tests.class", "**/*Test.class"])
71 72 73 74
		// Since we set scanForTestClasses to false, we need to filter out inner
		// classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to
		// run MyTests by itself will fail if MyTests contains any inner classes. 
		exclude(["**/Abstract*.class", '**/*$*'])
C
Chris Beams 已提交
75
	}
C
Chris Beams 已提交
76

77
	repositories {
78 79
		maven { url "http://repo.spring.io/libs-release" }
		maven { url "http://repo.spring.io/milestone" }  // for AspectJ 1.8.0.M1
J
Juergen Hoeller 已提交
80
		maven { url "https://oss.sonatype.org/content/repositories/releases" }  // javax.cache
81
	}
C
Chris Beams 已提交
82

83
	dependencies {
84 85 86 87 88 89
		testCompile("junit:junit:${junitVersion}") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
		testCompile("org.mockito:mockito-core:1.9.5") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
90
		testCompile("org.hamcrest:hamcrest-all:1.3")
91
	}
C
Chris Beams 已提交
92 93

	ext.javadocLinks = [
P
Phillip Webb 已提交
94
		"http://docs.oracle.com/javase/7/docs/api/",
J
Juergen Hoeller 已提交
95 96 97 98
		"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 已提交
99 100
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
J
Juergen Hoeller 已提交
101 102 103 104
		"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/",
105
		"http://tiles.apache.org/tiles-request/apidocs/",
J
Juergen Hoeller 已提交
106
		"http://tiles.apache.org/framework/apidocs/",
P
Phillip Webb 已提交
107
		"http://aopalliance.sourceforge.net/doc/",
C
Chris Beams 已提交
108
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
J
Juergen Hoeller 已提交
109 110
		"http://ehcache.org/apidocs/",
		"http://quartz-scheduler.org/api/2.1.7/",
P
Phillip Webb 已提交
111
		"http://jackson.codehaus.org/1.9.4/javadoc/",
112 113
		"http://fasterxml.github.com/jackson-core/javadoc/2.3.0/",
		"http://fasterxml.github.com/jackson-databind/javadoc/2.3.0/",
P
Phillip Webb 已提交
114
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs"
C
Chris Beams 已提交
115
	] as String[]
116 117
}

118
configure(subprojects - project(":spring-build-src")) { subproject ->
119
	apply plugin: "merge"
120 121 122
	apply from: "${gradleScriptDir}/publish-maven.gradle"

	jar {
P
Phillip Webb 已提交
123 124 125 126
		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
127 128 129 130 131

		from("${rootProject.projectDir}/src/dist") {
			include "license.txt"
			include "notice.txt"
			into "META-INF"
P
Phillip Webb 已提交
132
			expand(copyright: new Date().format("yyyy"), version: project.version)
133 134 135 136
		}
	}

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

139 140 141
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = project.name
C
Chris Beams 已提交
142
		options.links(project.ext.javadocLinks)
143
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
144 145 146 147 148

		// 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
149 150 151
	}

	task sourcesJar(type: Jar, dependsOn:classes) {
P
Phillip Webb 已提交
152
		classifier = "sources"
153
		from sourceSets.main.allJava.srcDirs
P
Phillip Webb 已提交
154
		include "**/*.java", "**/*.aj"
155 156 157
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
158
		classifier = "javadoc"
159 160 161 162 163 164 165
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
166 167
}

168 169
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
170
	apply plugin: "groovy"
171 172 173

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
174
		compile localGroovy()
175 176 177 178 179
	}

	configurations.archives.artifacts.clear()
}

P
Phillip Webb 已提交
180 181
project("spring-core") {
	description = "Spring Core"
182

183 184
	// As of Spring 4.0.3, spring-core includes asm 5.0 and repackages cglib 3.1, inlining
	// both into the spring-core jar. cglib 3.1 itself depends on asm 4+, and is therefore
185
	// further transformed by the JarJar task to depend on org.springframework.asm; this
186
	// avoids including two different copies of asm unnecessarily.
187 188
	def cglibVersion = "3.1"
	def objenesisVersion = "2.1"
189 190 191 192

	configurations {
		jarjar
		cglib
193
		objenesis
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
	}

	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 已提交
209 210
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
					// as mentioned above, transform cglib"s internal asm dependencies from
211 212
					// 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 已提交
213
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
214 215 216 217 218
				}
			}
		}
	}

219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
	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")
				}
			}
		}
	}

238
	dependencies {
239
		cglib("cglib:cglib:${cglibVersion}@jar")
240
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
241
		jarjar("com.googlecode.jarjar:jarjar:1.3")
242

P
Phillip Webb 已提交
243
		compile(files(cglibRepackJar))
244
		compile("commons-logging:commons-logging:1.1.3")
245
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
246
		optional("net.sf.jopt-simple:jopt-simple:4.6")
247
		optional("log4j:log4j:1.2.17")
A
Arjen Poutsma 已提交
248
		testCompile("xmlunit:xmlunit:1.5")
P
Phillip Webb 已提交
249 250 251
		testCompile("org.codehaus.woodstox:wstx-asl:3.2.7") {
			exclude group: "stax", module: "stax-api"
		}
252 253 254
	}

	jar {
255
		// inline repackaged cglib classes directly into the spring-core jar
256 257
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
258
			include "org/springframework/cglib/**"
259
		}
260 261 262 263 264

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
265
	}
J
Juergen Hoeller 已提交
266 267 268 269 270 271

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

P
Phillip Webb 已提交
274 275
project("spring-beans") {
	description = "Spring Beans"
276

277
	dependencies {
278 279
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
280
		optional("javax.inject:javax.inject:1")
281
		optional("javax.el:javax.el-api:2.2.4")
282
		testCompile("log4j:log4j:1.2.17")
S
Stephane Nicoll 已提交
283 284
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC10")
    }
C
Chris Beams 已提交
285 286
}

287 288
project("spring-beans-groovy") {
	description "Groovy Bean Definitions"
J
Juergen Hoeller 已提交
289
	merge.into = project(":spring-beans")
290
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
291 292 293

	dependencies {
		compile(project(":spring-core"))
294
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
J
Juergen Hoeller 已提交
295 296 297 298 299 300 301
	}

	// this module's Java and Groovy sources need to be compiled together
	compileJava.enabled=false
	sourceSets {
		main {
			groovy {
302
				srcDir "src/main/java"
J
Juergen Hoeller 已提交
303 304 305
			}
		}
	}
306 307 308 309 310

	compileGroovy {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}
J
Juergen Hoeller 已提交
311 312
}

P
Phillip Webb 已提交
313 314
project("spring-aop") {
	description = "Spring AOP"
315

316
	dependencies {
317
		compile(project(":spring-beans"))
318 319
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
320
		compile(files(project(":spring-core").objenesisRepackJar))
321
		compile("aopalliance:aopalliance:1.0")
322
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
323
		optional("commons-pool:commons-pool:1.6")
324
		optional("com.jamonapi:jamon:2.4")
325
	}
C
Chris Beams 已提交
326 327
}

P
Phillip Webb 已提交
328 329
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
330

331
	dependencies {
332
		compile(project(":spring-core"))
333
	}
C
Chris Beams 已提交
334 335
}

P
Phillip Webb 已提交
336 337
project("spring-instrument") {
	description = "Spring Instrument"
338

339
	jar {
P
Phillip Webb 已提交
340 341
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
342 343
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
344 345 346
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
347
	}
C
Chris Beams 已提交
348 349
}

P
Phillip Webb 已提交
350 351
project("spring-instrument-tomcat") {
	description = "Spring Instrument Tomcat"
352

353
	dependencies {
354
		provided("org.apache.tomcat:catalina:6.0.16")
355
	}
C
Chris Beams 已提交
356 357
}

P
Phillip Webb 已提交
358 359
project("spring-context") {
	description = "Spring Context"
360
	apply plugin: "groovy"
361

362
	dependencies {
363 364 365 366 367
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
368
		optional(project(":spring-instrument"))
369
		optional("javax.inject:javax.inject:1")
370
		optional("javax.ejb:ejb-api:3.0")
371
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
372
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
373 374 375 376
		optional("javax.validation:validation-api:1.0.0.GA")
		optional("org.hibernate:hibernate-validator:${hibValVersion}")
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
377
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
378
		optional("org.beanshell:bsh:2.0b4")
379
		optional("org.jruby:jruby:1.7.10")
380
		testCompile("javax.inject:javax.inject-tck:1")
381 382
		testCompile("commons-dbcp:commons-dbcp:1.4")
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
383 384
	}

385 386 387
	// pick up RmiInvocationWrapperRTD.xml in src/main
	sourceSets.main.resources.srcDirs += "src/main/java"

388
	test {
P
Phillip Webb 已提交
389
		jvmArgs = ["-disableassertions:org.aspectj.weaver.UnresolvedType"] // SPR-7989
390
	}
391 392 393 394 395 396 397 398 399
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
400 401
		optional("org.projectreactor:reactor-core:1.0.1.RELEASE")
		optional("org.projectreactor:reactor-tcp:1.0.1.RELEASE")
B
Brian Clozel 已提交
402
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
403 404
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
405
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
406
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
407
		testCompile(project(":spring-test"))
408
		testCompile("javax.inject:javax.inject-tck:1")
409
		testCompile("javax.servlet:javax.servlet-api:3.1.0")
410
		testCompile("javax.validation:validation-api:1.0.0.GA")
411
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
412 413 414 415 416
		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 已提交
417
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
418
			exclude group: "javax.servlet", module: "javax.servlet-api"
419
		}
R
Rossen Stoyanchev 已提交
420 421 422
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.3")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:8.0.3")
		testCompile("org.apache.tomcat.embed:tomcat-embed-logging-juli:8.0.3")
423
		testCompile("commons-dbcp:commons-dbcp:1.4")
424
		testCompile("log4j:log4j:1.2.17")
425
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
426
	}
C
Chris Beams 已提交
427 428
}

P
Phillip Webb 已提交
429 430
project("spring-tx") {
	description = "Spring Transaction"
431

432
	dependencies {
433 434
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
435 436 437
		optional(project(":spring-aop"))
		optional(project(":spring-context")) // for JCA, @EnableTransactionManagement
		optional("aopalliance:aopalliance:1.0")
438
		optional("javax.transaction:javax.transaction-api:1.2")
439
		optional("javax.resource:connector-api:1.5")
440
		optional("javax.ejb:ejb-api:3.0")
441
		optional("com.ibm.websphere:uow:6.0.2.17")
442
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
443
		testCompile("org.eclipse.persistence:javax.persistence:2.0.0")
444
	}
C
Chris Beams 已提交
445 446
}

P
Phillip Webb 已提交
447 448 449
project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"
450

P
Phillip Webb 已提交
451
	compileTestJava {
452 453 454 455 456 457
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

458
	dependencies {
459 460
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
461 462 463 464 465 466 467 468 469 470
		optional("org.codehaus.castor:castor-xml:1.3.2")  {
			exclude group: 'stax', module: 'stax-api'
		}
		optional("org.apache.xmlbeans:xmlbeans:2.6.0") {
			exclude group: 'stax', module: 'stax-api'
		}
		optional("com.thoughtworks.xstream:xstream:${xstreamVersion}") {
			exclude group: 'xpp3', module: 'xpp3_min'
			exclude group: 'xmlpull', module: 'xmlpull'
		}
471
		optional("org.jibx:jibx-run:1.2.5")
472
		testCompile(project(":spring-context"))
A
Arjen Poutsma 已提交
473
		testCompile("xmlunit:xmlunit:1.5")
474 475 476 477
		testCompile("xpp3:xpp3:1.1.3.4.O")
		testCompile("org.codehaus.jettison:jettison:1.0.1") {
			exclude group: 'stax', module: 'stax-api'
		}
478 479 480 481
		testCompile(files(genCastor.classesDir).builtBy(genCastor))
		testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
		testCompile(files(genXmlbeans.classesDir).builtBy(genXmlbeans))
	}
C
Chris Beams 已提交
482 483
}

P
Phillip Webb 已提交
484 485
project("spring-jms") {
	description = "Spring JMS"
486

487
	dependencies {
488 489 490 491 492
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
		compile(project(":spring-tx"))
493
		provided("javax.jms:jms-api:1.1-rev-1")
494 495
		optional(project(":spring-oxm"))
		optional("aopalliance:aopalliance:1.0")
496
		optional("javax.transaction:javax.transaction-api:1.2")
497
		optional("javax.resource:connector-api:1.5")
498
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
499
	}
C
Chris Beams 已提交
500 501
}

P
Phillip Webb 已提交
502 503
project("spring-jdbc") {
	description = "Spring JDBC"
504

505
	dependencies {
506
		compile(project(":spring-beans"))
507
		compile(project(":spring-core"))
508
		compile(project(":spring-tx"))
509
		optional(project(":spring-context")) // for JndiDataSourceLookup
510
		optional("javax.transaction:javax.transaction-api:1.2")
511
		optional("c3p0:c3p0:0.9.1.2")
P
Phillip Webb 已提交
512
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
513
		optional("com.h2database:h2:1.0.71")
514 515
		optional("org.apache.derby:derby:10.10.1.1")
		optional("org.apache.derby:derbyclient:10.10.1.1")
516
	}
C
Chris Beams 已提交
517 518
}

P
Phillip Webb 已提交
519 520
project("spring-context-support") {
	description = "Spring Context Support"
521

522
	dependencies {
523 524 525
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
526 527
		optional(project(":spring-jdbc")) // for Quartz support
		optional(project(":spring-tx")) // for Quartz support
528
		optional("javax.mail:mail:1.4.7")
J
Juergen Hoeller 已提交
529
		optional("javax.cache:cache-api:1.0.0-RC1")
530
		optional("com.google.guava:guava:16.0.1")
531
		optional("net.sf.ehcache:ehcache-core:2.6.5")
532
		optional("org.quartz-scheduler:quartz:2.1.7")
533
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
534
		optional("org.apache.velocity:velocity:1.7")
535
		optional("org.freemarker:freemarker:2.3.20")
536
		optional("com.lowagie:itext:2.1.7")
537
		optional("net.sf.jasperreports:jasperreports:$jasperReportsVersion")
538
		testCompile("org.apache.poi:poi:3.9")
539 540
		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 已提交
541
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
542
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
543 544 545
	}

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

P
Phillip Webb 已提交
549 550
project("spring-web") {
	description = "Spring Web"
551

552
	dependencies {
553
		compile(project(":spring-aop")) // for JaxWsPortProxyFactoryBean
554
		compile(project(":spring-beans")) // for MultiPartFilter
555
		compile(project(":spring-context"))
556
		compile(project(":spring-core"))
557
		provided("javax.servlet:javax.servlet-api:3.0.1")
558
		optional(project(":spring-oxm")) // for MarshallingHttpMessageConverter
559
		optional("javax.servlet.jsp:jsp-api:2.2")
560 561 562
		optional("javax.portlet:portlet-api:2.0")
		optional("javax.el:javax.el-api:2.2.4")
		optional("javax.faces:javax.faces-api:2.2")
563
		optional("aopalliance:aopalliance:1.0")
564
		optional("com.caucho:hessian:4.0.7")
565
		optional("commons-fileupload:commons-fileupload:1.3.1")
566 567
		optional("org.apache.httpcomponents:httpclient:4.3.3")
		optional("org.apache.httpcomponents:httpasyncclient:4.0.1")
568 569
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		optional("rome:rome:1.0")
570
		optional("taglibs:standard:1.1.2")
B
Brian Clozel 已提交
571
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
572
			exclude group: "javax.servlet", module: "javax.servlet-api"
573
		}
B
Brian Clozel 已提交
574
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
575
			exclude group: "javax.servlet", module: "javax.servlet-api"
576
		}
577
		optional("log4j:log4j:1.2.17")
578
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
A
Arjen Poutsma 已提交
579
		testCompile("xmlunit:xmlunit:1.5")
580
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
581 582 583
	}

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

587
project("spring-websocket") {
588
	description = "Spring WebSocket"
589 590 591 592 593

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
594
		optional(project(":spring-messaging"))
595
		optional(project(":spring-webmvc"))
596
		optional("javax.servlet:javax.servlet-api:3.1.0")
597
		optional("javax.websocket:javax.websocket-api:1.0")
R
Rossen Stoyanchev 已提交
598
		optional("org.apache.tomcat:tomcat-websocket:8.0.3") {
599 600 601
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
602 603
		optional("org.glassfish.tyrus:tyrus-websocket-core:1.2.1")
		optional("org.glassfish.tyrus:tyrus-container-servlet:1.2.1")
B
Brian Clozel 已提交
604
		optional("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
605 606
			exclude group: "javax.servlet", module: "javax.servlet"
		}
B
Brian Clozel 已提交
607
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
608
			exclude group: "javax.servlet", module: "javax.servlet"
609
		}
B
Brian Clozel 已提交
610
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
611 612
		optional("io.undertow:undertow-core:1.0.0.Final")
		optional("io.undertow:undertow-servlet:1.0.0.Final") {
613
			exclude group: "org.jboss.spec.javax.servlet", module: "jboss-servlet-api_3.1_spec"
614
			exclude group: "org.jboss.spec.javax.annotation", module: "jboss-annotations-api_1.2_spec"
615
		}
616
		optional("io.undertow:undertow-websockets-jsr:1.0.0.Final") {
617 618
			exclude group: "org.jboss.spec.javax.websocket", module: "jboss-websocket-api_1.0_spec"
		}
619
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
R
Rossen Stoyanchev 已提交
620 621 622
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.3")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:8.0.3")
		testCompile("org.apache.tomcat.embed:tomcat-embed-logging-juli:8.0.3")
623 624
		testCompile("org.projectreactor:reactor-core:1.0.1.RELEASE")
		testCompile("org.projectreactor:reactor-tcp:1.0.1.RELEASE")
625 626
		testCompile("log4j:log4j:1.2.17")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
627 628 629
	}
}

P
Phillip Webb 已提交
630 631
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
632

633
	dependencies {
634 635 636 637 638 639 640 641
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-jdbc"))
		compile(project(":spring-tx"))
		optional(project(":spring-aop"))
		optional(project(":spring-context"))
		optional(project(":spring-web"))
		optional("aopalliance:aopalliance:1.0")
642 643
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
		optional("org.eclipse.persistence:org.eclipse.persistence.core:2.4.0")
644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662
		optional("org.eclipse.persistence:org.eclipse.persistence.jpa:2.4.0") {
			exclude group: 'org.eclipse.persistence', module: 'javax.persistence'
		}
		optional("org.hibernate:hibernate-core:${hibernate3Version}") {
			exclude group: 'org.hibernate.javax.persistence', module: 'hibernate-jpa-2.0-api'
			exclude group: 'javax.transaction', module: 'jta'
		}
		optional("org.hibernate:hibernate-entitymanager:${hibernate3Version}") {
			exclude group: 'org.hibernate.javax.persistence', module: 'hibernate-jpa-2.0-api'
		}
		optional("org.apache.openjpa:openjpa:2.2.1") {
			exclude group: 'junit', module: 'junit'
			exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jpa_2.0_spec'
			exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jta_1.1_spec'
			exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jms_1.1_spec'
		}
		optional("javax.jdo:jdo-api:3.0") {
			exclude group: 'javax.transaction', module: 'transaction-api'
		}
663
		optional("javax.servlet:javax.servlet-api:3.0.1")
664
		testCompile("commons-dbcp:commons-dbcp:1.4")
P
Phillip Webb 已提交
665
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
666
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
667
	}
C
Chris Beams 已提交
668 669
}

P
Phillip Webb 已提交
670 671
project("spring-orm-hibernate4") {
	description = "Spring Object/Relational Mapping - Hibernate 4 support"
672
	merge.into = project(":spring-orm")
673

674
	dependencies {
675
		provided(project(":spring-jdbc"))
676
		provided(project(":spring-tx"))
677
		optional(project(":spring-web"))
678 679
		optional("org.hibernate:hibernate-core:${hibernate4Version}")
		optional("org.hibernate:hibernate-entitymanager:${hibernate4Version}")
680
		optional("javax.servlet:javax.servlet-api:3.0.1")
681
	}
682 683
}

P
Phillip Webb 已提交
684 685
project("spring-webmvc") {
	description = "Spring Web MVC"
686

687
	dependencies {
688 689
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
690
		compile(project(":spring-core"))
691
		compile(files(project(":spring-core").objenesisRepackJar))
692 693
		compile(project(":spring-expression"))
		compile(project(":spring-web"))
694
		provided("javax.servlet:javax.servlet-api:3.0.1")
695 696
		optional(project(":spring-context-support")) // for Velocity support
		optional(project(":spring-oxm")) // for MarshallingView
697
		optional("javax.servlet.jsp:jsp-api:2.2")
698
		optional("javax.servlet:jstl:1.2")
699
		optional("net.sourceforge.jexcelapi:jxl:2.6.12")
700
		optional("org.apache.poi:poi:3.9")
701 702
		optional("org.apache.velocity:velocity:1.7")
		optional("velocity-tools:velocity-tools-view:1.4")
703
		optional("org.freemarker:freemarker:2.3.20")
704
		optional("com.lowagie:itext:2.1.7")
705
		optional("net.sf.jasperreports:jasperreports:$jasperReportsVersion") {
706 707 708 709
			exclude group: "xml-apis", module: "xml-apis"
		}
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		optional("rome:rome:1.0")
710 711
		optional("org.apache.tiles:tiles-api:${tiles2Version}")
		optional("org.apache.tiles:tiles-core:${tiles2Version}") {
712 713
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
714
		optional("org.apache.tiles:tiles-servlet:${tiles2Version}") {
715 716
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
717
		optional("org.apache.tiles:tiles-jsp:${tiles2Version}") {
718 719
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
720
		optional("org.apache.tiles:tiles-el:${tiles2Version}") {
721 722
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
723
		optional("org.apache.tiles:tiles-extras:${tiles2Version}") {
724
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
725
			exclude group: "org.apache.velocity", module: "velocity-tools"
726 727
			exclude group: "org.springframework", module: "spring-web"
		}
728 729
		testCompile(project(":spring-aop"))
		testCompile("rhino:js:1.7R1")
A
Arjen Poutsma 已提交
730
		testCompile("xmlunit:xmlunit:1.5")
731
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
732
			exclude group: "xml-apis", module: "xml-apis"
733 734
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
735 736 737
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
738
		}
B
Brian Clozel 已提交
739
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
740
			exclude group: "javax.servlet", module: "javax.servlet"
741
		}
B
Brian Clozel 已提交
742
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
743
			exclude group: "javax.servlet", module: "javax.servlet"
744 745
		}
		testCompile("javax.validation:validation-api:1.0.0.GA")
746
		testCompile("org.hibernate:hibernate-validator:${hibValVersion}")
747
		testCompile("org.apache.httpcomponents:httpclient:4.3.3")
748
		testCompile("commons-fileupload:commons-fileupload:1.3.1")
749
		testCompile("commons-io:commons-io:1.3")
750
		testCompile("joda-time:joda-time:${jodaVersion}")
751
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
752 753 754
	}

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

P
Phillip Webb 已提交
758 759
project("spring-webmvc-tiles3") {
	description = "Spring Framework Tiles3 Integration"
760
	merge.into = project(":spring-webmvc")
761

762
	dependencies {
763 764
		provided(project(":spring-context"))
		provided(project(":spring-web"))
765
		provided("javax.servlet:javax.servlet-api:3.0.1")
766
		optional("javax.servlet.jsp:jsp-api:2.2")
767 768
		optional("javax.servlet:jstl:1.2")
		optional("javax.el:javax.el-api:2.2.4")
769 770
		optional("org.apache.tiles:tiles-api:${tiles3Version}")
		optional("org.apache.tiles:tiles-core:${tiles3Version}") {
P
Phillip Webb 已提交
771
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
772
		}
773
		optional("org.apache.tiles:tiles-servlet:${tiles3Version}") {
P
Phillip Webb 已提交
774
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
775
		}
776
		optional("org.apache.tiles:tiles-jsp:${tiles3Version}") {
P
Phillip Webb 已提交
777
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
778
		}
779
		optional("org.apache.tiles:tiles-el:${tiles3Version}") {
780
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
781
		}
782
		optional("org.apache.tiles:tiles-extras:${tiles3Version}") {
P
Phillip Webb 已提交
783
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
784
			exclude group: "org.springframework", module: "spring-web"
785
		}
786
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
787
	}
788 789
}

P
Phillip Webb 已提交
790 791
project("spring-webmvc-portlet") {
	description = "Spring Web Portlet"
792

793
	dependencies {
794 795
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
796
		compile(project(":spring-core"))
797 798
		compile(project(":spring-web"))
		compile(project(":spring-webmvc"))
799 800
		provided("javax.servlet:javax.servlet-api:3.0.1")
		provided("javax.portlet:portlet-api:2.0")
801
		optional("commons-fileupload:commons-fileupload:1.3.1")
802 803 804
	}

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

P
Phillip Webb 已提交
808 809
project("spring-test") {
	description = "Spring TestContext Framework"
810

811
	dependencies {
812
		compile(project(":spring-core"))
813 814 815 816 817 818 819
		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 已提交
820
		optional(project(":spring-webmvc-portlet"))
821
		optional("junit:junit:${junitVersion}")
S
Sam Brannen 已提交
822
		optional("org.testng:testng:6.8.8")
823
		optional("javax.inject:javax.inject:1")
824
		optional("javax.servlet:javax.servlet-api:3.0.1")
825
		optional("javax.servlet.jsp:jsp-api:2.2")
826
		optional("javax.servlet:jstl:1.2")
827
		optional("javax.portlet:portlet-api:2.0")
828
		optional("javax.el:javax.el-api:2.2.4")
829
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
830
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
831 832
		optional("org.hamcrest:hamcrest-core:1.3")
		optional("com.jayway.jsonpath:json-path:0.9.0")
A
Arjen Poutsma 已提交
833
		optional("xmlunit:xmlunit:1.5")
834 835 836
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
		testCompile(project(":spring-webmvc-tiles3"))
837
		testCompile("javax.mail:mail:1.4.7")
838
		testCompile("javax.ejb:ejb-api:3.0")
839 840 841
		testCompile("org.hibernate:hibernate-core:${hibernate3Version}") {
			exclude group: 'org.hibernate.javax.persistence', module: 'hibernate-jpa-2.0-api'
		}
842 843
		testCompile("org.hibernate:hibernate-entitymanager:${hibernate3Version}")
		testCompile("org.hibernate:hibernate-validator:${hibValVersion}")
844
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
845
		testCompile("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
846
		testCompile("rome:rome:1.0")
847 848
		testCompile("org.apache.tiles:tiles-api:${tiles3Version}")
		testCompile("org.apache.tiles:tiles-core:${tiles3Version}") {
849 850
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
851
		testCompile("org.apache.tiles:tiles-servlet:${tiles3Version}") {
852 853
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
854 855
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
		testCompile "org.slf4j:slf4j-jcl:${slf4jVersion}"
856
	}
857 858 859

	task testNG(type: Test) {
		useTestNG()
860 861
		include(["**/testng/**/*Tests.class", "**/testng/**/*Test.class"])
		// Show STD_OUT & STD_ERR of the test JVM(s) on the console:
862
		// testLogging.showStandardStreams = true
863
		// forkEvery 1
864 865 866 867 868
	}

	test {
		dependsOn testNG
		useJUnit()
869
		exclude "**/testng/**/*.*"
870
	}
871 872 873 874 875 876 877

	task aggregateTestReports(type: TestReport) {
		destinationDir = test.reports.html.destination
		reportOn test, testNG
	}

	check.dependsOn aggregateTestReports
C
Chris Beams 已提交
878 879
}

P
Phillip Webb 已提交
880 881 882
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
883

884
	dependencies {
885
		aspects(project(":spring-orm"))
J
Juergen Hoeller 已提交
886 887
		ajc("org.aspectj:aspectjtools:1.8.0.RC2") // needed for ajc on JDK 8 only
		rt("org.aspectj:aspectjrt:1.8.0.RC2") // needed for ajc on JDK 8 only
888
		compile("org.aspectj:aspectjweaver:${aspectjVersion}") // exposing regular AspectJ version to users
889 890 891 892 893 894 895
		provided("org.eclipse.persistence:javax.persistence:2.0.0")
		optional(project(":spring-aop")) // for @Async support
		optional(project(":spring-beans")) // for @Configurable support
		optional(project(":spring-context")) // for @Enable* support
		optional(project(":spring-context-support")) // for JavaMail support
		optional(project(":spring-orm")) // for JPA exception translation support
		optional(project(":spring-tx")) // for JPA, @Transactional support
896 897
		testCompile(project(":spring-core")) // for CodeStyleAspect
		testCompile(project(":spring-test"))
898
		testCompile("javax.mail:mail:1.4.7")
899
	}
900

901
	eclipse.project {
P
Phillip Webb 已提交
902
		natures += "org.eclipse.ajdt.ui.ajnature"
903
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
904
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
905
	}
C
Chris Beams 已提交
906 907
}

908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942
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)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

943
configure(rootProject) {
P
Phillip Webb 已提交
944
	description = "Spring Framework"
945

P
Phillip Webb 已提交
946
	apply plugin: "asciidoctor"
947
	apply plugin: "docbook-reference"
948
	apply plugin: "groovy"
R
Rob Winch 已提交
949

950
	// apply plugin: "detect-split-packages"
951 952
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
953
	asciidoctor {
954 955
		baseDir = project.file('src/asciidoc')
		backend = 'docbook5'
R
Rob Winch 已提交
956
		options = [
957 958 959 960 961 962 963
			eruby: 'erubis',
			attributes: [
				doctype: 'book',
				'spring-version' : project.version,
				revnumber : project.version,
				docinfo : ""
			]
R
Rob Winch 已提交
964
		]
965 966
	}

967 968 969 970 971 972 973 974 975 976
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

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

977 978 979 980 981
	// 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")
	// }
982

C
Chris Beams 已提交
983
	// don't publish the default jar for the root project
984 985 986
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
987
		testCompile(project(":spring-aop"))
988
		testCompile(project(":spring-beans"))
989
		testCompile(project(":spring-context"))
990 991
		testCompile(project(":spring-core"))
		testCompile(project(":spring-expression"))
992
		testCompile(project(":spring-jdbc"))
993
		testCompile(project(":spring-orm"))
994
		testCompile(project(":spring-test"))
995
		testCompile(project(":spring-tx"))
996 997
		testCompile(project(":spring-web"))
		testCompile(project(":spring-webmvc-portlet"))
998
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
999 1000 1001 1002
		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}")
1003
		testCompile("org.hibernate:hibernate-core:${hibernate4Version}")
P
Phillip Webb 已提交
1004
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
1005 1006 1007
	}

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

1012 1013 1014 1015 1016
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
1017 1018 1019
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
1020
		options.overview = "src/api/overview.html"
1021
		options.stylesheetFile = file("src/api/stylesheet.css")
1022
		options.splitIndex = true
C
Chris Beams 已提交
1023
		options.links(project.ext.javadocLinks)
1024
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
1025

1026 1027 1028
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
1029

P
Phillip Webb 已提交
1030
		maxMemory = "1024m"
C
Chris Beams 已提交
1031
		destinationDir = new File(buildDir, "api")
1032 1033 1034

		doFirst {
			classpath = files(
1035
				// ensure Servlet 3.x and Hibernate 4.x have precedence on the javadoc
1036 1037 1038 1039 1040 1041 1042 1043
				// 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 })
		}
1044 1045
	}

1046
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1047 1048 1049
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1050 1051 1052
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1053 1054
		from("src/dist") {
			include "changelog.txt"
1055 1056 1057
		}

		from (api) {
1058
			into "javadoc-api"
1059 1060
		}

1061 1062
		from (reference) {
			into "spring-framework-reference"
1063 1064 1065 1066
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1067 1068 1069
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1070 1071 1072 1073 1074 1075 1076
		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 已提交
1077
				it.path.endsWith("META-INF/spring.schemas")
1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094
			}?.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 已提交
1095 1096 1097
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1098 1099 1100 1101 1102
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

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

P
Phillip Webb 已提交
1103 1104 1105 1106
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1107
			into "${baseDir}"
P
Phillip Webb 已提交
1108
			expand(copyright: new Date().format("yyyy"), version: project.version)
1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121
		}

		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 已提交
1122
				if (subproject.tasks.findByPath("sourcesJar")) {
1123 1124
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1125
				if (subproject.tasks.findByPath("javadocJar")) {
1126 1127 1128 1129 1130 1131 1132 1133 1134
					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 已提交
1135 1136 1137
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1138 1139 1140 1141 1142 1143 1144 1145 1146 1147
		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 ->
1148 1149
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170
						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 已提交
1171
		description = "Generates gradlew[.bat] scripts"
J
Juergen Hoeller 已提交
1172
		gradleVersion = "1.11"
1173 1174

		doLast() {
1175
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1176
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1177
			File wrapperFile = file("gradlew")
1178 1179
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1180
			File wrapperBatFile = file("gradlew.bat")
1181 1182 1183 1184
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1185

1186
}
1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198

/*
 * 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-")) {
1199
			return version.replace('BUILD', qualifier)
1200 1201
		}
	}
1202
	return version
1203
}