build.gradle 43.2 KB
Newer Older
1
buildscript {
2
	repositories {
P
Phillip Webb 已提交
3
		maven { url "http://repo.springsource.org/plugins-release" }
4 5
	}
	dependencies {
6
		classpath("org.springframework.build.gradle:propdeps-plugin:0.0.6")
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
	ext.aspectjVersion       = "1.8.0"
17
	ext.eclipseLinkVersion   = "2.4.2"
J
Juergen Hoeller 已提交
18
	ext.groovyVersion        = "2.3.1"
19
	ext.hibernate3Version    = "3.6.10.Final"
20 21
	ext.hibernate4Version    = "4.3.5.Final"
	ext.hibVal4Version       = "4.3.1.Final"
22
	ext.hibVal5Version       = "5.1.1.Final"
23
	ext.hsqldbVersion        = "2.3.2"
24
	ext.jackson2Version      = "2.3.3"
25 26
	ext.jasperReportsVersion = "5.5.2"
	ext.jettyVersion         = "9.1.5.v20140505"
27 28
	ext.jodaVersion          = "2.3"
	ext.junitVersion         = "4.11"
29
	ext.openJpaVersion       = "2.2.2"
30
	ext.slf4jVersion         = "1.7.7"
S
Stephane Nicoll 已提交
31
	ext.snakeYamlVersion     = "1.13"
32
	ext.snifferVersion       = "1.11"
33
	ext.tiles2Version        = "2.2.2"
34
	ext.tiles3Version        = "3.0.4"
35
	ext.tomcatVersion        = "8.0.5"
36
	ext.xstreamVersion       = "1.4.7"
37

38
	ext.gradleScriptDir = "${rootProject.projectDir}/gradle"
39

40
	apply plugin: "propdeps"
P
Phillip Webb 已提交
41
	apply plugin: "java"
42
	apply plugin: "test-source-set-dependencies"
43
	apply from: "${gradleScriptDir}/ide.gradle"
C
Chris Beams 已提交
44

S
Stephane Nicoll 已提交
45 46 47 48 49
	configurations {
		sniffer
		javaApiSignature
	}

P
Phillip Webb 已提交
50 51 52 53 54 55
	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"
56
	]
C
Chris Beams 已提交
57

P
Phillip Webb 已提交
58 59 60 61 62 63 64
	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"]

65 66 67 68 69 70
	compileJava {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

	compileTestJava {
71 72 73
		sourceCompatibility=1.8
		targetCompatibility=1.8
		options.compilerArgs += "-parameters"
J
Juergen Hoeller 已提交
74 75
	}

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

C
Chris Beams 已提交
78 79
	test {
		systemProperty("java.awt.headless", "true")
80
		systemProperty("testGroups", project.properties.get("testGroups"))
81
		scanForTestClasses = false
82
		include(["**/*Tests.class", "**/*Test.class"])
83 84
		// Since we set scanForTestClasses to false, we need to filter out inner
		// classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to
85
		// run MyTests by itself will fail if MyTests contains any inner classes.
86
		exclude(["**/Abstract*.class", '**/*$*'])
C
Chris Beams 已提交
87
	}
C
Chris Beams 已提交
88

89
	repositories {
90
		maven { url "http://repo.spring.io/libs-release" }
91
	}
C
Chris Beams 已提交
92

93
	dependencies {
94 95 96 97 98 99
		testCompile("junit:junit:${junitVersion}") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
		testCompile("org.mockito:mockito-core:1.9.5") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
100
		testCompile("org.hamcrest:hamcrest-all:1.3")
S
Stephane Nicoll 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
		testCompile("org.mockito:mockito-core:1.9.5")

		sniffer("org.codehaus.mojo:animal-sniffer-ant-tasks:${snifferVersion}")
		javaApiSignature("org.codehaus.mojo.signature:java16:1.1@signature") // As from Java6_18
	}

	task copyJavaApiSignature(type: Copy) {
		ext.to = file("$buildDir/javaApiSignature/")
		description "Copy the resolved Animal Sniffer signature dependency artifact to a known location and name"
		from configurations.javaApiSignature
		into to
		rename '.*signature', 'javaApi.signature'
	}

	task sniff {
		group = "Verification"
		description = "Checks the Java API signatures"

		dependsOn compileJava
		dependsOn copyJavaApiSignature

		inputs.dir sourceSets.main.output.classesDir
		inputs.dir copyJavaApiSignature.to
		outputs.upToDateWhen { true }
		
		doLast {
			ant.taskdef(
				name: 'animalSniffer',
				classname: 'org.codehaus.mojo.animal_sniffer.ant.CheckSignatureTask',
				classpath: configurations.sniffer.asPath
			)

			ant.animalSniffer(
					signature: "$buildDir/javaApiSignature/javaApi.signature",
					classpath: sourceSets.main.compileClasspath.asPath) {
				path(path: sourceSets.main.output.classesDir)
				annotation(className: "org.springframework.core.UsesJava7")
				annotation(className: "org.springframework.core.UsesJava8")
				annotation(className: "org.springframework.core.UsesSunHttpServer")
			}
		}
142
	}
C
Chris Beams 已提交
143 144

	ext.javadocLinks = [
P
Phillip Webb 已提交
145
		"http://docs.oracle.com/javase/7/docs/api/",
146
		"http://docs.oracle.com/javaee/7/api/",
J
Juergen Hoeller 已提交
147 148 149
		"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 已提交
150 151
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
J
Juergen Hoeller 已提交
152 153 154 155
		"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/",
156
		"http://tiles.apache.org/tiles-request/apidocs/",
J
Juergen Hoeller 已提交
157
		"http://tiles.apache.org/framework/apidocs/",
P
Phillip Webb 已提交
158
		"http://aopalliance.sourceforge.net/doc/",
C
Chris Beams 已提交
159
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
J
Juergen Hoeller 已提交
160
		"http://ehcache.org/apidocs/",
161
		"http://quartz-scheduler.org/api/2.2.0/",
162 163
		"http://fasterxml.github.com/jackson-core/javadoc/2.3.0/",
		"http://fasterxml.github.com/jackson-databind/javadoc/2.3.0/",
P
Phillip Webb 已提交
164
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs"
C
Chris Beams 已提交
165
	] as String[]
166 167
}

168
configure(subprojects - project(":spring-build-src")) { subproject ->
169
	apply plugin: "merge"
170 171 172
	apply from: "${gradleScriptDir}/publish-maven.gradle"

	jar {
P
Phillip Webb 已提交
173 174 175 176
		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
177 178 179 180 181

		from("${rootProject.projectDir}/src/dist") {
			include "license.txt"
			include "notice.txt"
			into "META-INF"
P
Phillip Webb 已提交
182
			expand(copyright: new Date().format("yyyy"), version: project.version)
183 184 185 186
		}
	}

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

189 190 191
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = project.name
C
Chris Beams 已提交
192
		options.links(project.ext.javadocLinks)
193
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
194 195 196 197 198

		// 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
199 200 201
	}

	task sourcesJar(type: Jar, dependsOn:classes) {
P
Phillip Webb 已提交
202
		classifier = "sources"
203
		from sourceSets.main.allJava.srcDirs
P
Phillip Webb 已提交
204
		include "**/*.java", "**/*.aj"
205 206 207
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
208
		classifier = "javadoc"
209 210 211 212 213 214 215
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
216 217
}

218 219
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
220
	apply plugin: "groovy"
221 222 223

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
224
		compile localGroovy()
225 226 227 228 229
	}

	configurations.archives.artifacts.clear()
}

