build.gradle 33.0 KB
Newer Older
1
buildscript {
2
	repositories {
P
Phillip Webb 已提交
3
		maven { url "http://repo.springsource.org/plugins-release" }
4 5
	}
	dependencies {
6
		classpath("org.springframework.build.gradle:propdeps-plugin:0.0.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
	group = "org.springframework"
	version = qualifyVersionIfNecessary(version)
14

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

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

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

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

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

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

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

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

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

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

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

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

	configurations.archives.artifacts.clear()
}

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

167 168
	// 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
169
	// further transformed by the JarJar task to depend on org.springframework.asm; this
170
	// avoids including two different copies of asm unnecessarily.
P
Phillip Webb 已提交
171
	def cglibVersion = "3.0"
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190

	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 已提交
191 192
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
					// as mentioned above, transform cglib"s internal asm dependencies from
193 194
					// org.objectweb.asm => org.springframework.asm. Doing this counts on the
					// the fact that Spring and cglib depend on the same version of asm!
P
Phillip Webb 已提交
195
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
196 197 198 199 200 201
				}
			}
		}
	}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

308 309 310
	// pick up RmiInvocationWrapperRTD.xml in src/main
	sourceSets.main.resources.srcDirs += "src/main/java"

311
	test {
P
Phillip Webb 已提交
312
		jvmArgs = ["-disableassertions:org.aspectj.weaver.UnresolvedType"] // SPR-7989
313
	}
314 315 316 317 318 319 320 321 322 323 324
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		optional(project(":spring-websocket"))
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.0")
R
Rossen Stoyanchev 已提交
325 326
		optional("org.projectreactor:reactor-core:1.0.0.M1")
		optional("org.projectreactor:reactor-tcp:1.0.0.M1")
327 328 329 330 331
		optional("com.lmax:disruptor:3.1.1")
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
		testCompile("javax.inject:javax.inject-tck:1")
	}

332
	repositories {
R
Rossen Stoyanchev 已提交
333
		maven { url 'http://repo.springsource.org/libs-milestone' } // reactor
334
	}
C
Chris Beams 已提交
335 336
}

P
Phillip Webb 已提交
337 338
project("spring-tx") {
	description = "Spring Transaction"
339

340
	dependencies {
341 342
		optional(project(":spring-context")) // for JCA, @EnableTransactionManagement
		optional(project(":spring-aop"))
343 344
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
345
		compile("aopalliance:aopalliance:1.0")
346 347
		provided("com.ibm.websphere:uow:6.0.2.17")
		optional("javax.resource:connector-api:1.5")
348
		optional("javax.transaction:javax.transaction-api:1.2-b03")
349
		optional("javax.ejb:ejb-api:3.0")
350
		testCompile("org.eclipse.persistence:javax.persistence:2.0.0")
351
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
352
	}
C
Chris Beams 已提交
353 354
}

P
Phillip Webb 已提交
355 356 357
project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"
358 359 360 361 362 363 364 365

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

366
	dependencies {
367 368
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
369
		testCompile(project(":spring-context"))
370 371 372
		optional("com.thoughtworks.xstream:xstream:1.4.4")
		optional("org.jibx:jibx-run:1.2.5")
		optional("org.apache.xmlbeans:xmlbeans:2.6.0")
373
		optional("org.codehaus.castor:castor-xml:1.3.2")
374
		testCompile("org.codehaus.jettison:jettison:1.0.1")
P
Phillip Webb 已提交
375
		testCompile("xmlunit:xmlunit:1.3")
376
		testCompile("xmlpull:xmlpull:1.1.3.4a")
377 378 379 380
		testCompile(files(genCastor.classesDir).builtBy(genCastor))
		testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
		testCompile(files(genXmlbeans.classesDir).builtBy(genXmlbeans))
	}
C
Chris Beams 已提交
381 382
}

