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
		"http://jackson.codehaus.org/1.9.4/javadoc/",
96 97
		"http://fasterxml.github.com/jackson-core/javadoc/2.3.0/",
		"http://fasterxml.github.com/jackson-databind/javadoc/2.3.0/",
P
Phillip Webb 已提交
98
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs"
C
Chris Beams 已提交
99
	] as String[]
100 101
}

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

	jar {
P
Phillip Webb 已提交
107 108 109 110
		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
111 112 113 114 115

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

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

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

		// 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
133 134 135
	}

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

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

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

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

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

	configurations.archives.artifacts.clear()
}

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

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

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

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

203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
	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")
				}
			}
		}
	}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
580
		optional(project(":spring-messaging"))
581
		optional(project(":spring-webmvc"))
582
		optional("javax.servlet:javax.servlet-api:3.1.0")
583
		optional("javax.websocket:javax.websocket-api:1.0")
R
Rossen Stoyanchev 已提交
584
		optional("org.apache.tomcat:tomcat-websocket:8.0.0-RC5") {
585 586 587
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
588 589
		optional("org.glassfish.tyrus:tyrus-websocket-core:1.2.1")
		optional("org.glassfish.tyrus:tyrus-container-servlet:1.2.1")
B
Brian Clozel 已提交
590
		optional("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
591 592
			exclude group: "javax.servlet", module: "javax.servlet"
		}
B
Brian Clozel 已提交
593
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
594
			exclude group: "javax.servlet", module: "javax.servlet"
595
		}
B
Brian Clozel 已提交
596
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
597
		optional("com.fasterxml.jackson.core:jackson-databind:2.3.0")
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.3.0")
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
		testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
		testCompile("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
792
		testCompile("com.fasterxml.jackson.core:jackson-databind:2.3.0")
793 794 795 796 797 798 799 800 801 802 803 804
		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
}