P
Phillip Webb 已提交
230 231
project("spring-core") {
	description = "Spring Core"
232

233 234
	// As of Spring 4.0.3, spring-core includes asm 5.0 and repackages cglib 3.1, inlining
	// both into the spring-core jar. cglib 3.1 itself depends on asm 4+, and is therefore
235
	// further transformed by the JarJar task to depend on org.springframework.asm; this
236
	// avoids including two different copies of asm unnecessarily.
237 238
	def cglibVersion = "3.1"
	def objenesisVersion = "2.1"
239 240 241 242

	configurations {
		jarjar
		cglib
243
		objenesis
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258
	}

	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 已提交
259 260
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
					// as mentioned above, transform cglib"s internal asm dependencies from
261 262
					// 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 已提交
263
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
264 265 266 267 268
				}
			}
		}
	}

269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287
	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")
				}
			}
		}
	}

288
	dependencies {
289
		cglib("cglib:cglib:${cglibVersion}@jar")
290
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
291
		jarjar("com.googlecode.jarjar:jarjar:1.3")
292

P
Phillip Webb 已提交
293
		compile(files(cglibRepackJar))
294
		compile("commons-logging:commons-logging:1.1.3")
295
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
296
		optional("net.sf.jopt-simple:jopt-simple:4.6")
297
		optional("log4j:log4j:1.2.17")
298
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
A
Arjen Poutsma 已提交
299
		testCompile("xmlunit:xmlunit:1.5")
P
Phillip Webb 已提交
300 301 302
		testCompile("org.codehaus.woodstox:wstx-asl:3.2.7") {
			exclude group: "stax", module: "stax-api"
		}
303 304 305
	}

	jar {
306
		// inline repackaged cglib classes directly into the spring-core jar
307 308
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
309
			include "org/springframework/cglib/**"
310
		}
311 312 313 314 315

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
316
	}
C
Chris Beams 已提交
317 318
}

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

322
	dependencies {
323 324
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
325
		optional("javax.inject:javax.inject:1")
326
		optional("javax.el:javax.el-api:2.2.5")
S
Stephane Nicoll 已提交
327
		optional("org.yaml:snakeyaml:${snakeYamlVersion}")
328
		testCompile("log4j:log4j:1.2.17")
329
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
S
Stephane Nicoll 已提交
330
    }
