build.gradle 32.4 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.3")
7
		classpath("org.springframework.build.gradle:docbook-reference-plugin:0.2.6")
8
	}
9 10
}

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

S
Sam Brannen 已提交
15 16 17 18 19
	// The following is a work-around until the Gradle build uses
	// Ant 1.9.x by default. This is necessary to avoid the
	// "Class not found: javac1.8" issue with Ant versions prior to 1.9.x
	ant.properties["build.compiler"] = "javac1.7"

R
Rob Winch 已提交
20
	ext.aspectjVersion  = "1.7.2"
P
Phillip Webb 已提交
21 22 23
	ext.hsqldbVersion   = "1.8.0.10"
	ext.junitVersion    = "4.11"
	ext.slf4jVersion    = "1.6.1"
24
	ext.gradleScriptDir = "${rootProject.projectDir}/gradle"
25

26
	apply plugin: "propdeps"
P
Phillip Webb 已提交
27
	apply plugin: "java"
28
	apply plugin: "test-source-set-dependencies"
29
	apply from: "${gradleScriptDir}/ide.gradle"
C
Chris Beams 已提交
30

31
	compileJava {
32 33
		sourceCompatibility=1.6
		targetCompatibility=1.6
34 35
	}
	compileTestJava {
36 37
		sourceCompatibility=1.8
		targetCompatibility=1.8
38
	}
C
Chris Beams 已提交
39

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
	[compileJava, 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:-options",     // intentionally disabled
		"-Xlint:-fallthrough", // intentionally disabled
		"-Xlint:-rawtypes",    // TODO enable and fix warnings
		"-Xlint:-deprecation", // TODO enable and fix warnings
		"-Xlint:-unchecked"    // TODO enable and fix warnings
	]
C
Chris Beams 已提交
60

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

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

71 72 73
	repositories {
		maven { url "http://repo.springsource.org/libs-release" }
	}
C
Chris Beams 已提交
74

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

	ext.javadocLinks = [
82
		"http://docs.oracle.com/javase/6/docs/api/",
J
Juergen Hoeller 已提交
83 84 85 86
		"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 已提交
87 88
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
J
Juergen Hoeller 已提交
89 90 91 92 93
		"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 已提交
94
		"http://aopalliance.sourceforge.net/doc/",
C
Chris Beams 已提交
95
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
J
Juergen Hoeller 已提交
96 97
		"http://ehcache.org/apidocs/",
		"http://quartz-scheduler.org/api/2.1.7/",
98
		"http://jackson.codehaus.org/1.9.12/javadoc/",
J
Juergen Hoeller 已提交
99
		"http://fasterxml.github.com/jackson-core/javadoc/2.2.0/",
C
Chris Beams 已提交
100
	] as String[]
101 102
}

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

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

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

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

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

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

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

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

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

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

	dependencies {
		compile gradleApi()
		groovy localGroovy()
	}

	configurations.archives.artifacts.clear()
}

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

168 169
	// As of Spring 4.0, spring-core includes asm 4.1 and repackages cglib 3.0, inlining
	// both into the spring-core jar. cglib 3.0 itself depends on asm 4, and is therefore
170
	// further transformed by the JarJar task to depend on org.springframework.asm; this
171
	// avoids including two different copies of asm unnecessarily.
P
Phillip Webb 已提交
172
	def cglibVersion = "3.0"
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191

	configurations {
		jarjar
		cglib
	}

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

	dependencies {
203 204
		cglib("cglib:cglib:${cglibVersion}@jar")
		jarjar("com.googlecode.jarjar:jarjar:1.3")
205

P
Phillip Webb 已提交
206
		compile(files(cglibRepackJar))
207
		compile("commons-logging:commons-logging:1.1.1")
208
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
209
		optional("net.sf.jopt-simple:jopt-simple:3.0")
210
		optional("log4j:log4j:1.2.17")
P
Phillip Webb 已提交
211
		testCompile("xmlunit:xmlunit:1.3")
P
Phillip Webb 已提交
212 213 214
		testCompile("org.codehaus.woodstox:wstx-asl:3.2.7") {
			exclude group: "stax", module: "stax-api"
		}
215 216 217
	}

	jar {
218
		// inline repackaged cglib classes directly into the spring-core jar
219 220
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
221
			include "org/springframework/cglib/**"
222 223
		}
	}
C
Chris Beams 已提交
224 225
}