P
Phillip Webb 已提交
383 384
project("spring-jms") {
	description = "Spring JMS"
385

386
	dependencies {
387 388 389 390 391
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
		compile(project(":spring-tx"))
392
		optional(project(":spring-oxm"))
393
		compile("aopalliance:aopalliance:1.0")
394 395 396
		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")
397 398
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.0")
399
	}
C
Chris Beams 已提交
400 401
}

P
Phillip Webb 已提交
402 403
project("spring-jdbc") {
	description = "Spring JDBC"
404

405
	dependencies {
406 407
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
408
		optional(project(":spring-context")) // for JndiDataSourceLookup
409
		compile(project(":spring-tx"))
410 411 412 413 414 415
		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")
416
	}
C
Chris Beams 已提交
417 418
}

P
Phillip Webb 已提交
419 420
project("spring-context-support") {
	description = "Spring Context Support"
421

422
	dependencies {
423 424 425
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
426 427
		optional(project(":spring-jdbc")) // for Quartz support
		optional(project(":spring-tx")) // for Quartz support
428 429 430 431
		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") {
432 433
			exclude group: "org.slf4j", module: "slf4j-log4j12"
		}
434
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
435
		optional("org.apache.velocity:velocity:1.7")
436
		optional("org.freemarker:freemarker:2.3.19")
437
		optional("com.lowagie:itext:2.1.7")
438
		optional("net.sf.jasperreports:jasperreports:5.1.0")
439 440
		optional("org.slf4j:slf4j-api:${slf4jVersion}")
		provided("javax.activation:activation:1.1")
441
		testCompile("org.apache.poi:poi:3.9")
442 443
		testCompile("commons-beanutils:commons-beanutils:1.8.0") // for Velocity/JasperReports
		testCompile("commons-digester:commons-digester:1.8.1") // for Velocity/JasperReports
444
		testCompile("hsqldb:hsqldb:${hsqldbVersion}")
445 446 447
	}

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

P
Phillip Webb 已提交
451 452
project("spring-web") {
	description = "Spring Web"
453

454
	dependencies {
455 456 457 458
		compile(project(":spring-core"))
		compile(project(":spring-beans")) // for MultiPartFilter
		compile(project(":spring-aop")) // for JaxWsPortProxyFactoryBean
		compile(project(":spring-context"))
459
		optional(project(":spring-oxm")) // for MarshallingHttpMessageConverter
460
		compile("aopalliance:aopalliance:1.0")
461
		provided("javax.el:javax.el-api:2.2.4")
462
		provided("com.sun.faces:jsf-api:2.1.7")
463 464 465 466
		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")
467
		optional("com.caucho:hessian:4.0.7")
468
		optional("rome:rome:1.0")
469
		optional("commons-fileupload:commons-fileupload:1.3")
470
		optional("org.apache.httpcomponents:httpclient:4.2")
471 472
		optional("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.0")
473 474
		optional("taglibs:standard:1.1.2")
		optional("org.eclipse.jetty:jetty-servlet:8.1.5.v20120716") {
P
Phillip Webb 已提交
475
			exclude group: "org.eclipse.jetty.orbit", module: "javax.servlet"
476
		}
477
		optional("org.eclipse.jetty:jetty-server:8.1.5.v20120716") {
P
Phillip Webb 已提交
478
			exclude group: "org.eclipse.jetty.orbit", module: "javax.servlet"
479
		}
480
		optional("log4j:log4j:1.2.17")
481
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
P
Phillip Webb 已提交
482
		testCompile("xmlunit:xmlunit:1.3")
483 484 485
	}

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

489
project("spring-websocket") {
490
	description = "Spring WebSocket"
491 492 493 494 495 496

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		optional("javax.servlet:javax.servlet-api:3.1-b09")
497
		optional("javax.websocket:javax.websocket-api:1.0")
498 499 500 501
		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"
		}
502 503
		optional("org.glassfish.tyrus:tyrus-websocket-core:1.0")
		optional("org.glassfish.tyrus:tyrus-container-servlet:1.0")
504
		optional("org.eclipse.jetty:jetty-webapp:9.0.4.v20130625") {
505 506
			exclude group: "org.eclipse.jetty.orbit", module: "javax.servlet"
		}
507 508
		optional("org.eclipse.jetty.websocket:websocket-server:9.0.4.v20130625")
		optional("org.eclipse.jetty.websocket:websocket-client:9.0.4.v20130625")
509 510 511 512 513
		optional("com.fasterxml.jackson.core:jackson-databind:2.2.0") // required for SockJS support currently
	}

	repositories {
		maven { url "https://repository.apache.org/content/repositories/snapshots" } // tomcat-websocket-* snapshots
514
		maven { url "https://maven.java.net/content/repositories/releases" } //  javax.websocket, tyrus
515 516 517
	}
}