C
Chris Beams 已提交
331 332
}

333 334
project("spring-beans-groovy") {
	description "Groovy Bean Definitions"
J
Juergen Hoeller 已提交
335
	merge.into = project(":spring-beans")
336
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
337 338 339

	dependencies {
		compile(project(":spring-core"))
340
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
J
Juergen Hoeller 已提交
341 342 343 344 345 346 347
	}

	// this module's Java and Groovy sources need to be compiled together
	compileJava.enabled=false
	sourceSets {
		main {
			groovy {
348
				srcDir "src/main/java"
J
Juergen Hoeller 已提交
349 350 351
			}
		}
	}
352 353 354 355 356

	compileGroovy {
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}
J
Juergen Hoeller 已提交
357 358
}

P
Phillip Webb 已提交
359 360
project("spring-aop") {
	description = "Spring AOP"
361

362
	dependencies {
363
		compile(project(":spring-beans"))
364 365
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
366
		compile(files(project(":spring-core").objenesisRepackJar))
367
		compile("aopalliance:aopalliance:1.0")
368
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
369
		optional("commons-pool:commons-pool:1.6")
370
		optional("com.jamonapi:jamon:2.4")
371
	}
C
Chris Beams 已提交
372 373
}

P
Phillip Webb 已提交
374 375
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
376

377
	dependencies {
378
		compile(project(":spring-core"))
379
	}
C
Chris Beams 已提交
380 381
}

P
Phillip Webb 已提交
382 383
project("spring-instrument") {
	description = "Spring Instrument"
384

385
	jar {
P
Phillip Webb 已提交
386 387
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
388 389
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
390 391 392
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
393
	}
C
Chris Beams 已提交
394 395
}

P
Phillip Webb 已提交
396 397
project("spring-instrument-tomcat") {
	description = "Spring Instrument Tomcat"
398

399
	dependencies {
400
		provided("org.apache.tomcat:catalina:6.0.16")
401
	}
C
Chris Beams 已提交
402 403
}

P
Phillip Webb 已提交
404 405
project("spring-context") {
	description = "Spring Context"
406
	apply plugin: "groovy"
407

408
	dependencies {
409 410 411 412 413
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
414
		optional(project(":spring-instrument"))
415
		optional("javax.inject:javax.inject:1")
416
		optional("javax.ejb:ejb-api:3.0")
417
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
418
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
419
		optional("javax.validation:validation-api:1.0.0.GA")
420
		optional("org.hibernate:hibernate-validator:${hibVal4Version}")
421 422
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
423
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
424
		optional("org.beanshell:bsh:2.0b4")
425
		optional("org.jruby:jruby:1.7.12")
426
		testCompile("javax.inject:javax.inject-tck:1")
427 428
		testCompile("commons-dbcp:commons-dbcp:1.4")
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
429 430
	}

431 432 433
	// pick up RmiInvocationWrapperRTD.xml in src/main
	sourceSets.main.resources.srcDirs += "src/main/java"

434
	test {
P
Phillip Webb 已提交
435
		jvmArgs = ["-disableassertions:org.aspectj.weaver.UnresolvedType"] // SPR-7989
436
	}
437 438 439 440 441 442 443 444 445
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
446 447
		optional("org.projectreactor:reactor-core:1.1.0.RELEASE")
		optional("org.projectreactor:reactor-net:1.1.0.RELEASE")
B
Brian Clozel 已提交
448
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
449 450
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
451
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
452
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
453
		testCompile(project(":spring-test"))
454
		testCompile("javax.inject:javax.inject-tck:1")
455
		testCompile("javax.servlet:javax.servlet-api:3.1.0")
456
		testCompile("javax.validation:validation-api:1.0.0.GA")
457
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
458 459 460 461 462
		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 已提交
463
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
464
			exclude group: "javax.servlet", module: "javax.servlet-api"
465
		}
466 467 468
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}")
469
		testCompile("commons-dbcp:commons-dbcp:1.4")
470
		testCompile("log4j:log4j:1.2.17")
471
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
472
	}
C
Chris Beams 已提交
473 474
}

P
Phillip Webb 已提交
475 476
project("spring-tx") {
	description = "Spring Transaction"
477

478
	dependencies {
479 480
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
481 482 483
		optional(project(":spring-aop"))
		optional(project(":spring-context")) // for JCA, @EnableTransactionManagement
		optional("aopalliance:aopalliance:1.0")
484
		optional("javax.transaction:javax.transaction-api:1.2")
485
		optional("javax.resource:connector-api:1.5")
486
		optional("javax.ejb:ejb-api:3.0")
487
		optional("com.ibm.websphere:uow:6.0.2.17")
488
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
489
		testCompile("org.eclipse.persistence:javax.persistence:2.0.0")
490
	}
C
Chris Beams 已提交
491 492
}

