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

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

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 597 598 599 600 601 602
		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"
		}
603
		optional("com.fasterxml.jackson.core:jackson-databind:2.3.0")
604
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:8.0.0-RC10")
605 606
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("log4j:log4j:1.2.17")
607 608
		testCompile("org.projectreactor:reactor-core:1.0.0.RELEASE")
		testCompile("org.projectreactor:reactor-tcp:1.0.0.RELEASE")
609 610 611
	}
}

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

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

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

642
	dependencies {
643 644
		provided(project(":spring-tx"))
		provided(project(":spring-jdbc"))
J
Juergen Hoeller 已提交
645 646
		optional("org.hibernate:hibernate-core:4.2.2.Final")
		optional("org.hibernate:hibernate-entitymanager:4.2.2.Final")
647
		optional(project(":spring-web"))
648
		optional("javax.servlet:javax.servlet-api:3.0.1")
649
	}
650 651
}

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

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

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

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

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

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

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

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

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

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

	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.
834
		getReports().getHtml().setEnabled(true)
835 836 837 838 839 840 841 842 843
	}

	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 已提交
844 845
}

P
Phillip Webb 已提交
846 847 848
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
849

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

868
	eclipse.project {
P
Phillip Webb 已提交
869
		natures += "org.eclipse.ajdt.ui.ajnature"
870
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
871
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
872
	}
C
Chris Beams 已提交
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 903 904 905 906 907 908 909
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)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

910
configure(rootProject) {
P
Phillip Webb 已提交
911
	description = "Spring Framework"
912

P
Phillip Webb 已提交
913
	apply plugin: "asciidoctor"
914
	apply plugin: "docbook-reference"
915
	apply plugin: "groovy"
R
Rob Winch 已提交
916

917
	// apply plugin: "detect-split-packages"
918 919
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
920
	asciidoctor {
921 922
		baseDir = project.file('src/asciidoc')
		backend = 'docbook5'
R
Rob Winch 已提交
923
		options = [
924 925 926 927 928 929 930
			eruby: 'erubis',
			attributes: [
				doctype: 'book',
				'spring-version' : project.version,
				revnumber : project.version,
				docinfo : ""
			]
R
Rob Winch 已提交
931
		]
932 933
	}

934 935 936 937 938 939 940 941 942 943
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

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

944 945 946 947 948
	// 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")
	// }
949

C
Chris Beams 已提交
950
	// don't publish the default jar for the root project
951 952 953
	configurations.archives.artifacts.clear()

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

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

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

993 994 995
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
996

P
Phillip Webb 已提交
997
		maxMemory = "1024m"
C
Chris Beams 已提交
998
		destinationDir = new File(buildDir, "api")
999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010

		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 })
		}
1011 1012
	}

1013
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1014 1015 1016
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1017 1018 1019
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1020 1021
		from("src/dist") {
			include "changelog.txt"
1022 1023 1024
		}

		from (api) {
1025
			into "javadoc-api"
1026 1027
		}

1028 1029
		from (reference) {
			into "spring-framework-reference"
1030 1031 1032 1033
		}
	}

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

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

P
Phillip Webb 已提交
1070 1071 1072 1073
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1074
			into "${baseDir}"
P
Phillip Webb 已提交
1075
			expand(copyright: new Date().format("yyyy"), version: project.version)
1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088
		}

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

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

1153
}
1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165

/*
 * 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-")) {
1166
			return version.replace('BUILD', qualifier)
1167 1168
		}
	}
1169
	return version
1170
}