build.gradle 39.5 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"
J
Juergen Hoeller 已提交
19
	ext.hibernate4Version    = "4.2.9.Final"
20 21 22 23 24 25 26 27 28 29
	ext.hibValVersion        = "4.3.1.Final"
	ext.hsqldbVersion        = "2.3.1"
	ext.jackson1Version      = "1.9.13"
	ext.jackson2Version      = "2.3.1"
	ext.jasperReportsVersion = "5.5.1"
	ext.jettyVersion         = "9.1.2.v20140210"
	ext.jodaVersion          = "2.3"
	ext.junitVersion         = "4.11"
	ext.slf4jVersion         = "1.7.5"
	ext.xstreamVersion       = "1.4.6"
30

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

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

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

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

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

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

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

C
Chris Beams 已提交
65 66
	test {
		systemProperty("java.awt.headless", "true")
67
		systemProperty("testGroups", project.properties.get("testGroups"))
68
		scanForTestClasses = false
69 70
		include(["**/*Tests.*", "**/*Test.*"])
		exclude "**/Abstract*.*"
C
Chris Beams 已提交
71
	}
C
Chris Beams 已提交
72

73
	repositories {
74 75
		maven { url "http://repo.spring.io/libs-release" }
		maven { url "http://repo.spring.io/milestone" }  // for AspectJ 1.8.0.M1
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/",
P
Phillip Webb 已提交
102
		"http://jackson.codehaus.org/1.9.4/javadoc/",
103 104
		"http://fasterxml.github.com/jackson-core/javadoc/2.3.0/",
		"http://fasterxml.github.com/jackson-databind/javadoc/2.3.0/",
P
Phillip Webb 已提交
105
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs"
C
Chris Beams 已提交
106
	] as String[]
107 108
}

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

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

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

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

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

		// 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
140 141 142
	}

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

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

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
157 158
}

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

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

	configurations.archives.artifacts.clear()
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	// this module's Java and Groovy sources need to be compiled together
	compileJava.enabled=false
	sourceSets {
		main {
			groovy {
292
				srcDir "src/main/java"
J
Juergen Hoeller 已提交
293 294 295
			}
		}
	}
296 297 298 299 300

	compileGroovy {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}
J
Juergen Hoeller 已提交
301 302
}

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

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

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

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

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

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

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

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

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

352
	dependencies {
353 354 355 356 357
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
358
		optional(project(":spring-instrument"))
359
		optional("javax.inject:javax.inject:1")
360
		optional("javax.ejb:ejb-api:3.0")
361
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
362
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
363 364 365 366
		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 已提交
367
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
368
		optional("org.beanshell:bsh:2.0b4")
369
		optional("org.jruby:jruby:1.7.10")
370
		testCompile("javax.inject:javax.inject-tck:1")
371 372
		testCompile("commons-dbcp:commons-dbcp:1.4")
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
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
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
R
Rossen Stoyanchev 已提交
390 391
		optional("org.projectreactor:reactor-core:1.0.0.RELEASE")
		optional("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
B
Brian Clozel 已提交
392
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
393 394
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
395
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
396
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
397
		testCompile(project(":spring-test"))
398
		testCompile("javax.inject:javax.inject-tck:1")
399
		testCompile("javax.servlet:javax.servlet-api:3.1.0")
400
		testCompile("javax.validation:validation-api:1.0.0.GA")
401
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
402 403 404 405 406
		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 已提交
407
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
408
			exclude group: "javax.servlet", module: "javax.servlet-api"
409
		}
R
Rossen Stoyanchev 已提交
410 411 412
		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")
413
		testCompile("commons-dbcp:commons-dbcp:1.4")
414
		testCompile("log4j:log4j:1.2.17")
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
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
425 426 427
		optional(project(":spring-aop"))
		optional(project(":spring-context")) // for JCA, @EnableTransactionManagement
		optional("aopalliance:aopalliance:1.0")
428
		optional("javax.transaction:javax.transaction-api:1.2")
429
		optional("javax.resource:connector-api:1.5")
430
		optional("javax.ejb:ejb-api:3.0")
431
		optional("com.ibm.websphere:uow:6.0.2.17")
432
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
433
		testCompile("org.eclipse.persistence:javax.persistence:2.0.0")
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
	compileTestJava {
442 443 444 445 446 447
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

617
	dependencies {
618 619 620 621 622 623 624 625
		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")
626 627 628
		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")
629 630
		optional("org.hibernate:hibernate-core:${hibernate3Version}")
		optional("org.hibernate:hibernate-entitymanager:${hibernate3Version}")
631
		optional("org.apache.openjpa:openjpa:2.2.1")
632
		optional("javax.jdo:jdo-api:3.0")
633
		optional("javax.servlet:javax.servlet-api:3.0.1")
634
		testCompile("commons-dbcp:commons-dbcp:1.4")
P
Phillip Webb 已提交
635
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
636
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
637
	}
C
Chris Beams 已提交
638 639
}

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

644
	dependencies {
645
		provided(project(":spring-jdbc"))
646
		provided(project(":spring-tx"))
647
		optional(project(":spring-web"))
648 649
		optional("org.hibernate:hibernate-core:${hibernate4Version}")
		optional("org.hibernate:hibernate-entitymanager:${hibernate4Version}")
650
		optional("javax.servlet:javax.servlet-api:3.0.1")
651
	}
652 653
}

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

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

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

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

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

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

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

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

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