P
Phillip Webb 已提交
518 519
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
520

521 522
	dependencies {
		compile("aopalliance:aopalliance:1.0")
523 524 525 526 527 528
		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")
529
		optional("javax.jdo:jdo-api:3.0")
530
		provided("javax.servlet:javax.servlet-api:3.0.1")
531 532
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("commons-dbcp:commons-dbcp:1.2.2")
533
		testCompile("hsqldb:hsqldb:${hsqldbVersion}")
534 535
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
536 537
		optional(project(":spring-aop"))
		optional(project(":spring-context"))
538 539
		compile(project(":spring-tx"))
		compile(project(":spring-jdbc"))
540
		optional(project(":spring-web"))
541
	}
C
Chris Beams 已提交
542 543
}

P
Phillip Webb 已提交
544 545
project("spring-orm-hibernate4") {
	description = "Spring Object/Relational Mapping - Hibernate 4 support"
546
	merge.into = project(":spring-orm")
547

548
	dependencies {
549 550
		provided(project(":spring-tx"))
		provided(project(":spring-jdbc"))
551 552
		optional("org.hibernate:hibernate-core:4.2.1.Final")
		optional("org.hibernate:hibernate-entitymanager:4.2.1.Final")
553
		optional(project(":spring-web"))
554
		optional("javax.servlet:javax.servlet-api:3.0.1")
555
	}
556 557
}

P
Phillip Webb 已提交
558 559
project("spring-webmvc") {
	description = "Spring Web MVC"
560

561
	dependencies {
562 563 564 565 566
		compile(project(":spring-core"))
		compile(project(":spring-expression"))
		compile(project(":spring-beans"))
		compile(project(":spring-web"))
		compile(project(":spring-context"))
567 568 569 570 571 572 573
		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")
574
		optional("org.apache.poi:poi:3.9")
575
		optional("com.lowagie:itext:2.1.7")
576
		optional("net.sf.jasperreports:jasperreports:5.1.0") {
577
			exclude group: "xml-apis", module: "xml-apis"
578
		}
579
		optional("rome:rome:1.0")
580 581
		optional("org.apache.velocity:velocity:1.7")
		optional("velocity-tools:velocity-tools-view:1.4")
582 583 584
		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")
585 586 587
		provided("javax.servlet:jstl:1.2")
		provided("javax.servlet:javax.servlet-api:3.0.1")
		provided("javax.servlet.jsp:jsp-api:2.1")
588 589 590
		testCompile(project(":spring-aop"))
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
		testCompile("rhino:js:1.7R1")
P
Phillip Webb 已提交
591
		testCompile("xmlunit:xmlunit:1.3")
592
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
593
			exclude group: "xml-apis", module: "xml-apis"
594 595
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
596 597 598
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
599
		}
600 601 602 603 604 605 606 607 608 609 610
		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")
611 612 613
	}

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

