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

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

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

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

P
Phillip Webb 已提交
29 30 31 32 33 34
	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"
35
	]
C
Chris Beams 已提交
36

P
Phillip Webb 已提交
37 38 39 40 41 42 43
	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"]

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

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

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

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

64
	repositories {
65 66
		maven { url "http://repo.spring.io/libs-release" }
		maven { url "http://repo.spring.io/milestone" }  // for AspectJ 1.8.0.M1
R
Rossen Stoyanchev 已提交
67
		maven { url "https://repository.apache.org/content/repositories/releases" }  // tomcat 8
J
Juergen Hoeller 已提交
68
		maven { url "https://maven.java.net/content/repositories/releases" }  // javax.websocket, tyrus
J
Juergen Hoeller 已提交
69
		maven { url "https://oss.sonatype.org/content/repositories/releases" }  // javax.cache
70
	}
C
Chris Beams 已提交
71

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

	ext.javadocLinks = [
P
Phillip Webb 已提交
79
		"http://docs.oracle.com/javase/7/docs/api/",
J
Juergen Hoeller 已提交
80 81 82 83
		"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 已提交
84 85
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
J
Juergen Hoeller 已提交
86 87 88 89 90
		"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 已提交
91
		"http://aopalliance.sourceforge.net/doc/",
C
Chris Beams 已提交
92
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
J
Juergen Hoeller 已提交
93 94
		"http://ehcache.org/apidocs/",
		"http://quartz-scheduler.org/api/2.1.7/",
P
Phillip Webb 已提交
95 96 97
		"http://jackson.codehaus.org/1.9.4/javadoc/",
		"http://fasterxml.github.com/jackson-core/javadoc/2.2.0/",
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs"
C
Chris Beams 已提交
98
	] as String[]
99 100
}

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

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

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

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

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

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

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

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

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

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

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

	configurations.archives.artifacts.clear()
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

534
	dependencies {
535 536 537 538
		compile(project(":spring-core"))
		compile(project(":spring-beans")) // for MultiPartFilter
		compile(project(":spring-aop")) // for JaxWsPortProxyFactoryBean
		compile(project(":spring-context"))
539
		optional(project(":spring-oxm")) // for MarshallingHttpMessageConverter
540
		compile("aopalliance:aopalliance:1.0")
541
		provided("javax.el:javax.el-api:2.2.4")
542
		provided("javax.faces:javax.faces-api:2.2")
543 544 545 546
		provided("javax.portlet:portlet-api:2.0")
		provided("javax.servlet:javax.servlet-api:3.0.1")
		provided("javax.servlet.jsp:jsp-api:2.1")
		provided("javax.activation:activation:1.1")
547
		optional("com.caucho:hessian:4.0.7")
548
		optional("rome:rome:1.0")
549
		optional("commons-fileupload:commons-fileupload:1.3")
550 551
		optional("org.apache.httpcomponents:httpclient:4.3.1")
		optional("org.apache.httpcomponents:httpasyncclient:4.0")
552
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
553
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
554
		optional("taglibs:standard:1.1.2")
B
Brian Clozel 已提交
555
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
556
			exclude group: "javax.servlet", module: "javax.servlet-api"
557
		}
B
Brian Clozel 已提交
558
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
559
			exclude group: "javax.servlet", module: "javax.servlet-api"
560
		}
561
		optional("log4j:log4j:1.2.17")
562
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
P
Phillip Webb 已提交
563
		testCompile("xmlunit:xmlunit:1.3")
564 565
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("log4j:log4j:1.2.17")
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.0-RC5") {
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
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.2")
R
Rossen Stoyanchev 已提交
597
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
R
Rossen Stoyanchev 已提交
598
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC5")
599 600
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("log4j:log4j:1.2.17")
601 602
		testCompile("org.projectreactor:reactor-core:1.0.0.RELEASE")
		testCompile("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
603 604 605
	}
}

P
Phillip Webb 已提交
606 607
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
608

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