P
Phillip Webb 已提交
226 227
project("spring-beans") {
	description = "Spring Beans"
228

229
	dependencies {
230 231
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
232
		provided("javax.el:javax.el-api:2.2.4")
233 234
		provided("javax.inject:javax.inject:1")
		testCompile("log4j:log4j:1.2.17")
235
	}
C
Chris Beams 已提交
236 237
}

P
Phillip Webb 已提交
238 239
project("spring-aop") {
	description = "Spring AOP"
240

241
	dependencies {
242 243 244
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
		compile(project(":spring-beans"))
245
		compile("aopalliance:aopalliance:1.0")
246 247 248
		optional("com.jamonapi:jamon:2.4")
		optional("commons-pool:commons-pool:1.5.3")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
249
	}
C
Chris Beams 已提交
250 251
}

P
Phillip Webb 已提交
252 253
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
254

255
	dependencies {
256
		compile(project(":spring-core"))
257
	}
C
Chris Beams 已提交
258 259
}

P
Phillip Webb 已提交
260 261
project("spring-instrument") {
	description = "Spring Instrument"
262

263
	dependencies {
264
		compile(project(":spring-core"))
265
	}
266

267
	jar {
P
Phillip Webb 已提交
268 269
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
270
	}
C
Chris Beams 已提交
271 272
}

P
Phillip Webb 已提交
273 274
project("spring-instrument-tomcat") {
	description = "Spring Instrument Tomcat"
275

276
	dependencies {
277
		provided("org.apache.tomcat:catalina:6.0.16")
278
	}
C
Chris Beams 已提交
279 280
}

P
Phillip Webb 已提交
281 282
project("spring-context") {
	description = "Spring Context"
283

284
	dependencies {
285
		optional(project(":spring-instrument"))
286 287 288 289 290
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
291 292
		optional("javax.ejb:ejb-api:3.0")
		optional("javax.inject:javax.inject:1")
293
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0-b06")
294
		optional("org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1")
295
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
296
		optional("org.beanshell:bsh:2.0b4")
297 298
		optional("org.codehaus.groovy:groovy-all:1.8.9")
		optional("org.jruby:jruby:1.7.2")
299
		optional("joda-time:joda-time:2.2")
300
		optional("org.slf4j:slf4j-api:${slf4jVersion}")
301
		optional("javax.validation:validation-api:1.0.0.GA")
302
		optional("org.hibernate:hibernate-validator:4.3.0.Final")
303 304
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
		optional("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1")
305
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
306
		testCompile("javax.inject:javax.inject-tck:1")
307 308 309
	}

	test {
P
Phillip Webb 已提交
310
		jvmArgs = ["-disableassertions:org.aspectj.weaver.UnresolvedType"] // SPR-7989
311
	}
C
Chris Beams 已提交
312 313
}

P
Phillip Webb 已提交
314 315
project("spring-tx") {
	description = "Spring Transaction"
316

317
	dependencies {
318 319
		optional(project(":spring-context")) // for JCA, @EnableTransactionManagement
		optional(project(":spring-aop"))
320 321
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
322
		compile("aopalliance:aopalliance:1.0")
323 324
		provided("com.ibm.websphere:uow:6.0.2.17")
		optional("javax.resource:connector-api:1.5")
325
		optional("javax.transaction:javax.transaction-api:1.2-b03")
326
		optional("javax.ejb:ejb-api:3.0")
327
		testCompile("org.eclipse.persistence:javax.persistence:2.0.0")
328
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
329
	}
C
Chris Beams 已提交
330 331
}

P
Phillip Webb 已提交
332 333 334
project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"
335 336 337 338 339 340 341 342

	compileTestJava {
		// necessary to avoid java.lang.VerifyError on jibx compilation
		// see http://jira.codehaus.org/browse/JIBX-465
		sourceCompatibility=1.6
		targetCompatibility=1.6
	}

343
	dependencies {
344 345
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
346
		testCompile(project(":spring-context"))
347 348 349
		optional("com.thoughtworks.xstream:xstream:1.4.4")
		optional("org.jibx:jibx-run:1.2.5")
		optional("org.apache.xmlbeans:xmlbeans:2.6.0")
350
		optional("org.codehaus.castor:castor-xml:1.3.2")
351
		testCompile("org.codehaus.jettison:jettison:1.0.1")
P
Phillip Webb 已提交
352
		testCompile("xmlunit:xmlunit:1.3")
353
		testCompile("xmlpull:xmlpull:1.1.3.4a")
354 355 356 357
		testCompile(files(genCastor.classesDir).builtBy(genCastor))
		testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
		testCompile(files(genXmlbeans.classesDir).builtBy(genXmlbeans))
	}