P
Phillip Webb 已提交
493 494 495
project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"
496

P
Phillip Webb 已提交
497
	compileTestJava {
498 499 500 501 502 503
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

504
	dependencies {
505 506
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
507
		optional("org.codehaus.castor:castor-xml:1.3.3")  {
508
			exclude group: 'stax', module: 'stax-api'
509
			exclude group: "org.springframework", module: "spring-context"
510 511 512 513 514 515 516 517
		}
		optional("org.apache.xmlbeans:xmlbeans:2.6.0") {
			exclude group: 'stax', module: 'stax-api'
		}
		optional("com.thoughtworks.xstream:xstream:${xstreamVersion}") {
			exclude group: 'xpp3', module: 'xpp3_min'
			exclude group: 'xmlpull', module: 'xmlpull'
		}
518
		optional("org.jibx:jibx-run:1.2.5")
519
		testCompile(project(":spring-context"))
A
Arjen Poutsma 已提交
520
		testCompile("xmlunit:xmlunit:1.5")
521 522 523 524
		testCompile("xpp3:xpp3:1.1.3.4.O")
		testCompile("org.codehaus.jettison:jettison:1.0.1") {
			exclude group: 'stax', module: 'stax-api'
		}
525 526 527 528
		testCompile(files(genCastor.classesDir).builtBy(genCastor))
		testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
		testCompile(files(genXmlbeans.classesDir).builtBy(genXmlbeans))
	}
C
Chris Beams 已提交
529 530
}

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

534
	dependencies {
535 536 537 538
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
539
		compile(project(":spring-messaging"))
540
		compile(project(":spring-tx"))
541
		provided("javax.jms:jms-api:1.1-rev-1")
542 543
		optional(project(":spring-oxm"))
		optional("aopalliance:aopalliance:1.0")
544
		optional("javax.transaction:javax.transaction-api:1.2")
545
		optional("javax.resource:connector-api:1.5")
546
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
547
	}
C
Chris Beams 已提交
548 549
}

P
Phillip Webb 已提交
550 551
project("spring-jdbc") {
	description = "Spring JDBC"
552

553
	dependencies {
554
		compile(project(":spring-beans"))
555
		compile(project(":spring-core"))
556
		compile(project(":spring-tx"))
557
		optional(project(":spring-context")) // for JndiDataSourceLookup
558
		optional("javax.transaction:javax.transaction-api:1.2")
559
		optional("com.mchange:c3p0:0.9.2.1")
P
Phillip Webb 已提交
560
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
561 562 563
		optional("com.h2database:h2:1.3.176")
		optional("org.apache.derby:derby:10.10.2.0")
		optional("org.apache.derby:derbyclient:10.10.2.0")
564
	}
C
Chris Beams 已提交
565 566
}

P
Phillip Webb 已提交
567 568
project("spring-context-support") {
	description = "Spring Context Support"
569

570
	dependencies {
571 572 573
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
574 575
		optional(project(":spring-jdbc")) // for Quartz support
		optional(project(":spring-tx")) // for Quartz support
576
		optional("javax.mail:javax.mail-api:1.5.2")
S
Stephane Nicoll 已提交
577
		optional("javax.cache:cache-api:1.0.0")
578
		optional("com.google.guava:guava:17.0")
579 580
		optional("net.sf.ehcache:ehcache-core:2.6.7")
		optional("org.quartz-scheduler:quartz:2.2.1")
581
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
582
		optional("org.apache.velocity:velocity:1.7")
583
		optional("org.freemarker:freemarker:2.3.20")
584
		optional("com.lowagie:itext:2.1.7")
585 586 587 588
		optional("net.sf.jasperreports:jasperreports:$jasperReportsVersion") {
			exclude group: "com.fasterxml.jackson.core", module: "jackson-annotations"
			exclude group: "com.fasterxml.jackson.core", module: "jackson-core"
			exclude group: "com.fasterxml.jackson.core", module: "jackson-databind"
589 590
			exclude group: "org.olap4j", module: "olap4j"
			exclude group: "xml-apis", module: "xml-apis"
591
		}
592
		testCompile("org.apache.poi:poi:3.10-FINAL")
593 594
		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 已提交
595
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
596
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
597
		testRuntime("com.sun.mail:javax.mail:1.5.2")
598 599 600
	}

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

P
Phillip Webb 已提交
604 605
project("spring-web") {
	description = "Spring Web"
606

607
	dependencies {
608
		compile(project(":spring-aop")) // for JaxWsPortProxyFactoryBean
609
		compile(project(":spring-beans")) // for MultiPartFilter
610
		compile(project(":spring-context"))
611
		compile(project(":spring-core"))
612
		provided("javax.servlet:javax.servlet-api:3.0.1")
613
		optional(project(":spring-oxm")) // for MarshallingHttpMessageConverter
614
		optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1")
615
		optional("javax.portlet:portlet-api:2.0")
616
		optional("javax.el:javax.el-api:2.2.5")
617
		optional("javax.faces:javax.faces-api:2.2")
618
		optional("aopalliance:aopalliance:1.0")
619
		optional("com.caucho:hessian:4.0.38")
620
		optional("commons-fileupload:commons-fileupload:1.3.1")
621 622
		optional("org.apache.httpcomponents:httpclient:4.3.3")
		optional("org.apache.httpcomponents:httpasyncclient:4.0.1")
623 624
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		optional("rome:rome:1.0")
B
Brian Clozel 已提交
625
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
626
			exclude group: "javax.servlet", module: "javax.servlet-api"
627
		}
B
Brian Clozel 已提交
628
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
629
			exclude group: "javax.servlet", module: "javax.servlet-api"
630
		}
631
		optional("log4j:log4j:1.2.17")
632
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
A
Arjen Poutsma 已提交
633
		testCompile("xmlunit:xmlunit:1.5")
634
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
635 636 637
		testCompile("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
			exclude group: "org.apache.taglibs", module: "taglibs-standard-spec"
		}
638 639 640
	}

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

