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

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

16 17
	ext.aspectjVersion    = "1.7.4"
	ext.groovyVersion     = "1.8.9"
18 19 20
	ext.hibernate3Version = "3.6.10.Final"
	ext.hibernate4Version = "4.2.8.Final"
	ext.hibValVersion     = "4.3.1.Final"
21
	ext.hsqldbVersion     = "2.3.1"
22 23 24 25
	ext.jackson1Version   = "1.9.13"
	ext.jackson2Version   = "2.3.1"
	ext.jettyVersion      = "9.1.1.v20140108"
	ext.jodaVersion       = "2.3"
26
	ext.junitVersion      = "4.11"
27
	ext.slf4jVersion      = "1.7.5"
S
Sam Brannen 已提交
28
	ext.xstreamVersion    = "1.4.6"
29

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

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

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

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

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

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

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

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

72
	repositories {
73 74
		maven { url "http://repo.spring.io/libs-release" }
		maven { url "http://repo.spring.io/milestone" }  // for AspectJ 1.8.0.M1
J
Juergen Hoeller 已提交
75
		maven { url "https://oss.sonatype.org/content/repositories/releases" }  // javax.cache
76
	}
C
Chris Beams 已提交
77

78
	dependencies {
79
		testCompile("junit:junit:${junitVersion}")
80
		testCompile("org.hamcrest:hamcrest-all:1.3")
81
		testCompile("org.mockito:mockito-core:1.9.5")
82
	}
C
Chris Beams 已提交
83 84

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

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

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

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

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

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

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

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

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

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

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

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

	configurations.archives.artifacts.clear()
}

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

173 174
	// 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
175
	// further transformed by the JarJar task to depend on org.springframework.asm; this
176
	// avoids including two different copies of asm unnecessarily.
177 178
	def cglibVersion = "3.1"
	def objenesisVersion = "2.1"
179 180 181 182

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

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

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

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

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

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

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

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

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

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

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

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

	// this module's Java and Groovy sources need to be compiled together
	compileJava.enabled=false
	sourceSets {
		main {
			groovy {
				srcDir 'src/main/java'
			}
		}
	}
295 296 297 298 299

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

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

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

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

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

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

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

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

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

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

351
	dependencies {
352 353 354 355 356
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
357
		optional(project(":spring-instrument"))
358
		optional("javax.inject:javax.inject:1")
359
		optional("javax.ejb:ejb-api:3.0")
360
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
361
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
362 363 364 365
		optional("javax.validation:validation-api:1.0.0.GA")
		optional("org.hibernate:hibernate-validator:${hibValVersion}")
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
366
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
367
		optional("org.beanshell:bsh:2.0b4")
368
		optional("org.jruby:jruby:1.7.10")
369
		testCompile("javax.inject:javax.inject-tck:1")
370 371
		testCompile("commons-dbcp:commons-dbcp:1.4")
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
372 373
	}

374 375 376
	// pick up RmiInvocationWrapperRTD.xml in src/main
	sourceSets.main.resources.srcDirs += "src/main/java"

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

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
R
Rossen Stoyanchev 已提交
389 390
		optional("org.projectreactor:reactor-core:1.0.0.RELEASE")
		optional("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
B
Brian Clozel 已提交
391
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
392 393
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
394
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
395
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
396
		testCompile(project(":spring-test"))
397
		testCompile("javax.inject:javax.inject-tck:1")
398
		testCompile("javax.servlet:javax.servlet-api:3.1.0")
399
		testCompile("javax.validation:validation-api:1.0.0.GA")
400
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
401 402 403 404 405
		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 已提交
406
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
407
			exclude group: "javax.servlet", module: "javax.servlet-api"
408
		}
409 410
		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")
411
		testCompile("commons-dbcp:commons-dbcp:1.4")
412
		testCompile("log4j:log4j:1.2.17")
413
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
414
	}
C
Chris Beams 已提交
415 416
}

P
Phillip Webb 已提交
417 418
project("spring-tx") {
	description = "Spring Transaction"
419

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

P
Phillip Webb 已提交
435 436 437
project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"
438

P
Phillip Webb 已提交
439 440 441 442
	// 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 已提交
443

P
Phillip Webb 已提交
444
	compileTestJava {
445 446 447 448 449 450
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

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

P
Phillip Webb 已提交
468 469
project("spring-jms") {
	description = "Spring JMS"
470

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

P
Phillip Webb 已提交
487 488
project("spring-jdbc") {
	description = "Spring JDBC"
489

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

P
Phillip Webb 已提交
504 505
project("spring-context-support") {
	description = "Spring Context Support"
506

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

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

P
Phillip Webb 已提交
536 537
project("spring-web") {
	description = "Spring Web"
538

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	test {
		dependsOn testNG
		useJUnit()
846 847
		exclude "**/testng/**/*.*"
		include "**/testng/FailingBeforeAndAfterMethodsTests"
848 849 850
		// "TestCase" classes are run by other test classes, not the build.
		exclude(["**/*TestCase.class", "**/*TestSuite.class"])
	}
C
Chris Beams 已提交
851 852
}

P
Phillip Webb 已提交
853 854 855
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
856

857
	dependencies {
858
		aspects(project(":spring-orm"))
859 860 861
		ajc("org.aspectj:aspectjtools:1.8.0.M1") // needed for ajc on JDK 8 only
		rt("org.aspectj:aspectjrt:1.8.0.M1") // needed for ajc on JDK 8 only
		compile("org.aspectj:aspectjweaver:${aspectjVersion}") // exposing regular AspectJ version to users
862 863 864 865 866 867 868
		provided("org.eclipse.persistence:javax.persistence:2.0.0")
		optional(project(":spring-aop")) // for @Async support
		optional(project(":spring-beans")) // for @Configurable support
		optional(project(":spring-context")) // for @Enable* support
		optional(project(":spring-context-support")) // for JavaMail support
		optional(project(":spring-orm")) // for JPA exception translation support
		optional(project(":spring-tx")) // for JPA, @Transactional support
869 870
		testCompile(project(":spring-core")) // for CodeStyleAspect
		testCompile(project(":spring-test"))
871
		testCompile("javax.mail:mail:1.4.7")
872
	}
873

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

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

916
configure(rootProject) {
P
Phillip Webb 已提交
917
	description = "Spring Framework"
918

P
Phillip Webb 已提交
919
	apply plugin: "asciidoctor"
920
	apply plugin: "docbook-reference"
921
	apply plugin: "groovy"
R
Rob Winch 已提交
922

923
	// apply plugin: "detect-split-packages"
924 925
	apply from: "${gradleScriptDir}/jdiff.gradle"

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

940 941 942 943 944 945 946 947 948 949
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

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

950 951 952 953 954
	// 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")
	// }
955

C
Chris Beams 已提交
956
	// don't publish the default jar for the root project
957 958 959
	configurations.archives.artifacts.clear()

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

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

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

999 1000 1001
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
1002

P
Phillip Webb 已提交
1003
		maxMemory = "1024m"
C
Chris Beams 已提交
1004
		destinationDir = new File(buildDir, "api")
1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016

		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 })
		}
1017 1018
	}

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

P
Phillip Webb 已提交
1026 1027
		from("src/dist") {
			include "changelog.txt"
1028 1029 1030
		}

		from (api) {
1031
			into "javadoc-api"
1032 1033
		}

1034 1035
		from (reference) {
			into "spring-framework-reference"
1036 1037 1038 1039
		}
	}

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

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

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

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

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

1159
}
1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171

/*
 * 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-")) {
1172
			return version.replace('BUILD', qualifier)
1173 1174
		}
	}
1175
	return version
1176
}