P
Phillip Webb 已提交
617 618
project("spring-webmvc-tiles3") {
	description = "Spring Framework Tiles3 Integration"
619
	merge.into = project(":spring-webmvc")
620

621
	dependencies {
622 623
		provided(project(":spring-context"))
		provided(project(":spring-web"))
624
		provided("javax.el:javax.el-api:2.2.4")
625 626 627 628 629
		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 已提交
630
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
631
		}
632
		optional("org.apache.tiles:tiles-servlet:3.0.1") {
P
Phillip Webb 已提交
633
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
634
		}
635
		optional("org.apache.tiles:tiles-jsp:3.0.1") {
P
Phillip Webb 已提交
636
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
637 638 639
		}
		optional("org.apache.tiles:tiles-extras:3.0.1") {
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
640
		}
641
		optional("org.apache.tiles:tiles-el:3.0.1") {
P
Phillip Webb 已提交
642
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
643
		}
644 645
		provided("javax.servlet:javax.servlet-api:3.0.1")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
646
	}
647 648
}

P
Phillip Webb 已提交
649 650
project("spring-webmvc-portlet") {
	description = "Spring Web Portlet"
651

652
	dependencies {
653
		provided("javax.servlet:javax.servlet-api:3.0.1")
654
		provided("javax.portlet:portlet-api:2.0")
655 656 657 658 659
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		compile(project(":spring-webmvc"))
660
		optional("commons-fileupload:commons-fileupload:1.2")
661 662 663
	}

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

P
Phillip Webb 已提交
667 668
project("spring-test") {
	description = "Spring TestContext Framework"
669

670
	dependencies {
671
		compile(project(":spring-core"))
672 673 674 675 676 677 678 679
		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"), )
680
		optional("junit:junit:${junitVersion}")
S
Sam Brannen 已提交
681
		optional("org.testng:testng:6.8.5")
682
		optional("javax.servlet:javax.servlet-api:3.0.1")
683 684
		optional("javax.servlet.jsp:jsp-api:2.1")
		optional("javax.portlet:portlet-api:2.0")
685
		optional("org.eclipse.persistence:javax.persistence:2.0.0")
686
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
687
		testCompile("org.hibernate:hibernate-core:3.6.9.Final")
688 689 690 691 692
		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}")
693
	}
694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712

	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 已提交
713 714
}

P
Phillip Webb 已提交
715 716
project("spring-test-mvc") {
	description = "Spring Test MVC Framework"
717
	merge.into = project(":spring-test")
718

719
	dependencies {
720
		optional(project(":spring-context"))
721
		provided(project(":spring-webmvc"))
722 723 724
		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 已提交
725
		optional("xmlunit:xmlunit:1.3")
726
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
727 728
		testCompile("javax.servlet:jstl:1.2")
		testCompile("org.hibernate:hibernate-validator:4.3.0.Final")
729 730
		testCompile("org.codehaus.jackson:jackson-mapper-asl:1.9.12")
		testCompile("com.fasterxml.jackson.core:jackson-databind:2.2.0")
731
		testCompile(project(":spring-context-support"))
732 733 734
		testCompile(project(":spring-oxm"))
		testCompile("com.thoughtworks.xstream:xstream:1.3.1")
		testCompile("rome:rome:1.0")
735
		testCompile("javax.activation:activation:1.1")
736
		testCompile("javax.mail:mail:1.4.7")
737 738
		testCompile("org.apache.tiles:tiles-request-api:1.0.1")
		testCompile("org.apache.tiles:tiles-api:3.0.1")
739
		testCompile("org.apache.tiles:tiles-core:3.0.1") {
P
Phillip Webb 已提交
740
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
741 742
		}
		testCompile("org.apache.tiles:tiles-servlet:3.0.1") {
P
Phillip Webb 已提交
743
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
744 745
		}
	}
R
Rob Winch 已提交
746 747
}

P
Phillip Webb 已提交
748 749 750
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
751

752
	dependencies {
753 754 755 756 757 758
		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
759
		aspects(project(":spring-orm"))
760
		provided("org.eclipse.persistence:javax.persistence:2.0.0")
761
		testCompile("javax.mail:mail:1.4.7")
762
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
C
Chris Beams 已提交
763
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
764 765 766 767
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
		testCompile(project(":spring-core")) // for CodeStyleAspect
		compile(project(":spring-beans")) // for "p" namespace visibility
		testCompile(project(":spring-test"))
768
	}