644
project("spring-websocket") {
645
	description = "Spring WebSocket"
646 647 648 649 650

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
651
		optional(project(":spring-messaging"))
652
		optional(project(":spring-webmvc"))
653
		optional("javax.servlet:javax.servlet-api:3.1.0")
654
		optional("javax.websocket:javax.websocket-api:1.0")
655
		optional("org.apache.tomcat:tomcat-websocket:${tomcatVersion}") {
656 657 658
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
659 660
		optional("org.glassfish.tyrus:tyrus-websocket-core:1.2.1")
		optional("org.glassfish.tyrus:tyrus-container-servlet:1.2.1")
B
Brian Clozel 已提交
661
		optional("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
662 663
			exclude group: "javax.servlet", module: "javax.servlet"
		}
B
Brian Clozel 已提交
664
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
665
			exclude group: "javax.servlet", module: "javax.servlet"
666
		}
B
Brian Clozel 已提交
667
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
668 669
		optional("io.undertow:undertow-core:1.0.1.Final")
		optional("io.undertow:undertow-servlet:1.0.1.Final") {
670
			exclude group: "org.jboss.spec.javax.servlet", module: "jboss-servlet-api_3.1_spec"
671
			exclude group: "org.jboss.spec.javax.annotation", module: "jboss-annotations-api_1.2_spec"
672
		}
673
		optional("io.undertow:undertow-websockets-jsr:1.0.1.Final") {
674 675
			exclude group: "org.jboss.spec.javax.websocket", module: "jboss-websocket-api_1.0_spec"
		}
676
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
677 678 679
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}")
680 681
		testCompile("org.projectreactor:reactor-core:1.1.0.RELEASE")
		testCompile("org.projectreactor:reactor-net:1.1.0.RELEASE")
682 683
		testCompile("log4j:log4j:1.2.17")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
684 685 686
	}
}

P
Phillip Webb 已提交
687 688
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
689

690
	dependencies {
691 692 693 694 695 696 697 698
		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")
699 700 701
		optional("org.eclipse.persistence:javax.persistence:2.0.5")
		optional("org.eclipse.persistence:org.eclipse.persistence.core:${eclipseLinkVersion}")
		optional("org.eclipse.persistence:org.eclipse.persistence.jpa:${eclipseLinkVersion}") {
702 703 704 705 706 707 708 709 710
			exclude group: 'org.eclipse.persistence', module: 'javax.persistence'
		}
		optional("org.hibernate:hibernate-core:${hibernate3Version}") {
			exclude group: 'org.hibernate.javax.persistence', module: 'hibernate-jpa-2.0-api'
			exclude group: 'javax.transaction', module: 'jta'
		}
		optional("org.hibernate:hibernate-entitymanager:${hibernate3Version}") {
			exclude group: 'org.hibernate.javax.persistence', module: 'hibernate-jpa-2.0-api'
		}
711
		optional("org.apache.openjpa:openjpa:${openJpaVersion}") {
712 713 714 715 716
			exclude group: 'junit', module: 'junit'
			exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jpa_2.0_spec'
			exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jta_1.1_spec'
			exclude group: 'org.apache.geronimo.specs', module: 'geronimo-jms_1.1_spec'
		}
717
		optional("javax.jdo:jdo-api:3.0.1") {
718 719
			exclude group: 'javax.transaction', module: 'transaction-api'
		}
720
		optional("javax.servlet:javax.servlet-api:3.0.1")
721
		testCompile("commons-dbcp:commons-dbcp:1.4")
P
Phillip Webb 已提交
722
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
723
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
724
	}
C
Chris Beams 已提交
725 726
}

