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

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

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
J
Juergen Hoeller 已提交
67
		maven { url "https://oss.sonatype.org/content/repositories/releases" }  // javax.cache
68
	}
C
Chris Beams 已提交
69

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

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

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

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

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

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

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

		// 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
131 132 133
	}

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

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

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

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

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

	configurations.archives.artifacts.clear()
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
383
		optional("com.fasterxml.jackson.core:jackson-databind:2.3.0")
R
Rossen Stoyanchev 已提交
384 385
		optional("org.projectreactor:reactor-core:1.0.0.RELEASE")
		optional("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
B
Brian Clozel 已提交
386
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
387 388
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
389
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
390 391
		testCompile(project(":spring-test"))
		testCompile("com.thoughtworks.xstream:xstream:1.4.4")
392 393
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
		testCompile("javax.inject:javax.inject-tck:1")
394
		testCompile("javax.servlet:javax.servlet-api:3.1.0")
395
		testCompile("javax.validation:validation-api:1.0.0.GA")
396
		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
		}
405 406
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC10")
		testCompile("org.apache.tomcat.embed:tomcat-embed-logging-juli:8.0.0-RC10")
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.3.0")
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.3.0")
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")
583
		optional("org.apache.tomcat:tomcat-websocket:8.0.0-RC10") {
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.3.0")
597
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC10")
598 599
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("log4j:log4j:1.2.17")
600 601
		testCompile("org.projectreactor:reactor-core:1.0.0.RELEASE")
		testCompile("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
602 603 604
	}
}

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

608 609
	dependencies {
		compile("aopalliance:aopalliance:1.0")
610 611 612 613 614 615
		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")
616
		optional("javax.jdo:jdo-api:3.0")
617
		provided("javax.servlet:javax.servlet-api:3.0.1")
618 619
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
P
Phillip Webb 已提交
620
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
621 622
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
623 624
		optional(project(":spring-aop"))
		optional(project(":spring-context"))
625 626
		compile(project(":spring-tx"))
		compile(project(":spring-jdbc"))
627
		optional(project(":spring-web"))
628
	}
C
Chris Beams 已提交
629 630
}

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

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

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

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

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

P
Phillip Webb 已提交
719 720
project("spring-webmvc-tiles3") {
	description = "Spring Framework Tiles3 Integration"
721
	merge.into = project(":spring-webmvc")
722

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

P
Phillip Webb 已提交
752 753
project("spring-webmvc-portlet") {
	description = "Spring Web Portlet"
754

755
	dependencies {
756
		provided("javax.servlet:javax.servlet-api:3.0.1")
757
		provided("javax.portlet:portlet-api:2.0")
758 759 760 761 762
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		compile(project(":spring-webmvc"))
763
		optional("commons-fileupload:commons-fileupload:1.2")
764 765 766
	}

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

P
Phillip Webb 已提交
770 771
project("spring-test") {
	description = "Spring TestContext Framework"
772

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

	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.
827
		getReports().getHtml().setEnabled(true)
828 829 830 831 832 833 834 835 836
	}

	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 已提交
837 838
}

P
Phillip Webb 已提交
839 840 841
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
842

843
	dependencies {
844 845 846 847 848 849
		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
850
		aspects(project(":spring-orm"))
851
		provided("org.eclipse.persistence:javax.persistence:2.0.0")
852
		testCompile("javax.mail:mail:1.4.7")
853
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
C
Chris Beams 已提交
854
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
855 856 857 858
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
		testCompile(project(":spring-core")) // for CodeStyleAspect
		compile(project(":spring-beans")) // for "p" namespace visibility
		testCompile(project(":spring-test"))
859
	}
860

861
	eclipse.project {
P
Phillip Webb 已提交
862
		natures += "org.eclipse.ajdt.ui.ajnature"
863
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
864
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
865
	}
C
Chris Beams 已提交
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 891 892 893 894 895 896 897 898 899 900 901 902
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)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

903
configure(rootProject) {
P
Phillip Webb 已提交
904
	description = "Spring Framework"
905

P
Phillip Webb 已提交
906
	apply plugin: "asciidoctor"
907
	apply plugin: "docbook-reference"
908
	apply plugin: "groovy"
R
Rob Winch 已提交
909

910
	// apply plugin: "detect-split-packages"
911 912
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
913
	asciidoctor {
914 915
		baseDir = project.file('src/asciidoc')
		backend = 'docbook5'
R
Rob Winch 已提交
916
		options = [
917 918 919 920 921 922 923
			eruby: 'erubis',
			attributes: [
				doctype: 'book',
				'spring-version' : project.version,
				revnumber : project.version,
				docinfo : ""
			]
R
Rob Winch 已提交
924
		]
925 926
	}

927 928 929 930 931 932 933 934 935 936
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

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

937 938 939 940 941
	// 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")
	// }
942

C
Chris Beams 已提交
943
	// don't publish the default jar for the root project
944 945 946
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
947 948 949 950 951 952 953 954 955 956
		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"))
957
		testCompile(project(":spring-orm"))
J
Juergen Hoeller 已提交
958
		testCompile("org.hibernate:hibernate-core:4.2.2.Final")
959
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
960 961 962 963
		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 已提交
964
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
965 966 967
	}

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

972 973 974 975 976
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
977 978 979
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
980
		options.overview = "src/api/overview.html"
981
		options.stylesheetFile = file("src/api/stylesheet.css")
982
		options.splitIndex = true
C
Chris Beams 已提交
983
		options.links(project.ext.javadocLinks)
984
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
985

986 987 988
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
989

P
Phillip Webb 已提交
990
		maxMemory = "1024m"
C
Chris Beams 已提交
991
		destinationDir = new File(buildDir, "api")
992 993 994 995 996 997 998 999 1000 1001 1002 1003

		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 })
		}
1004 1005
	}

1006
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1007 1008 1009
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1010 1011 1012
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1013 1014
		from("src/dist") {
			include "changelog.txt"
1015 1016 1017
		}

		from (api) {
1018
			into "javadoc-api"
1019 1020
		}

1021 1022
		from (reference) {
			into "spring-framework-reference"
1023 1024 1025 1026
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1027 1028 1029
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1030 1031 1032 1033 1034 1035 1036
		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 已提交
1037
				it.path.endsWith("META-INF/spring.schemas")
1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054
			}?.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 已提交
1055 1056 1057
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1058 1059 1060 1061 1062
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

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

P
Phillip Webb 已提交
1063 1064 1065 1066
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1067
			into "${baseDir}"
P
Phillip Webb 已提交
1068
			expand(copyright: new Date().format("yyyy"), version: project.version)
1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081
		}

		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 已提交
1082
				if (subproject.tasks.findByPath("sourcesJar")) {
1083 1084
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1085
				if (subproject.tasks.findByPath("javadocJar")) {
1086 1087 1088 1089 1090 1091 1092 1093 1094
					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 已提交
1095 1096 1097
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1098 1099 1100 1101 1102 1103 1104 1105 1106 1107
		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 ->
1108 1109
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130
						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 已提交
1131
		description = "Generates gradlew[.bat] scripts"
P
Phillip Webb 已提交
1132
		gradleVersion = "1.9"
1133 1134

		doLast() {
1135
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1136
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1137
			File wrapperFile = file("gradlew")
1138 1139
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1140
			File wrapperBatFile = file("gradlew.bat")
1141 1142 1143 1144
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1145

1146
}
1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158

/*
 * 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-")) {
1159
			return version.replace('BUILD', qualifier)
1160 1161
		}
	}
1162
	return version
1163
}