769

770
	eclipse.project {
P
Phillip Webb 已提交
771
		natures += "org.eclipse.ajdt.ui.ajnature"
772
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.
P
Phillip Webb 已提交
773
				BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
774
	}
C
Chris Beams 已提交
775 776
}

777
configure(rootProject) {
P
Phillip Webb 已提交
778
	description = "Spring Framework"
779

P
Phillip Webb 已提交
780
	apply plugin: "docbook-reference"
781
	apply plugin: "groovy"
782
	// apply plugin: "detect-split-packages"
783 784 785
	apply from: "${gradleScriptDir}/jdiff.gradle"

	reference {
P
Phillip Webb 已提交
786 787
		sourceDir = file("src/reference/docbook")
		pdfFilename = "spring-framework-reference.pdf"
788 789
	}

790 791 792 793 794
	// 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")
	// }
795

C
Chris Beams 已提交
796
	// don't publish the default jar for the root project
797 798 799
	configurations.archives.artifacts.clear()

	dependencies { // for integration tests
800 801 802 803 804 805 806 807 808 809
		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"))
810
		testCompile(project(":spring-orm"))
811
		testCompile("org.hibernate:hibernate-core:4.2.1.Final")
812
		testCompile("javax.servlet:javax.servlet-api:3.0.1")
813 814 815 816 817
		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}")
818 819 820
	}

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

825 826 827 828 829
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
830 831 832
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
833
		options.overview = "src/api/overview.html"
834
		options.stylesheetFile = file("src/api/stylesheet.css")
835
		options.splitIndex = true
C
Chris Beams 已提交
836
		options.links(project.ext.javadocLinks)
837
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
838

839 840 841
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
842

P
Phillip Webb 已提交
843
		maxMemory = "1024m"
C
Chris Beams 已提交
844
		destinationDir = new File(buildDir, "api")
845 846 847 848 849 850 851 852 853 854 855 856

		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 })
		}
857 858 859
	}

	task docsZip(type: Zip) {
P
Phillip Webb 已提交
860 861 862
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
863 864 865
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
866 867
		from("src/dist") {
			include "changelog.txt"
868 869 870
		}

		from (api) {
871
			into "javadoc-api"
872 873 874
		}

		from (reference) {
875
			into "spring-framework-reference"
876 877 878 879
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
880 881 882
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
883 884 885 886 887 888 889
		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 已提交
890
				it.path.endsWith("META-INF/spring.schemas")
891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907
			}?.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 已提交
908 909 910
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
911 912 913 914 915
		description = "Builds -${classifier} archive, containing all jars and docs, " +
					"suitable for community download page."

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

P
Phillip Webb 已提交
916 917 918 919
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
920
			into "${baseDir}"
P
Phillip Webb 已提交
921
			expand(copyright: new Date().format("yyyy"), version: project.version)
922 923 924 925 926 927 928 929 930 931 932 933 934
		}

		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 已提交
935
				if (subproject.tasks.findByPath("sourcesJar")) {
936 937
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
938
				if (subproject.tasks.findByPath("javadocJar")) {
939 940 941 942 943 944 945 946 947
					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 已提交
948 949 950
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
951 952 953 954 955 956 957 958 959 960
		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 ->
961 962
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983
						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 已提交
984
		description = "Generates gradlew[.bat] scripts"
R
Rob Winch 已提交
985
		gradleVersion = "1.6"
986 987

		doLast() {
988
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
989
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
990
			File wrapperFile = file("gradlew")
991 992
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
993
			File wrapperBatFile = file("gradlew.bat")
994 995 996 997
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
998

999
}
1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011

/*
 * 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-")) {
1012
			return version.replace('BUILD', qualifier)
1013 1014
		}
	}
1015
	return version
1016
}