782
	dependencies {
783
		compile(project(":spring-core"))
784 785 786 787 788 789 790
		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 已提交
791
		optional(project(":spring-webmvc-portlet"))
792
		optional("junit:junit:${junitVersion}")
S
Sam Brannen 已提交
793
		optional("org.testng:testng:6.8.8")
794
		optional("javax.inject:javax.inject:1")
795
		optional("javax.servlet:javax.servlet-api:3.0.1")
796
		optional("javax.servlet.jsp:jsp-api:2.2")
797
		optional("javax.servlet:jstl:1.2")
798
		optional("javax.portlet:portlet-api:2.0")
799
		optional("javax.el:javax.el-api:2.2.4")
800
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
801
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
802 803 804 805 806 807
		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"))
808
		testCompile("javax.mail:mail:1.4.7")
809
		testCompile("javax.ejb:ejb-api:3.0")
810 811 812
		testCompile("org.hibernate:hibernate-core:${hibernate3Version}")
		testCompile("org.hibernate:hibernate-entitymanager:${hibernate3Version}")
		testCompile("org.hibernate:hibernate-validator:${hibValVersion}")
813
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
814 815
		testCompile("org.codehaus.jackson:jackson-mapper-asl:${jackson1Version}")
		testCompile("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
816 817 818 819 820 821 822 823 824
		testCompile("rome:rome:1.0")
		testCompile("org.apache.tiles:tiles-request-api:1.0.1")
		testCompile("org.apache.tiles:tiles-api:3.0.1")
		testCompile("org.apache.tiles:tiles-core:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
		testCompile("org.apache.tiles:tiles-servlet:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
825 826
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
		testCompile "org.slf4j:slf4j-jcl:${slf4jVersion}"
827
	}
828 829 830

	task testNG(type: Test) {
		useTestNG()
831
		// forkEvery 1
832
		scanForTestClasses = false
833
		include(["**/testng/**/*Tests.*", "**/testng/**/*Test.*"])
834
		// "TestCase" classes are run by other test classes, not the build.
835
		exclude(["**/Abstract*.*", "**/*TestCase.class", "**/FailingBeforeAndAfterMethodsTests.class"])
836
		// Generate TestNG reports alongside JUnit reports.
837
		getReports().getHtml().setEnabled(true)
838 839
		// show standard out and standard error of the test JVM(s) on the console
		// testLogging.showStandardStreams = true
840 841 842 843 844
	}

	test {
		dependsOn testNG
		useJUnit()
845 846
		include(["**/*Tests.*", "**/*Test.*"])
		// In general, we exclude all classes under the 'testng' package.
847
		// "TestCase" classes are run by other test classes, not the build.
848 849 850 851 852 853
		// "TestSuite" classes only exist as a convenience to the develper; they
		// should not be run by the build.
		exclude(["**/testng/**/*.*", "**/Abstract*.*", "**/*TestCase.class", "**/*TestSuite.class"])
		// FailingBeforeAndAfterMethodsTests is actually a JUnit-based test which
		// itself runs TestNG manually in order to test our TestNG support.
		include "**/testng/FailingBeforeAndAfterMethodsTests"
854
	}
C
Chris Beams 已提交
855 856
}

P
Phillip Webb 已提交
857 858 859
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
860

861
	dependencies {
862
		aspects(project(":spring-orm"))
863 864 865
		ajc("org.aspectj:aspectjtools:1.8.0.M1") // needed for ajc on JDK 8 only
		rt("org.aspectj:aspectjrt:1.8.0.M1") // needed for ajc on JDK 8 only
		compile("org.aspectj:aspectjweaver:${aspectjVersion}") // exposing regular AspectJ version to users
866 867 868 869 870 871 872
		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
873 874
		testCompile(project(":spring-core")) // for CodeStyleAspect
		testCompile(project(":spring-test"))
875
		testCompile("javax.mail:mail:1.4.7")
876
	}
877

878
	eclipse.project {
P
Phillip Webb 已提交
879
		natures += "org.eclipse.ajdt.ui.ajnature"
880
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
881
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
882
	}
C
Chris Beams 已提交
883 884
}

885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919
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)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