C
Chris Beams 已提交
358 359
}

P
Phillip Webb 已提交
360 361
project("spring-jms") {
	description = "Spring JMS"
362

363
	dependencies {
364 365 366 367 368
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
		compile(project(":spring-tx"))
369
		optional(project(":spring-oxm"))
370
		compile("aopalliance:aopalliance:1.0")
371 372 373
		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")
374 375
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.0")
376
	}
C
Chris Beams 已提交
377 378
}

P
Phillip Webb 已提交
379 380
project("spring-jdbc") {
	description = "Spring JDBC"
381

382
	dependencies {
383 384
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
385
		optional(project(":spring-context")) // for JndiDataSourceLookup
386
		compile(project(":spring-tx"))
387 388 389 390 391 392
		optional("c3p0:c3p0:0.9.1.2")
		optional("hsqldb:hsqldb:${hsqldbVersion}")
		optional("com.h2database:h2:1.0.71")
		optional("org.apache.derby:derby:10.5.3.0_1")
		optional("org.apache.derby:derbyclient:10.5.3.0_1")
		optional("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1")
393
	}
C
Chris Beams 已提交
394 395
}

P
Phillip Webb 已提交
396 397
project("spring-context-support") {
	description = "Spring Context Support"
398

399
	dependencies {
400 401 402
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
403 404
		optional(project(":spring-jdbc")) // for Quartz support
		optional(project(":spring-tx")) // for Quartz support
405 406 407 408
		optional("javax.mail:mail:1.4.7")
		optional("javax.cache:cache-api:0.6")
		optional("net.sf.ehcache:ehcache-core:2.6.5")
		optional("org.quartz-scheduler:quartz:1.8.6") {
409 410
			exclude group: "org.slf4j", module: "slf4j-log4j12"
		}
411
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
412
		optional("org.apache.velocity:velocity:1.7")
413
		optional("org.freemarker:freemarker:2.3.19")
414
		optional("com.lowagie:itext:2.1.7")
415
		optional("net.sf.jasperreports:jasperreports:5.1.0")
416 417
		optional("org.slf4j:slf4j-api:${slf4jVersion}")
		provided("javax.activation:activation:1.1")
418
		testCompile("org.apache.poi:poi:3.9")
419 420
		testCompile("commons-beanutils:commons-beanutils:1.8.0") // for Velocity/JasperReports
		testCompile("commons-digester:commons-digester:1.8.1") // for Velocity/JasperReports
421
		testCompile("hsqldb:hsqldb:${hsqldbVersion}")
422 423 424
	}

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

P
Phillip Webb 已提交
428 429
project("spring-web") {
	description = "Spring Web"
430

431
	dependencies {
432 433 434 435
		compile(project(":spring-core"))
		compile(project(":spring-beans")) // for MultiPartFilter
		compile(project(":spring-aop")) // for JaxWsPortProxyFactoryBean
		compile(project(":spring-context"))
436
		optional(project(":spring-oxm")) // for MarshallingHttpMessageConverter
437
		compile("aopalliance:aopalliance:1.0")
438
		provided("javax.el:javax.el-api:2.2.4")
439
		provided("com.sun.faces:jsf-api:2.1.7")
440 441 442 443
		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")
444
		optional("com.caucho:hessian:4.0.7")
445
		optional("rome:rome:1.0")
446
		optional("commons-fileupload:commons-fileupload:1.3")
447
		optional("org.apache.httpcomponents:httpclient:4.2")
448 449
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.0")
450 451
		optional("taglibs:standard:1.1.2")
		optional("org.eclipse.jetty:jetty-servlet:8.1.5.v20120716") {
P
Phillip Webb 已提交
452
			exclude group: "org.eclipse.jetty.orbit", module: "javax.servlet"
453
		}
454
		optional("org.eclipse.jetty:jetty-server:8.1.5.v20120716") {
P
Phillip Webb 已提交
455
			exclude group: "org.eclipse.jetty.orbit", module: "javax.servlet"
456
		}
457
		optional("log4j:log4j:1.2.17")
458
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
P
Phillip Webb 已提交
459
		testCompile("xmlunit:xmlunit:1.3")
460 461 462
	}

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

466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495
project("spring-websocket") {
	description = "Spring WebSocket support"

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		optional("javax.servlet:javax.servlet-api:3.1-b09")
		optional("javax.websocket:javax.websocket-api:1.0-rc5")
		optional("org.apache.tomcat:tomcat-websocket:8.0-SNAPSHOT") {
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
		optional("org.glassfish.tyrus:tyrus-websocket-core:1.0-SNAPSHOT")
		optional("org.glassfish.tyrus:tyrus-container-servlet:1.0-SNAPSHOT")
		optional("org.eclipse.jetty:jetty-webapp:9.0.1.v20130408") {
			exclude group: "org.eclipse.jetty.orbit", module: "javax.servlet"
		}
		optional("org.eclipse.jetty.websocket:websocket-server:9.0.1.v20130408")
		optional("org.eclipse.jetty.websocket:websocket-client:9.0.1.v20130408")
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.0") // required for SockJS support currently
	}

	repositories {
		maven { url "https://maven.java.net/content/groups/public/" } // javax.websocket-*
		maven { url "https://repository.apache.org/content/repositories/snapshots" } // tomcat-websocket-* snapshots
		maven { url "https://maven.java.net/content/repositories/snapshots" } // tyrus snapshots
	}
}

P
Phillip Webb 已提交
496 497
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
498

499 500
	dependencies {
		compile("aopalliance:aopalliance:1.0")
501 502 503 504 505 506
		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")
507
		optional("javax.jdo:jdo-api:3.0")
508
		provided("javax.servlet:javax.servlet-api:3.0.1")
509 510
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
511
		testCompile("hsqldb:hsqldb:${hsqldbVersion}")
512 513
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
514 515
		optional(project(":spring-aop"))
		optional(project(":spring-context"))
516 517
		compile(project(":spring-tx"))
		compile(project(":spring-jdbc"))
518
		optional(project(":spring-web"))
519
	}
C
Chris Beams 已提交
520 521
}

P
Phillip Webb 已提交
522 523
project("spring-orm-hibernate4") {
	description = "Spring Object/Relational Mapping - Hibernate 4 support"
524
	merge.into = project(":spring-orm")
525

526
	dependencies {
527 528
		provided(project(":spring-tx"))
		provided(project(":spring-jdbc"))
529 530
		optional("org.hibernate:hibernate-core:4.2.1.Final")
		optional("org.hibernate:hibernate-entitymanager:4.2.1.Final")
531
		optional(project(":spring-web"))
532
		optional("javax.servlet:javax.servlet-api:3.0.1")
533
	}
534 535
}

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

539
	dependencies {
540 541 542 543 544
		compile(project(":spring-core"))
		compile(project(":spring-expression"))
		compile(project(":spring-beans"))
		compile(project(":spring-web"))
		compile(project(":spring-context"))
545 546 547 548 549 550 551
		optional(project(":spring-context-support")) // for Velocity support
		optional(project(":spring-oxm")) // for MarshallingView
		optional("org.apache.tiles:tiles-api:2.1.2")
		optional("org.apache.tiles:tiles-core:2.1.2")
		optional("org.apache.tiles:tiles-jsp:2.1.2")
		optional("org.apache.tiles:tiles-servlet:2.1.2")
		optional("net.sourceforge.jexcelapi:jxl:2.6.3")
552
		optional("org.apache.poi:poi:3.9")
553
		optional("com.lowagie:itext:2.1.7")
554
		optional("net.sf.jasperreports:jasperreports:5.1.0") {
555
			exclude group: "xml-apis", module: "xml-apis"
556
		}
557
		optional("rome:rome:1.0")
558 559
		optional("org.apache.velocity:velocity:1.7")
		optional("velocity-tools:velocity-tools-view:1.4")
560 561 562
		optional("org.freemarker:freemarker:2.3.19")
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.0")
563 564 565
		provided("javax.servlet:jstl:1.2")
		provided("javax.servlet:javax.servlet-api:3.0.1")
		provided("javax.servlet.jsp:jsp-api:2.1")
566 567 568
		testCompile(project(":spring-aop"))
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("rhino:js:1.7R1")
P
Phillip Webb 已提交
569
		testCompile("xmlunit:xmlunit:1.3")
570
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
571
			exclude group: "xml-apis", module: "xml-apis"
572 573
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
574 575 576
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
577
		}
578 579 580 581 582 583 584 585 586 587 588
		testCompile("org.eclipse.jetty:jetty-servlet:8.1.5.v20120716") {
			exclude group: "org.eclipse.jetty.orbit", module: "javax.servlet"
		}
		testCompile("org.eclipse.jetty:jetty-server:8.1.5.v20120716") {
			exclude group: "org.eclipse.jetty.orbit", module: "javax.servlet"
		}
		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")
		testCompile("org.apache.httpcomponents:httpclient:4.2")
589 590 591
	}

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