P
Phillip Webb 已提交
727 728
project("spring-orm-hibernate4") {
	description = "Spring Object/Relational Mapping - Hibernate 4 support"
729
	merge.into = project(":spring-orm")
730

731
	dependencies {
732
		provided(project(":spring-jdbc"))
733
		provided(project(":spring-tx"))
734
		optional(project(":spring-web"))
735 736
		optional("org.hibernate:hibernate-core:${hibernate4Version}")
		optional("org.hibernate:hibernate-entitymanager:${hibernate4Version}")
737
		optional("javax.servlet:javax.servlet-api:3.0.1")
738
        optional("aopalliance:aopalliance:1.0")
739 740
		testCompile("javax.validation:validation-api:1.1.0.GA")
		testCompile("org.hibernate:hibernate-validator:${hibVal5Version}")
741 742
		testCompile("javax.el:javax.el-api:2.2.5")
		testCompile("org.glassfish.web:javax.el:2.2.6")
743
	}
744 745
}

P
Phillip Webb 已提交
746 747
project("spring-webmvc") {
	description = "Spring Web MVC"
748

749
	dependencies {
750 751
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
752
		compile(project(":spring-core"))
753
		compile(files(project(":spring-core").objenesisRepackJar))
754 755
		compile(project(":spring-expression"))
		compile(project(":spring-web"))
756
		provided("javax.servlet:javax.servlet-api:3.0.1")
757 758
		optional(project(":spring-context-support")) // for Velocity support
		optional(project(":spring-oxm")) // for MarshallingView
759 760
		optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1")
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
761
		optional("net.sourceforge.jexcelapi:jxl:2.6.12")
762
		optional("org.apache.poi:poi:3.10-FINAL")
763 764
		optional("org.apache.velocity:velocity:1.7")
		optional("velocity-tools:velocity-tools-view:1.4")
765
		optional("org.freemarker:freemarker:2.3.20")
766
		optional("com.lowagie:itext:2.1.7")
767
		optional("net.sf.jasperreports:jasperreports:$jasperReportsVersion") {
768 769 770
			exclude group: "com.fasterxml.jackson.core", module: "jackson-annotations"
			exclude group: "com.fasterxml.jackson.core", module: "jackson-core"
			exclude group: "com.fasterxml.jackson.core", module: "jackson-databind"
771 772
			exclude group: "org.olap4j", module: "olap4j"
			exclude group: "xml-apis", module: "xml-apis"
773 774 775
		}
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		optional("rome:rome:1.0")
776 777
		optional("org.apache.tiles:tiles-api:${tiles2Version}")
		optional("org.apache.tiles:tiles-core:${tiles2Version}") {
778 779
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
780
		optional("org.apache.tiles:tiles-servlet:${tiles2Version}") {
781 782
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
783
		optional("org.apache.tiles:tiles-jsp:${tiles2Version}") {
784 785
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
786
		optional("org.apache.tiles:tiles-el:${tiles2Version}") {
787 788
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
789
		optional("org.apache.tiles:tiles-extras:${tiles2Version}") {
790
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
791
			exclude group: "org.apache.velocity", module: "velocity-tools"
792 793
			exclude group: "org.springframework", module: "spring-web"
		}
794 795
		testCompile(project(":spring-aop"))
		testCompile("rhino:js:1.7R1")
A
Arjen Poutsma 已提交
796
		testCompile("xmlunit:xmlunit:1.5")
797
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
798
			exclude group: "xml-apis", module: "xml-apis"
799 800
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
801 802 803
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
804
		}
B
Brian Clozel 已提交
805
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
806
			exclude group: "javax.servlet", module: "javax.servlet"
807
		}
B
Brian Clozel 已提交
808
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
809
			exclude group: "javax.servlet", module: "javax.servlet"
810 811
		}
		testCompile("javax.validation:validation-api:1.0.0.GA")
812
		testCompile("org.hibernate:hibernate-validator:${hibVal4Version}")
813
		testCompile("org.apache.httpcomponents:httpclient:4.3.3")
814
		testCompile("commons-fileupload:commons-fileupload:1.3.1")
815
		testCompile("commons-io:commons-io:1.3")
816
		testCompile("joda-time:joda-time:${jodaVersion}")
817
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
818 819 820
	}

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

P
Phillip Webb 已提交
824 825
project("spring-webmvc-tiles3") {
	description = "Spring Framework Tiles3 Integration"
826
	merge.into = project(":spring-webmvc")
827

828
	dependencies {
829 830
		provided(project(":spring-context"))
		provided(project(":spring-web"))
831
		provided("javax.servlet:javax.servlet-api:3.0.1")
832 833
		optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1")
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
834
		optional("javax.el:javax.el-api:2.2.5")
835 836
		optional("org.apache.tiles:tiles-api:${tiles3Version}")
		optional("org.apache.tiles:tiles-core:${tiles3Version}") {
P
Phillip Webb 已提交
837
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
838
		}
839
		optional("org.apache.tiles:tiles-servlet:${tiles3Version}") {
P
Phillip Webb 已提交
840
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
841
		}
842
		optional("org.apache.tiles:tiles-jsp:${tiles3Version}") {
P
Phillip Webb 已提交
843
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
844
		}
845
		optional("org.apache.tiles:tiles-el:${tiles3Version}") {
846
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
847
		}
848
		optional("org.apache.tiles:tiles-extras:${tiles3Version}") {
P
Phillip Webb 已提交
849
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
850
			exclude group: "org.springframework", module: "spring-web"
851
		}
852
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
853
	}
854 855
}

P
Phillip Webb 已提交
856 857
project("spring-webmvc-portlet") {
	description = "Spring Web Portlet"
858

859
	dependencies {
860 861
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
862
		compile(project(":spring-core"))
863 864
		compile(project(":spring-web"))
		compile(project(":spring-webmvc"))
865 866
		provided("javax.servlet:javax.servlet-api:3.0.1")
		provided("javax.portlet:portlet-api:2.0")
867
		optional("commons-fileupload:commons-fileupload:1.3.1")
868 869 870
	}

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

P
Phillip Webb 已提交
874 875
project("spring-test") {
	description = "Spring TestContext Framework"
876

877
	dependencies {
878
		compile(project(":spring-core"))
879 880 881 882 883 884 885
		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 已提交
886
		optional(project(":spring-webmvc-portlet"))
887
		optional("junit:junit:${junitVersion}")
S
Sam Brannen 已提交
888
		optional("org.testng:testng:6.8.8")
889
		optional("javax.inject:javax.inject:1")
890
		optional("javax.servlet:javax.servlet-api:3.0.1")
891 892 893 894 895
		optional("javax.servlet.jsp:javax.servlet.jsp-api:2.2.1")
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
		optional("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
			exclude group: "org.apache.taglibs", module: "taglibs-standard-spec"
		}
896
		optional("javax.portlet:portlet-api:2.0")
897
		optional("javax.el:javax.el-api:2.2.5")
898
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
899
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
900 901
		optional("org.hamcrest:hamcrest-core:1.3")
		optional("com.jayway.jsonpath:json-path:0.9.0")
A
Arjen Poutsma 已提交
902
		optional("xmlunit:xmlunit:1.5")
903 904 905
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
		testCompile(project(":spring-webmvc-tiles3"))
906
		testCompile("javax.mail:javax.mail-api:1.5.2")
907
		testCompile("javax.ejb:ejb-api:3.0")
908 909 910
		testCompile("org.hibernate:hibernate-core:${hibernate3Version}") {
			exclude group: 'org.hibernate.javax.persistence', module: 'hibernate-jpa-2.0-api'
		}
911
		testCompile("org.hibernate:hibernate-entitymanager:${hibernate3Version}")
912
		testCompile("org.hibernate:hibernate-validator:${hibVal4Version}")
913
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
914
		testCompile("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
915
		testCompile("rome:rome:1.0")
916 917
		testCompile("org.apache.tiles:tiles-api:${tiles3Version}")
		testCompile("org.apache.tiles:tiles-core:${tiles3Version}") {
918 919
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
920
		testCompile("org.apache.tiles:tiles-servlet:${tiles3Version}") {
921 922
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
923 924
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
		testCompile "org.slf4j:slf4j-jcl:${slf4jVersion}"
925
	}
926 927 928

	task testNG(type: Test) {
		useTestNG()
929
		scanForTestClasses = false
930 931
		include(["**/testng/**/*Tests.class", "**/testng/**/*Test.class"])
		// Show STD_OUT & STD_ERR of the test JVM(s) on the console:
932
		// testLogging.showStandardStreams = true
933
		// forkEvery 1
934 935 936 937 938
	}

	test {
		dependsOn testNG
		useJUnit()
939
		exclude "**/testng/**/*.*"
940
	}
941 942 943 944 945 946 947

	task aggregateTestReports(type: TestReport) {
		destinationDir = test.reports.html.destination
		reportOn test, testNG
	}

	check.dependsOn aggregateTestReports
C
Chris Beams 已提交
948 949
}

P
Phillip Webb 已提交
950 951 952
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
953

954
	dependencies {
955
		aspects(project(":spring-orm"))
956 957
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
958
		compile("org.aspectj:aspectjweaver:${aspectjVersion}") // exposing regular AspectJ version to users
959 960 961 962
		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
963
		optional(project(":spring-context-support")) // for JavaMail and JSR-107 support
964 965
		optional(project(":spring-orm")) // for JPA exception translation support
		optional(project(":spring-tx")) // for JPA, @Transactional support
S
Stephane Nicoll 已提交
966
		optional("javax.cache:cache-api:1.0.0")
967 968
		testCompile(project(":spring-core")) // for CodeStyleAspect
		testCompile(project(":spring-test"))
969
		testCompile("javax.mail:javax.mail-api:1.5.2")
970
	}
971

972
	eclipse.project {
P
Phillip Webb 已提交
973
		natures += "org.eclipse.ajdt.ui.ajnature"
974
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
975
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
976
	}
C
Chris Beams 已提交
977 978
}

979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013
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)
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

1014
configure(rootProject) {
P
Phillip Webb 已提交
1015
	description = "Spring Framework"
1016

P
Phillip Webb 已提交
1017
	apply plugin: "asciidoctor"
1018
	apply plugin: "docbook-reference"
1019
	apply plugin: "groovy"
R
Rob Winch 已提交
1020

1021
	// apply plugin: "detect-split-packages"
1022 1023
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
1024
	asciidoctor {
1025 1026
		baseDir = project.file('src/asciidoc')
		backend = 'docbook5'
R
Rob Winch 已提交
1027
		options = [
1028 1029 1030 1031 1032 1033 1034
			eruby: 'erubis',
			attributes: [
				doctype: 'book',
				'spring-version' : project.version,
				revnumber : project.version,
				docinfo : ""
			]
R
Rob Winch 已提交
1035
		]
1036 1037
	}

1038 1039 1040 1041 1042 1043 1044 1045 1046 1047
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
		expandPlaceholders = ""
	}

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

1048 1049 1050 1051 1052
	// 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")
	// }
1053

C
Chris Beams 已提交
1054
	// don't publish the default jar for the root project
1055 1056 1057
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
1058
		testCompile(project(":spring-aop"))
1059
		testCompile(project(":spring-beans"))
1060
		testCompile(project(":spring-context"))
1061 1062
		testCompile(project(":spring-core"))
		testCompile(project(":spring-expression"))
1063
		testCompile(project(":spring-jdbc"))
1064
		testCompile(project(":spring-orm"))
1065
		testCompile(project(":spring-test"))
1066
		testCompile(project(":spring-tx"))
1067 1068
		testCompile(project(":spring-web"))
		testCompile(project(":spring-webmvc-portlet"))
1069
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
1070 1071 1072 1073
		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}")
1074
		testCompile("org.hibernate:hibernate-core:${hibernate4Version}")
P
Phillip Webb 已提交
1075
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
1076 1077 1078
	}

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

1083 1084 1085 1086 1087
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
1088 1089 1090
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
1091
		options.overview = "src/api/overview.html"
1092
		options.stylesheetFile = file("src/api/stylesheet.css")
1093
		options.splitIndex = true
C
Chris Beams 已提交
1094
		options.links(project.ext.javadocLinks)
1095
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
1096

1097 1098 1099
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
1100

P
Phillip Webb 已提交
1101
		maxMemory = "1024m"
C
Chris Beams 已提交
1102
		destinationDir = new File(buildDir, "api")
1103 1104 1105

		doFirst {
			classpath = files(
1106
				// ensure Servlet 3.x and Hibernate 4.x have precedence on the javadoc
1107 1108 1109 1110 1111 1112 1113 1114
				// 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 })
		}
1115 1116
	}

1117
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1118 1119 1120
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1121 1122 1123
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1124 1125
		from("src/dist") {
			include "changelog.txt"
1126 1127 1128
		}

		from (api) {
1129
			into "javadoc-api"
1130 1131
		}

1132 1133
		from (reference) {
			into "spring-framework-reference"
1134 1135 1136 1137
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1138 1139 1140
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1141 1142 1143 1144 1145 1146 1147
		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 已提交
1148
				it.path.endsWith("META-INF/spring.schemas")
1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165
			}?.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 已提交
1166 1167 1168
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1169 1170 1171 1172 1173
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

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

P
Phillip Webb 已提交
1174 1175 1176 1177
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1178
			into "${baseDir}"
P
Phillip Webb 已提交
1179
			expand(copyright: new Date().format("yyyy"), version: project.version)
1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192
		}

		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 已提交
1193
				if (subproject.tasks.findByPath("sourcesJar")) {
1194 1195
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1196
				if (subproject.tasks.findByPath("javadocJar")) {
1197 1198 1199 1200 1201 1202 1203 1204 1205
					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 已提交
1206 1207 1208
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1209 1210 1211 1212 1213 1214 1215 1216 1217 1218
		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 ->
1219 1220
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241
						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 已提交
1242
		description = "Generates gradlew[.bat] scripts"
1243
		gradleVersion = "1.12"
1244 1245

		doLast() {
1246
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1247
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1248
			File wrapperFile = file("gradlew")
1249 1250
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1251
			File wrapperBatFile = file("gradlew.bat")
1252 1253 1254 1255
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1256

1257
}
1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269

/*
 * 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-")) {
1270
			return version.replace('BUILD', qualifier)
1271 1272
		}
	}
1273
	return version
1274
}