920
configure(rootProject) {
P
Phillip Webb 已提交
921
	description = "Spring Framework"
922

P
Phillip Webb 已提交
923
	apply plugin: "asciidoctor"
924
	apply plugin: "docbook-reference"
925
	apply plugin: "groovy"
R
Rob Winch 已提交
926

927
	// apply plugin: "detect-split-packages"
928 929
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
930
	asciidoctor {
931 932
		baseDir = project.file('src/asciidoc')
		backend = 'docbook5'
R
Rob Winch 已提交
933
		options = [
934 935 936 937 938 939 940
			eruby: 'erubis',
			attributes: [
				doctype: 'book',
				'spring-version' : project.version,
				revnumber : project.version,
				docinfo : ""
			]
R
Rob Winch 已提交
941
		]
942 943
	}

944 945 946 947 948 949 950 951 952 953
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

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

954 955 956 957 958
	// 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")
	// }
959

C
Chris Beams 已提交
960
	// don't publish the default jar for the root project
961 962 963
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
964
		testCompile(project(":spring-aop"))
965
		testCompile(project(":spring-beans"))
966
		testCompile(project(":spring-context"))
967 968
		testCompile(project(":spring-core"))
		testCompile(project(":spring-expression"))
969
		testCompile(project(":spring-jdbc"))
970
		testCompile(project(":spring-orm"))
971
		testCompile(project(":spring-test"))
972
		testCompile(project(":spring-tx"))
973 974
		testCompile(project(":spring-web"))
		testCompile(project(":spring-webmvc-portlet"))
975
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
976 977 978 979
		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}")
980
		testCompile("org.hibernate:hibernate-core:${hibernate4Version}")
P
Phillip Webb 已提交
981
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
982 983 984
	}

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

989 990 991 992 993
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
994 995 996
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
997
		options.overview = "src/api/overview.html"
998
		options.stylesheetFile = file("src/api/stylesheet.css")
999
		options.splitIndex = true
C
Chris Beams 已提交
1000
		options.links(project.ext.javadocLinks)
1001
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
1002

1003 1004 1005
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
1006

P
Phillip Webb 已提交
1007
		maxMemory = "1024m"
C
Chris Beams 已提交
1008
		destinationDir = new File(buildDir, "api")
1009 1010 1011

		doFirst {
			classpath = files(
1012
				// ensure Servlet 3.x and Hibernate 4.x have precedence on the javadoc
1013 1014 1015 1016 1017 1018 1019 1020
				// 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 })
		}
1021 1022
	}

1023
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1024 1025 1026
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1027 1028 1029
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1030 1031
		from("src/dist") {
			include "changelog.txt"
1032 1033 1034
		}

		from (api) {
1035
			into "javadoc-api"
1036 1037
		}

1038 1039
		from (reference) {
			into "spring-framework-reference"
1040 1041 1042 1043
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1044 1045 1046
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1047 1048 1049 1050 1051 1052 1053
		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 已提交
1054
				it.path.endsWith("META-INF/spring.schemas")
1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071
			}?.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 已提交
1072 1073 1074
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1075 1076 1077 1078 1079
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

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

P
Phillip Webb 已提交
1080 1081 1082 1083
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1084
			into "${baseDir}"
P
Phillip Webb 已提交
1085
			expand(copyright: new Date().format("yyyy"), version: project.version)
1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098
		}

		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 已提交
1099
				if (subproject.tasks.findByPath("sourcesJar")) {
1100 1101
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1102
				if (subproject.tasks.findByPath("javadocJar")) {
1103 1104 1105 1106 1107 1108 1109 1110 1111
					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 已提交
1112 1113 1114
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1115 1116 1117 1118 1119 1120 1121 1122 1123 1124
		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 ->
1125 1126
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147
						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 已提交
1148
		description = "Generates gradlew[.bat] scripts"
J
Juergen Hoeller 已提交
1149
		gradleVersion = "1.11"
1150 1151

		doLast() {
1152
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1153
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1154
			File wrapperFile = file("gradlew")
1155 1156
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1157
			File wrapperBatFile = file("gradlew.bat")
1158 1159 1160 1161
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1162

1163
}
1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175

/*
 * 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-")) {
1176
			return version.replace('BUILD', qualifier)
1177 1178
		}
	}
1179
	return version
1180
}