P
Phillip Webb 已提交
595 596
project("spring-webmvc-tiles3") {
	description = "Spring Framework Tiles3 Integration"
597
	merge.into = project(":spring-webmvc")
598

599
	dependencies {
600 601
		provided(project(":spring-context"))
		provided(project(":spring-web"))
602
		provided("javax.el:javax.el-api:2.2.4")
603 604 605 606 607
		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 已提交
608
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
609
		}
610
		optional("org.apache.tiles:tiles-servlet:3.0.1") {
P
Phillip Webb 已提交
611
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
612
		}
613
		optional("org.apache.tiles:tiles-jsp:3.0.1") {
P
Phillip Webb 已提交
614
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
615 616 617
		}
		optional("org.apache.tiles:tiles-extras:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
618
		}
619
		optional("org.apache.tiles:tiles-el:3.0.1") {
P
Phillip Webb 已提交
620
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
621
		}
622 623
		provided("javax.servlet:javax.servlet-api:3.0.1")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
624
	}
625 626
}

P
Phillip Webb 已提交
627 628
project("spring-webmvc-portlet") {
	description = "Spring Web Portlet"
629

630
	dependencies {
631
		provided("javax.servlet:javax.servlet-api:3.0.1")
632
		provided("javax.portlet:portlet-api:2.0")
633 634 635 636 637
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		compile(project(":spring-webmvc"))
638
		optional("commons-fileupload:commons-fileupload:1.2")
639 640 641
	}

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

P
Phillip Webb 已提交
645 646
project("spring-test") {
	description = "Spring TestContext Framework"
647

648
	dependencies {
649
		compile(project(":spring-core"))
650 651 652 653 654 655 656 657
		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"))
		optional(project(":spring-webmvc-portlet"), )
658 659
		optional("junit:junit:${junitVersion}")
		optional("org.testng:testng:6.5.2")
660
		optional("javax.servlet:javax.servlet-api:3.0.1")
661 662
		optional("javax.servlet.jsp:jsp-api:2.1")
		optional("javax.portlet:portlet-api:2.0")
663
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
664
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
665
		testCompile("org.hibernate:hibernate-core:3.6.9.Final")
666 667 668 669 670
		provided("javax.inject:javax.inject:1")
		provided("javax.activation:activation:1.1")
		provided("javax.servlet:jstl:1.2")
		testCompile "org.slf4j:slf4j-jcl:${slf4jVersion}"
		testCompile("hsqldb:hsqldb:${hsqldbVersion}")
671
	}
672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690

	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.
		testReport true
	}

	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 已提交
691 692
}