P
Phillip Webb 已提交
632 633
project("spring-orm-hibernate4") {
	description = "Spring Object/Relational Mapping - Hibernate 4 support"
634
	merge.into = project(":spring-orm")
635

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

P
Phillip Webb 已提交
646 647
project("spring-webmvc") {
	description = "Spring Web MVC"
648

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

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

P
Phillip Webb 已提交
707 708
project("spring-webmvc-tiles3") {
	description = "Spring Framework Tiles3 Integration"
709
	merge.into = project(":spring-webmvc")
710

711
	dependencies {
712 713
		provided(project(":spring-context"))
		provided(project(":spring-web"))
714
		provided("javax.el:javax.el-api:2.2.4")
715 716 717 718 719
		provided("javax.servlet:jstl:1.2")
		provided("javax.servlet.jsp:jsp-api:2.1")
		optional("org.apache.tiles:tiles-request-api:1.0.1")
		optional("org.apache.tiles:tiles-api:3.0.1")
		optional("org.apache.tiles:tiles-core:3.0.1") {
P
Phillip Webb 已提交
720
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
721
		}
722
		optional("org.apache.tiles:tiles-servlet:3.0.1") {
P
Phillip Webb 已提交
723
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
724
		}
725
		optional("org.apache.tiles:tiles-jsp:3.0.1") {
P
Phillip Webb 已提交
726
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
727 728 729
		}
		optional("org.apache.tiles:tiles-extras:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
P
Polish  
Phillip Webb 已提交
730
			exclude group: "org.springframework", module: "spring-web"
731
		}
732
		optional("org.apache.tiles:tiles-el:3.0.1") {
P
Phillip Webb 已提交
733
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
734
		}
735 736
		provided("javax.servlet:javax.servlet-api:3.0.1")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
737
	}
738 739
}

P
Phillip Webb 已提交
740 741
project("spring-webmvc-portlet") {
	description = "Spring Web Portlet"
742

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

	// pick up DispatcherPortlet.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-test") {
	description = "Spring TestContext Framework"
760

761
	dependencies {
762
		compile(project(":spring-core"))
763 764 765 766 767 768 769
		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 已提交
770
		optional(project(":spring-webmvc-portlet"))
771
		optional("junit:junit:${junitVersion}")
S
Sam Brannen 已提交
772
		optional("org.testng:testng:6.8.5")
773
		optional("javax.servlet:javax.servlet-api:3.0.1")
774 775
		optional("javax.servlet.jsp:jsp-api:2.1")
		optional("javax.portlet:portlet-api:2.0")
776
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
777 778 779 780
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
		provided("javax.inject:javax.inject:1")
		provided("javax.activation:activation:1.1")
		provided("javax.servlet:jstl:1.2")
781 782 783 784 785 786 787
		optional("org.hamcrest:hamcrest-core:1.3")
		optional("com.jayway.jsonpath:json-path:0.9.0")
		optional("xmlunit:xmlunit:1.3")
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
		testCompile(project(":spring-webmvc-tiles3"))
		testCompile("org.hibernate:hibernate-core:3.6.9.Final")
788
		testCompile "org.slf4j:slf4j-jcl:${slf4jVersion}"
P
Phillip Webb 已提交
789
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
790 791 792 793 794 795 796 797 798 799 800 801 802 803 804
		testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
		testCompile("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		testCompile("com.fasterxml.jackson.core:jackson-databind:2.2.2")
		testCompile("com.thoughtworks.xstream:xstream:1.4.4")
		testCompile("rome:rome:1.0")
		testCompile("javax.activation:activation:1.1")
		testCompile("javax.mail:mail:1.4.7")
		testCompile("org.apache.tiles:tiles-request-api:1.0.1")
		testCompile("org.apache.tiles:tiles-api:3.0.1")
		testCompile("org.apache.tiles:tiles-core:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
		testCompile("org.apache.tiles:tiles-servlet:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
805
	}
806 807 808 809 810 811 812 813 814

	task testNG(type: Test) {
		useTestNG()
		scanForTestClasses = false
		include "**/testng/*.*"
		exclude "**/FailingBeforeAndAfterMethodsTests.class"
		// "TestCase" classes are run by other test classes, not the build.
		exclude "**/*TestCase.class"
		// Generate TestNG reports alongside JUnit reports.
815
		getReports().getHtml().setEnabled(true)
816 817 818 819 820 821 822 823 824
	}

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

P
Phillip Webb 已提交
827 828 829
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
830

831
	dependencies {
832 833 834 835 836 837
		optional(project(":spring-beans")) // for @Configurable support
		optional(project(":spring-aop")) // for @Async support
		optional(project(":spring-context")) // for @Enable* support
		compile(project(":spring-context-support")) // for JavaMail support
		optional(project(":spring-tx")) // for JPA, @Transactional support
		optional(project(":spring-orm")) // for JPA exception translation support
838
		aspects(project(":spring-orm"))
839
		provided("org.eclipse.persistence:javax.persistence:2.0.0")
840
		testCompile("javax.mail:mail:1.4.7")
841
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
C
Chris Beams 已提交
842
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
843 844 845 846
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
		testCompile(project(":spring-core")) // for CodeStyleAspect
		compile(project(":spring-beans")) // for "p" namespace visibility
		testCompile(project(":spring-test"))
847
	}
848

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

856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890
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)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

891
configure(rootProject) {
P
Phillip Webb 已提交
892
	description = "Spring Framework"
893

P
Phillip Webb 已提交
894
	apply plugin: "asciidoctor"
895
	apply plugin: "docbook-reference"
896
	apply plugin: "groovy"
R
Rob Winch 已提交
897

898
	// apply plugin: "detect-split-packages"
899 900
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
901
	asciidoctor {
902 903
		baseDir = project.file('src/asciidoc')
		backend = 'docbook5'
R
Rob Winch 已提交
904
		options = [
905 906 907 908 909 910 911
			eruby: 'erubis',
			attributes: [
				doctype: 'book',
				'spring-version' : project.version,
				revnumber : project.version,
				docinfo : ""
			]
R
Rob Winch 已提交
912
		]
913 914
	}

915 916 917 918 919 920 921 922 923 924
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

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

925 926 927 928 929
	// 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")
	// }
930

C
Chris Beams 已提交
931
	// don't publish the default jar for the root project
932 933 934
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
935 936 937 938 939 940 941 942 943 944
		testCompile(project(":spring-core"))
		testCompile(project(":spring-beans"))
		testCompile(project(":spring-aop"))
		testCompile(project(":spring-expression"))
		testCompile(project(":spring-context"))
		testCompile(project(":spring-tx"))
		testCompile(project(":spring-jdbc"))
		testCompile(project(":spring-test"))
		testCompile(project(":spring-web"))
		testCompile(project(":spring-webmvc-portlet"))
945
		testCompile(project(":spring-orm"))
J
Juergen Hoeller 已提交
946
		testCompile("org.hibernate:hibernate-core:4.2.2.Final")
947
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
948 949 950 951
		testCompile("javax.portlet:portlet-api:2.0")
		testCompile("javax.inject:javax.inject:1")
		testCompile("javax.resource:connector-api:1.5")
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
P
Phillip Webb 已提交
952
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
953 954 955
	}

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

960 961 962 963 964
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
965 966 967
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
968
		options.overview = "src/api/overview.html"
969
		options.stylesheetFile = file("src/api/stylesheet.css")
970
		options.splitIndex = true
C
Chris Beams 已提交
971
		options.links(project.ext.javadocLinks)
972
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
973

974 975 976
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
977

P
Phillip Webb 已提交
978
		maxMemory = "1024m"
C
Chris Beams 已提交
979
		destinationDir = new File(buildDir, "api")
980 981 982 983 984 985 986 987 988 989 990 991

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

994
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
995 996 997
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
998 999 1000
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1001 1002
		from("src/dist") {
			include "changelog.txt"
1003 1004 1005
		}

		from (api) {
1006
			into "javadoc-api"
1007 1008
		}

1009 1010
		from (reference) {
			into "spring-framework-reference"
1011 1012 1013 1014
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1015 1016 1017
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1018 1019 1020 1021 1022 1023 1024
		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 已提交
1025
				it.path.endsWith("META-INF/spring.schemas")
1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042
			}?.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 已提交
1043 1044 1045
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1046 1047 1048 1049 1050
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

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

P
Phillip Webb 已提交
1051 1052 1053 1054
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1055
			into "${baseDir}"
P
Phillip Webb 已提交
1056
			expand(copyright: new Date().format("yyyy"), version: project.version)
1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069
		}

		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 已提交
1070
				if (subproject.tasks.findByPath("sourcesJar")) {
1071 1072
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1073
				if (subproject.tasks.findByPath("javadocJar")) {
1074 1075 1076 1077 1078 1079 1080 1081 1082
					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 已提交
1083 1084 1085
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1086 1087 1088 1089 1090 1091 1092 1093 1094 1095
		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 ->
1096 1097
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118
						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 已提交
1119
		description = "Generates gradlew[.bat] scripts"
P
Phillip Webb 已提交
1120
		gradleVersion = "1.9"
1121 1122

		doLast() {
1123
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1124
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1125
			File wrapperFile = file("gradlew")
1126 1127
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1128
			File wrapperBatFile = file("gradlew.bat")
1129 1130 1131 1132
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1133

1134
}
1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146

/*
 * 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-")) {
1147
			return version.replace('BUILD', qualifier)
1148 1149
		}
	}
1150
	return version
1151
}