P
Phillip Webb 已提交
693 694
project("spring-test-mvc") {
	description = "Spring Test MVC Framework"
695
	merge.into = project(":spring-test")
696

697
	dependencies {
698
		optional(project(":spring-context"))
699
		provided(project(":spring-webmvc"))
700 701 702
		provided("javax.servlet:javax.servlet-api:3.0.1")
		optional("org.hamcrest:hamcrest-core:1.3")
		optional("com.jayway.jsonpath:json-path:0.8.1")
P
Phillip Webb 已提交
703
		optional("xmlunit:xmlunit:1.3")
704
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
705 706
		testCompile("javax.servlet:jstl:1.2")
		testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
707 708
		testCompile("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		testCompile("com.fasterxml.jackson.core:jackson-databind:2.2.0")
709
		testCompile(project(":spring-context-support"))
710 711 712
		testCompile(project(":spring-oxm"))
		testCompile("com.thoughtworks.xstream:xstream:1.3.1")
		testCompile("rome:rome:1.0")
713
		testCompile("javax.activation:activation:1.1")
714
		testCompile("javax.mail:mail:1.4.7")
715 716
		testCompile("org.apache.tiles:tiles-request-api:1.0.1")
		testCompile("org.apache.tiles:tiles-api:3.0.1")
717
		testCompile("org.apache.tiles:tiles-core:3.0.1") {
P
Phillip Webb 已提交
718
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
719 720
		}
		testCompile("org.apache.tiles:tiles-servlet:3.0.1") {
P
Phillip Webb 已提交
721
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
722 723
		}
	}
R
Rob Winch 已提交
724 725
}

P
Phillip Webb 已提交
726 727 728
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
729

730
	dependencies {
731 732 733 734 735 736
		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
737
		aspects(project(":spring-orm"))
738
		provided("org.eclipse.persistence:javax.persistence:2.0.0")
739
		testCompile("javax.mail:mail:1.4.7")
740
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
C
Chris Beams 已提交
741
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
742 743 744 745
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
		testCompile(project(":spring-core")) // for CodeStyleAspect
		compile(project(":spring-beans")) // for "p" namespace visibility
		testCompile(project(":spring-test"))
746
	}
747

748
	eclipse.project {
P
Phillip Webb 已提交
749
		natures += "org.eclipse.ajdt.ui.ajnature"
750
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
751
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
752
	}
C
Chris Beams 已提交
753 754
}

755
configure(rootProject) {
P
Phillip Webb 已提交
756
	description = "Spring Framework"
757

P
Phillip Webb 已提交
758
	apply plugin: "docbook-reference"
759
	apply plugin: "groovy"
760
	// apply plugin: "detect-split-packages"
761 762 763
	apply from: "${gradleScriptDir}/jdiff.gradle"

	reference {
P
Phillip Webb 已提交
764 765
		sourceDir = file("src/reference/docbook")
		pdfFilename = "spring-framework-reference.pdf"
766 767
	}

768 769 770 771 772
	// 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")
	// }
773

C
Chris Beams 已提交
774
	// don't publish the default jar for the root project
775 776 777
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
778 779 780 781 782 783 784 785 786 787
		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"))
788
		testCompile(project(":spring-orm"))
789
		testCompile("org.hibernate:hibernate-core:4.2.1.Final")
790
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
791 792 793 794 795
		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}")
		testCompile("hsqldb:hsqldb:${hsqldbVersion}")
796 797 798
	}

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

803 804 805 806 807
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
808 809 810
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
811
		options.overview = "src/api/overview.html"
812
		options.stylesheetFile = file("src/api/stylesheet.css")
813
		options.splitIndex = true
C
Chris Beams 已提交
814
		options.links(project.ext.javadocLinks)
815
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
816

817 818 819
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
820

P
Phillip Webb 已提交
821
		maxMemory = "1024m"
C
Chris Beams 已提交
822
		destinationDir = new File(buildDir, "api")
823 824 825 826 827 828 829 830 831 832 833 834

		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 })
		}
835 836 837
	}

	task docsZip(type: Zip) {
P
Phillip Webb 已提交
838 839 840
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
841 842 843
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
844 845
		from("src/dist") {
			include "changelog.txt"
846 847 848
		}

		from (api) {
849
			into "javadoc-api"
850 851 852
		}

		from (reference) {
853
			into "spring-framework-reference"
854 855 856 857
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
858 859 860
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
861 862 863 864 865 866 867
		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 已提交
868
				it.path.endsWith("META-INF/spring.schemas")
869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885
			}?.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 已提交
886 887 888
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
889 890 891 892 893
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

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

P
Phillip Webb 已提交
894 895 896 897
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
898
			into "${baseDir}"
P
Phillip Webb 已提交
899
			expand(copyright: new Date().format("yyyy"), version: project.version)
900 901 902 903 904 905 906 907 908 909 910 911 912
		}

		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 已提交
913
				if (subproject.tasks.findByPath("sourcesJar")) {
914 915
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
916
				if (subproject.tasks.findByPath("javadocJar")) {
917 918 919 920 921 922 923 924 925
					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 已提交
926 927 928
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
929 930 931 932 933 934 935 936 937 938
		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 ->
939 940
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961
						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 已提交
962 963
		description = "Generates gradlew[.bat] scripts"
		gradleVersion = "1.3"
964 965 966 967

		doLast() {
			def gradleOpts = "-XX:MaxPermSize=1024m -Xmx1024m"
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
968
			File wrapperFile = file("gradlew")
969 970
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
971
			File wrapperBatFile = file("gradlew.bat")
972 973 974 975
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
976

977
}
978 979 980 981 982 983 984 985 986 987 988 989

/*
 * 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-")) {
990
			return version.replace('BUILD', qualifier)
991 992
		}
	}
993
	return version
994
}