build.gradle 56.9 KB
Newer Older
1
buildscript {
2
	repositories {
S
Sebastien Deleuze 已提交
3
		maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
4
		maven { url "https://repo.spring.io/plugins-snapshot" }
5 6
	}
	dependencies {
S
Sam Brannen 已提交
7
		classpath("org.springframework.build.gradle:propdeps-plugin:0.0.7")
8
		classpath("org.asciidoctor:asciidoctor-gradle-plugin:1.5.3")
9
		classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0-beta-17")
10
		classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
11
		classpath("io.spring.gradle:dependency-management-plugin:1.0.0.BUILD-SNAPSHOT")
12
	}
13 14
}

15
plugins {
16
	id "org.sonarqube" version "2.2.1"
17 18
}

S
Stephane Nicoll 已提交
19 20 21 22 23 24
ext {
	linkHomepage = 'https://projects.spring.io/spring-framework'
	linkCi = 'https://build.spring.io/browse/SPR'
	linkIssue = 'https://jira.spring.io/browse/SPR'
	linkScmUrl = 'https://github.com/spring-projects/spring-framework'
	linkScmConnection = 'scm:git:git://github.com/spring-projects/spring-framework.git'
25
	linkScmDevConnection = 'scm:git:ssh://git@github.com:spring-projects/spring-framework.git'
26

27
	moduleProjects = subprojects.findAll {
28 29
		!it.name.equals('spring-build-src') && !it.name.equals('spring-framework-bom')
	}
S
Stephane Nicoll 已提交
30 31
}

C
Chris Beams 已提交
32
configure(allprojects) { project ->
33 34
	group = "org.springframework"
	version = qualifyVersionIfNecessary(version)
35

36
	ext.activationApiVersion   = "1.1.1"
37
	ext.annotationApiVersion   = "1.2"
J
Juergen Hoeller 已提交
38
	ext.aspectjVersion         = "1.9.0.BETA-5"
39
	ext.beanvalVersion         = "1.1.0.Final"
40
	ext.cacheApiVersion        = "1.0.0"
41
	ext.caffeineVersion        = "2.3.5"
42
	ext.eclipselinkVersion     = "2.6.4"
43
	ext.ehcacheVersion         = "2.10.3"
44
	ext.ehcachejcacheVersion   = "1.0.1"
45
	ext.ehcache3Version        = "3.2.0"
46
	ext.ejbApiVersion          = "3.2"
J
Juergen Hoeller 已提交
47
	ext.elApiVersion           = "3.0.1-b04"
48 49
	ext.fileuploadVersion      = "1.3.2"
	ext.freemarkerVersion      = "2.3.25-incubating"
50
	ext.groovyVersion          = "2.4.8"
51
	ext.gsonVersion            = "2.8.0"
52
	ext.hamcrestVersion        = "1.3"
53
	ext.hibernate5Version      = "5.2.7.Final"
54
	ext.hibval5Version         = "5.4.0.CR1"
55 56 57 58
	ext.hsqldbVersion          = "2.3.4"
	ext.httpasyncVersion       = "4.1.2"
	ext.httpclientVersion      = "4.5.2"
	ext.interceptorApiVersion  = "1.2"
59
	ext.jackson2Version        = "2.8.6"
60
	ext.javamailVersion        = "1.5.6"
61
	ext.jaxbVersion            = "2.2.11"
62
	ext.jaxwsVersion           = "2.2.11"
63
	ext.jcaVersion             = "1.7"
B
Brian Clozel 已提交
64
	ext.jettyVersion           = "9.4.0.v20161208"
65
	ext.jmsVersion             = "2.0.1"
66
	ext.jodaVersion            = "2.9.7"
67
	ext.jpaVersion             = "2.1.1"
68
	ext.jsfVersion             = "2.2"
69 70 71
	ext.jspVersion             = "2.3.2-b02"
	ext.jtaVersion             = "1.2"
	ext.junitVersion           = "4.12"
J
Juergen Hoeller 已提交
72 73
	ext.junitJupiterVersion    = '5.0.0-M3'
	ext.junitPlatformVersion   = '1.0.0-M3'
74
	ext.kotlinVersion          = "1.1.0-beta-17" // Also change kotlin-gradle-plugin version when upgrading
75
	ext.log4jVersion           = '2.7'
76
	ext.nettyVersion           = "4.1.7.Final"
77
	ext.okhttpVersion          = "2.7.5"
78
	ext.okhttp3Version         = "3.5.0"
79
	ext.poiVersion             = "3.15"
80
	ext.protobufVersion        = "3.1.0"
81
	ext.quartzVersion          = "2.2.3"
82
	ext.reactorVersion         = "Aluminium-BUILD-SNAPSHOT"
83
	ext.romeVersion            = "1.7.1"
84
	ext.rxjavaVersion          = '1.2.5'
85
	ext.rxjavaAdapterVersion   = '1.2.1'
86
	ext.rxjava2Version         = '2.0.4'
87
	ext.rxnettyVersion         = '0.5.2-rc.5'
88
	ext.servletVersion         = "3.1.0"
89
	ext.slf4jVersion           = "1.7.22"
90 91
	ext.snakeyamlVersion       = "1.17"
	ext.snifferVersion         = "1.15"
92
	ext.testngVersion          = "6.10"
J
Juergen Hoeller 已提交
93
	ext.tiles3Version          = "3.0.7"
B
Brian Clozel 已提交
94
	ext.tomcatVersion          = "8.5.11"
95
	ext.tyrusVersion           = "1.13"
96
	ext.undertowVersion        = "1.4.8.Final"
97
	ext.websocketVersion       = "1.1"
98
	ext.woodstoxVersion        = "5.0.3"
99
	ext.xmlunitVersion         = "2.3.0"
100
	ext.xnioVersion            = "3.4.3.Final"
101
	ext.xstreamVersion         = "1.4.9"
102

103
	ext.gradleScriptDir = "${rootProject.projectDir}/gradle"
104

105
	apply plugin: "propdeps"
P
Phillip Webb 已提交
106
	apply plugin: "java"
107
	apply plugin: "test-source-set-dependencies"
108
	apply from: "${gradleScriptDir}/ide.gradle"
C
Chris Beams 已提交
109

S
Sebastien Deleuze 已提交
110 111 112 113 114
	// Kotlin compiler does not support JDK 9 yet, see https://youtrack.jetbrains.com/issue/KT-14988
	if (!JavaVersion.current().java9Compatible) {
		apply plugin: "kotlin"
	}

S
Stephane Nicoll 已提交
115 116 117 118 119
	configurations {
		sniffer
		javaApiSignature
	}

120 121 122 123 124 125 126 127 128 129 130 131
	configurations.all {
		// check for updates every build
		resolutionStrategy.cacheChangingModulesFor 0, 'seconds'

		// consistent netty version (e.g. clashes between netty-all vs netty-common)
		resolutionStrategy.eachDependency { DependencyResolveDetails details ->
			if (details.requested.group == 'io.netty') {
				details.useVersion nettyVersion
			}
		}
	}

P
Phillip Webb 已提交
132 133 134
	compileJava.options*.compilerArgs = [
		"-Xlint:serial", "-Xlint:varargs", "-Xlint:cast", "-Xlint:classfile",
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
135
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
136
		"-Xlint:try", "-Xlint:fallthrough", "-Xlint:rawtypes", "-Xlint:deprecation",
137
		"-Xlint:unchecked", "-Xlint:-options", "-Werror"
138
	]
C
Chris Beams 已提交
139

P
Phillip Webb 已提交
140
	compileTestJava.options*.compilerArgs = [
141
		"-Xlint:serial", "-Xlint:-varargs", "-Xlint:cast", "-Xlint:classfile",
P
Phillip Webb 已提交
142
		"-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally",
S
Stephane Nicoll 已提交
143
		"-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static",
P
Phillip Webb 已提交
144 145 146
		"-Xlint:try", "-Xlint:-fallthrough", "-Xlint:-rawtypes", "-Xlint:-deprecation",
		"-Xlint:-unchecked", "-Xlint:-options"]

147
	compileJava {
148 149
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
150
		options.encoding = 'UTF-8'
151 152 153
	}

	compileTestJava {
J
Juergen Hoeller 已提交
154 155
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
156
		options.encoding = 'UTF-8'
157
		options.compilerArgs += "-parameters"
J
Juergen Hoeller 已提交
158 159
	}

C
Chris Beams 已提交
160 161
	test {
		systemProperty("java.awt.headless", "true")
162
		systemProperty("testGroups", project.properties.get("testGroups"))
163
		scanForTestClasses = false
164
		include(["**/*Tests.class", "**/*Test.class"])
165 166
		// Since we set scanForTestClasses to false, we need to filter out inner
		// classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to
167
		// run MyTests by itself will fail if MyTests contains any inner classes.
168
		exclude(["**/Abstract*.class", '**/*$*'])
S
Stephane Nicoll 已提交
169
		reports.junitXml.destination = file("$buildDir/test-results")
C
Chris Beams 已提交
170
	}
C
Chris Beams 已提交
171

172
	repositories {
173
		maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
B
Brian Clozel 已提交
174
		maven { url "https://repo.spring.io/libs-release" }
175
		maven { url "https://repo.spring.io/milestone" }
176
		maven { url "https://repo.spring.io/libs-snapshot" }
177
	}
C
Chris Beams 已提交
178

179
	dependencies {
180 181 182
		testCompile("junit:junit:${junitVersion}") {
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
183
		testCompile("org.mockito:mockito-core:2.6.1") {
184 185
			exclude group:'org.hamcrest', module:'hamcrest-core'
		}
186
		testCompile("org.hamcrest:hamcrest-all:${hamcrestVersion}")
187 188
		testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}")
		testRuntime("org.apache.logging.log4j:log4j-jcl:${log4jVersion}")
189

S
Stephane Nicoll 已提交
190
		sniffer("org.codehaus.mojo:animal-sniffer-ant-tasks:${snifferVersion}")
191
		javaApiSignature("org.codehaus.mojo.signature:java18:1.0@signature")
S
Stephane Nicoll 已提交
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
	}

	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
211

S
Stephane Nicoll 已提交
212 213 214 215 216 217 218
		doLast {
			ant.taskdef(
				name: 'animalSniffer',
				classname: 'org.codehaus.mojo.animal_sniffer.ant.CheckSignatureTask',
				classpath: configurations.sniffer.asPath
			)

219 220 221 222 223 224 225
			// TODO: Animal Sniffer currently chokes on optional JDK 9 bytecode in AspectJ 1.9 beta 5
			// ant.animalSniffer(
			// 		signature: "$buildDir/javaApiSignature/javaApi.signature",
			// 		classpath: sourceSets.main.compileClasspath.asPath) {
			// 	path(path: sourceSets.main.output.classesDir)
			// 	annotation(className: "org.springframework.lang.UsesSunHttpServer")
			// }
S
Stephane Nicoll 已提交
226
		}
227
	}
C
Chris Beams 已提交
228 229

	ext.javadocLinks = [
230
		"http://docs.oracle.com/javase/8/docs/api/",
231
		"http://docs.oracle.com/javaee/7/api/",
232
		"http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/",  // CommonJ
J
Juergen Hoeller 已提交
233 234
		"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 已提交
235 236
		"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
		"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
237
		"http://tiles.apache.org/tiles-request/apidocs/",
J
Juergen Hoeller 已提交
238
		"http://tiles.apache.org/framework/apidocs/",
C
Chris Beams 已提交
239
		"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
B
Brian Clozel 已提交
240 241
		"http://ehcache.org/apidocs/${ehcacheVersion}",
		"http://ehcache.org/apidocs/${ehcache3Version}",
242
		"http://quartz-scheduler.org/api/2.2.1/",
243 244 245
		"http://fasterxml.github.io/jackson-core/javadoc/2.8/",
		"http://fasterxml.github.io/jackson-databind/javadoc/2.8/",
		"http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.8/",
246
		"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/"
C
Chris Beams 已提交
247
	] as String[]
248 249
}

250
configure(subprojects - project(":spring-build-src")) { subproject ->
251
	apply plugin: "merge"
252
	apply from: "${gradleScriptDir}/publish-maven.gradle"
253 254 255 256 257 258 259 260 261 262 263
	apply plugin: "io.spring.dependency-management"

	dependencyManagement {
		imports {
			mavenBom "io.projectreactor:reactor-bom:${reactorVersion}"
		}
		resolutionStrategy {
			cacheChangingModulesFor 0, 'seconds'
		}
		applyMavenExclusions = false
	}
264

S
Stephane Nicoll 已提交
265 266 267 268
	configurations {
		jacoco
	}
	dependencies {
269
		jacoco("org.jacoco:org.jacoco.agent:0.7.5.201505241946:runtime")
S
Stephane Nicoll 已提交
270 271 272
	}

	gradle.taskGraph.whenReady {taskGraph ->
273
		if (taskGraph.hasTask(':sonarqube')) {
S
Stephane Nicoll 已提交
274 275 276 277
			test.jvmArgs "-javaagent:${configurations.jacoco.asPath}=destfile=${buildDir}/jacoco.exec,includes=org.springframework.*"
		}
	}

278
	jar {
P
Phillip Webb 已提交
279 280 281 282
		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
283 284 285 286 287

		from("${rootProject.projectDir}/src/dist") {
			include "license.txt"
			include "notice.txt"
			into "META-INF"
P
Phillip Webb 已提交
288
			expand(copyright: new Date().format("yyyy"), version: project.version)
289 290 291 292
		}
	}

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

295 296 297
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = project.name
C
Chris Beams 已提交
298
		options.links(project.ext.javadocLinks)
299
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
300

301 302
		// Suppress warnings due to cross-module @see and @link references.
		// Note that global 'api' task does display all warnings.
C
Chris Beams 已提交
303
		logging.captureStandardError LogLevel.INFO
304
		logging.captureStandardOutput LogLevel.INFO  // suppress "## warnings" message
305 306
	}

307 308
	task sourcesJar(type: Jar, dependsOn: classes) {
		classifier = 'sources'
309
		from sourceSets.main.allSource
310
		// Don't include or exclude anything explicitly by default. See SPR-12085.
311 312 313
	}

	task javadocJar(type: Jar) {
P
Phillip Webb 已提交
314
		classifier = "javadoc"
315 316 317 318 319 320 321
		from javadoc
	}

	artifacts {
		archives sourcesJar
		archives javadocJar
	}
C
Chris Beams 已提交
322 323
}

324 325
project("spring-build-src") {
	description = "Exposes gradle buildSrc for IDE support"
326

327
	apply plugin: "groovy"
328 329 330

	dependencies {
		compile gradleApi()
R
Rob Winch 已提交
331
		compile localGroovy()
332 333 334 335 336
	}

	configurations.archives.artifacts.clear()
}

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

340 341
	// As of Spring 4.0.3, spring-core includes asm 5.x and repackages cglib 3.2, inlining
	// both into the spring-core jar. cglib 3.2 itself depends on asm 5.x and is therefore
342
	// further transformed by the JarJar task to depend on org.springframework.asm; this
343
	// avoids including two different copies of asm unnecessarily.
J
Juergen Hoeller 已提交
344
	def cglibVersion = "3.2.4"
J
Juergen Hoeller 已提交
345
	def objenesisVersion = "2.5.1"
346 347 348 349

	configurations {
		jarjar
		cglib
350
		objenesis
351 352 353 354 355 356 357 358 359 360 361 362 363 364 365
	}

	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 已提交
366 367
					rule(pattern: "net.sf.cglib.**", result: "org.springframework.cglib.@1")
					// as mentioned above, transform cglib"s internal asm dependencies from
368 369
					// 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 已提交
370
					rule(pattern: "org.objectweb.asm.**", result: "org.springframework.asm.@1")
371 372 373 374 375
				}
			}
		}
	}

376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
	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")
				}
			}
		}
	}

395
	dependencies {
396
		cglib("cglib:cglib:${cglibVersion}@jar")
397
		objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
398
		jarjar("com.googlecode.jarjar:jarjar:1.3")
399

P
Phillip Webb 已提交
400
		compile(files(cglibRepackJar))
401
		compile(files(objenesisRepackJar))
402
		compile("commons-logging:commons-logging:1.2")
403
		optional("net.sf.jopt-simple:jopt-simple:5.0.3")
404
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
405 406
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
407 408
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
409
		optional "io.reactivex:rxjava:${rxjavaVersion}"
S
Sebastien Deleuze 已提交
410
		optional "io.reactivex.rxjava2:rxjava:${rxjava2Version}"
411
		optional "io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}"
412
		optional("io.netty:netty-buffer:${nettyVersion}")
413
		testCompile("io.projectreactor.addons:reactor-test")
414
		testCompile("javax.xml.bind:jaxb-api:${jaxbVersion}")
415
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
416
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
417
		testCompile("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") {
P
Phillip Webb 已提交
418 419
			exclude group: "stax", module: "stax-api"
		}
420 421 422
	}

	jar {
423
		// inline repackaged cglib classes directly into the spring-core jar
424 425
		dependsOn cglibRepackJar
		from(zipTree(cglibRepackJar.archivePath)) {
P
Phillip Webb 已提交
426
			include "org/springframework/cglib/**"
427
		}
428 429 430 431 432

		dependsOn objenesisRepackJar
		from(zipTree(objenesisRepackJar.archivePath)) {
			include "org/springframework/objenesis/**"
		}
433
	}
C
Chris Beams 已提交
434 435
}

P
Phillip Webb 已提交
436 437
project("spring-beans") {
	description = "Spring Beans"
438

439
	dependencies {
440 441
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
442
		optional("javax.inject:javax.inject:1")
443 444
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
445
		optional("org.yaml:snakeyaml:${snakeyamlVersion}")
446
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
J
Juergen Hoeller 已提交
447
	}
C
Chris Beams 已提交
448 449
}

450 451
project("spring-beans-groovy") {
	description "Groovy Bean Definitions"
452

J
Juergen Hoeller 已提交
453
	merge.into = project(":spring-beans")
454
	apply plugin: "groovy"
J
Juergen Hoeller 已提交
455 456 457

	dependencies {
		compile(project(":spring-core"))
458
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
J
Juergen Hoeller 已提交
459 460
	}

J
Juergen Hoeller 已提交
461
	// This module's Java and Groovy sources need to be compiled together.
462
	compileJava.enabled = false
J
Juergen Hoeller 已提交
463 464 465
	sourceSets {
		main {
			groovy {
466
				srcDir "src/main/java"
J
Juergen Hoeller 已提交
467 468 469
			}
		}
	}
470 471

	compileGroovy {
472 473
		sourceCompatibility = 1.8
		targetCompatibility = 1.8
474
	}
J
Juergen Hoeller 已提交
475 476
}

P
Phillip Webb 已提交
477 478
project("spring-aop") {
	description = "Spring AOP"
479

480
	dependencies {
481
		compile(project(":spring-beans"))
482 483
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
484
		compile(files(project(":spring-core").objenesisRepackJar))
485
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
486
		optional("org.apache.commons:commons-pool2:2.4.2")
487
		optional("com.jamonapi:jamon:2.81")
488
	}
C
Chris Beams 已提交
489 490
}

P
Phillip Webb 已提交
491 492
project("spring-expression") {
	description = "Spring Expression Language (SpEL)"
493

494
	dependencies {
495
		compile(project(":spring-core"))
496
	}
C
Chris Beams 已提交
497 498
}

P
Phillip Webb 已提交
499 500
project("spring-instrument") {
	description = "Spring Instrument"
501

502
	jar {
P
Phillip Webb 已提交
503 504
		manifest.attributes["Premain-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
505 506
		manifest.attributes["Agent-Class"] =
			"org.springframework.instrument.InstrumentationSavingAgent"
507 508 509
		manifest.attributes["Can-Redefine-Classes"] = "true"
		manifest.attributes["Can-Retransform-Classes"] = "true"
		manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
510
	}
C
Chris Beams 已提交
511 512
}

P
Phillip Webb 已提交
513 514
project("spring-context") {
	description = "Spring Context"
515

516
	apply plugin: "groovy"
517

518
	dependencies {
519 520 521 522 523
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
524
		optional(project(":spring-instrument"))
525
		optional("javax.inject:javax.inject:1")
526 527
		optional("javax.annotation:javax.annotation-api:${annotationApiVersion}")
		optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
528
		optional("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
529
		optional("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
530
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
531
		optional("javax.money:money-api:1.0.1")
J
Juergen Hoeller 已提交
532 533
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
		optional("javax.validation:validation-api:${beanvalVersion}")
534
		optional("org.hibernate:hibernate-validator:${hibval5Version}")
535 536
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
537
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
538
		optional("org.beanshell:bsh:2.0b4")
539
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
540
		testCompile("org.apache.commons:commons-pool2:2.4.2")
541
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
542
		testCompile("javax.inject:javax.inject-tck:1")
543
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
544 545 546
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
		testRuntime("org.javamoney:moneta:1.1")
547 548 549 550 551 552 553 554 555 556
	}
}

project("spring-oxm") {
	description = "Spring Object/XML Marshalling"
	apply from: "oxm.gradle"

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
557 558
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
		optional("javax.activation:activation:${activationApiVersion}")
559 560 561 562 563 564 565 566 567 568 569
		optional("org.codehaus.castor:castor-xml:1.4.1")  {
			exclude group: 'stax', module: 'stax-api'
			exclude group: "org.springframework", module: "spring-context"
		}
		optional("com.thoughtworks.xstream:xstream:${xstreamVersion}") {
			exclude group: 'xpp3', module: 'xpp3_min'
			exclude group: 'xmlpull', module: 'xmlpull'
		}
		optional("org.jibx:jibx-run:1.2.6")
		testCompile(project(":spring-context"))
		testCompile("xpp3:xpp3:1.1.4c")
570
		testCompile("org.codehaus.jettison:jettison:1.3.8") {
571 572
			exclude group: 'stax', module: 'stax-api'
		}
573
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
574 575
        testCompile(files(genCastor.classesDir).builtBy(genCastor))
        testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
576 577 578
		testRuntime("xerces:xercesImpl:2.11.0")  // for Castor
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
579
	}
580 581 582 583 584 585 586 587 588
}

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

	dependencies {
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
		compile(project(":spring-context"))
589
		optional(project(":spring-oxm"))
590 591
		optional("io.projectreactor:reactor-core")
		optional("io.projectreactor.ipc:reactor-netty")
592
		optional("io.netty:netty-all:${nettyVersion}")
B
Brian Clozel 已提交
593
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
B
Brian Clozel 已提交
594 595
			exclude group: "javax.servlet", module: "javax.servlet-api"
		}
B
Brian Clozel 已提交
596
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
597
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
598
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
599
		testCompile("javax.inject:javax.inject-tck:1")
600
		testCompile("javax.servlet:javax.servlet-api:${servletVersion}")
J
Juergen Hoeller 已提交
601
		testCompile("javax.validation:validation-api:${beanvalVersion}")
602
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
603 604 605 606 607
		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 已提交
608
		testCompile("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
B
Brian Clozel 已提交
609
			exclude group: "javax.servlet", module: "javax.servlet-api"
610
		}
611 612
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
613
		testCompile("io.netty:netty-all:${nettyVersion}")
614
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
615
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
S
Sebastien Deleuze 已提交
616 617
		testCompile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		testCompile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
618
		testRuntime("javax.activation:activation:${activationApiVersion}")
619 620
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
621
	}
622 623 624 625 626

	if (JavaVersion.current().java9Compatible) {
		// Reactor2TcpClient's use of Netty requires access to sun.nio.ch.SelectorImpl
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
C
Chris Beams 已提交
627 628
}

P
Phillip Webb 已提交
629 630
project("spring-tx") {
	description = "Spring Transaction"
631

632
	dependencies {
633 634
		compile(project(":spring-beans"))
		compile(project(":spring-core"))
635
		optional(project(":spring-aop"))
636
		optional(project(":spring-context"))  // for JCA, @EnableTransactionManagement
637
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
J
Juergen Hoeller 已提交
638
		optional("javax.resource:javax.resource-api:${jcaVersion}")
639
		optional("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
640
		optional("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
641
		optional("com.ibm.websphere:uow:6.0.2.17")
642
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
643
		testCompile("org.eclipse.persistence:javax.persistence:${jpaVersion}")
644
		testCompile("org.codehaus.groovy:groovy-all:${groovyVersion}")
645
	}
C
Chris Beams 已提交
646 647
}

P
Phillip Webb 已提交
648 649
project("spring-jms") {
	description = "Spring JMS"
650

651
	dependencies {
652 653 654 655
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-aop"))
		compile(project(":spring-context"))
656
		compile(project(":spring-messaging"))
657
		compile(project(":spring-tx"))
658
		provided("javax.jms:javax.jms-api:${jmsVersion}")
659
		optional(project(":spring-oxm"))
660
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
J
Juergen Hoeller 已提交
661
		optional("javax.resource:javax.resource-api:${jcaVersion}")
662
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
663
		testRuntime("javax.activation:activation:${activationApiVersion}")
664
	}
C
Chris Beams 已提交
665 666
}

P
Phillip Webb 已提交
667 668
project("spring-jdbc") {
	description = "Spring JDBC"
669

670
	dependencies {
671
		compile(project(":spring-beans"))
672
		compile(project(":spring-core"))
673
		compile(project(":spring-tx"))
674
		optional(project(":spring-context"))  // for JndiDataSourceLookup
675
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")
676
		optional("com.mchange:c3p0:0.9.5.2")
P
Phillip Webb 已提交
677
		optional("org.hsqldb:hsqldb:${hsqldbVersion}")
678 679 680
		optional("com.h2database:h2:1.4.193")
		optional("org.apache.derby:derby:10.13.1.1")
		optional("org.apache.derby:derbyclient:10.13.1.1")
681
	}
C
Chris Beams 已提交
682 683
}

P
Phillip Webb 已提交
684 685
project("spring-context-support") {
	description = "Spring Context Support"
686

687
	dependencies {
688 689 690
		compile(project(":spring-core"))
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
691 692
		optional(project(":spring-jdbc"))  // for Quartz support
		optional(project(":spring-tx"))  // for Quartz support
693
		optional("javax.activation:activation:${activationApiVersion}")
694
		optional("javax.mail:javax.mail-api:${javamailVersion}")
695
		optional("javax.cache:cache-api:${cacheApiVersion}")
B
Ben Manes 已提交
696
		optional("com.github.ben-manes.caffeine:caffeine:${caffeineVersion}")
697
		optional("net.sf.ehcache:ehcache:${ehcacheVersion}")
698
		optional("org.quartz-scheduler:quartz:${quartzVersion}")
699
		optional("org.codehaus.fabric3.api:commonj:1.1.0")
700
		optional("org.freemarker:freemarker:${freemarkerVersion}")
701
		optional("com.lowagie:itext:2.1.7")
702
		testCompile(project(":spring-context"))
703
		testCompile("org.apache.poi:poi:${poiVersion}")
P
Phillip Webb 已提交
704
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
705
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
706
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
707
		testRuntime("org.ehcache:jcache:${ehcachejcacheVersion}")
708
	}
C
Chris Beams 已提交
709 710
}

711 712 713 714 715 716 717 718 719 720 721
project("spring-context-indexer") {
	description = "Spring Context Indexer"

	dependencies {
		testCompile(project(":spring-context"))
		testCompile("javax.inject:javax.inject:1")
		testCompile("javax.annotation:javax.annotation-api:${annotationApiVersion}")
		testCompile("org.eclipse.persistence:javax.persistence:${jpaVersion}")
	}
}

P
Phillip Webb 已提交
722 723
project("spring-web") {
	description = "Spring Web"
S
Sebastien Deleuze 已提交
724

725
	apply plugin: "groovy"
726

727
	dependencies {
728 729
		compile(project(":spring-aop"))  // for JaxWsPortProxyFactoryBean
		compile(project(":spring-beans"))  // for MultipartFilter
730
		compile(project(":spring-context"))
731
		compile(project(":spring-core"))
732
		provided "javax.servlet:javax.servlet-api:${servletVersion}"
733
		optional(project(":spring-oxm"))  // for MarshallingHttpMessageConverter
734
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
735
		optional("javax.el:javax.el-api:${elApiVersion}")
736
		optional("javax.faces:javax.faces-api:${jsfVersion}")
J
Juergen Hoeller 已提交
737
		optional("javax.validation:validation-api:${beanvalVersion}")
738
		optional("javax.activation:activation:${activationApiVersion}")
739
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
740
		optional("com.caucho:hessian:4.0.38")
741
		optional("commons-fileupload:commons-fileupload:${fileuploadVersion}")
742 743 744
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
		optional("io.projectreactor.ipc:reactor-netty")
J
Juergen Hoeller 已提交
745
		optional("io.reactivex:rxnetty-http:${rxnettyVersion}") {
746 747
			exclude group: 'io.reactivex', module: 'rxjava'
		}
748
		optional("io.reactivex:rxjava:${rxjavaVersion}")
S
Sebastien Deleuze 已提交
749
		optional "io.reactivex.rxjava2:rxjava:${rxjava2Version}"
750
		optional("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
751
		optional("io.undertow:undertow-core:${undertowVersion}")
752
		optional("org.jboss.xnio:xnio-api:${xnioVersion}")
753 754
		optional("io.netty:netty-buffer:${nettyVersion}")  // temporarily for JsonObjectDecoder
	  	optional("com.fasterxml.woodstox:woodstox-core:${woodstoxVersion}") {  // woodstox before aalto
755 756
			exclude group: "stax", module: "stax-api"
		}
757
		optional("com.fasterxml:aalto-xml:1.0.0")
758 759
		optional("org.apache.httpcomponents:httpclient:${httpclientVersion}")
		optional("org.apache.httpcomponents:httpasyncclient:${httpasyncVersion}")
760
		optional("io.netty:netty-all:${nettyVersion}")
761
		optional("com.squareup.okhttp:okhttp:${okhttpVersion}")
762
		optional("com.squareup.okhttp3:okhttp:${okhttp3Version}")
763
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
764
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
765 766
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-smile:${jackson2Version}")
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${jackson2Version}")
R
Roy Clarkson 已提交
767
		optional("com.google.code.gson:gson:${gsonVersion}")
768
		optional("com.rometools:rome:${romeVersion}")
B
Brian Clozel 已提交
769
		optional("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
770
			exclude group: "javax.servlet", module: "javax.servlet-api"
771
		}
B
Brian Clozel 已提交
772
		optional("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
773
			exclude group: "javax.servlet", module: "javax.servlet-api"
774
		}
775 776
		optional("com.google.protobuf:protobuf-java:${protobufVersion}")
		optional("com.google.protobuf:protobuf-java-util:${protobufVersion}")
777
		optional("com.googlecode.protobuf-java-format:protobuf-java-format:1.4")
778 779
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
		optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
780
		optional("javax.mail:javax.mail-api:${javamailVersion}")
781
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
782
		testCompile(project(":spring-context-support"))  // for JafMediaTypeFactory
783
		testCompile("io.projectreactor.addons:reactor-test")
784 785 786
		testCompile("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
			exclude group: "org.apache.taglibs", module: "taglibs-standard-spec"
		}
787
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-joda:${jackson2Version}")
788
		testCompile("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2Version}")
789
		testCompile("com.fasterxml.jackson.module:jackson-module-kotlin:${jackson2Version}")
790 791 792 793
		testCompile("org.apache.tomcat:tomcat-util:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}")
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}")
794 795 796
		testCompile("com.squareup.okhttp3:mockwebserver:${okhttp3Version}")
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
S
Sebastien Deleuze 已提交
797
		testCompile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
798
		testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
799 800
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
801
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
802
		testRuntime("org.jboss.logging:jboss-logging:3.3.0.Final")
803
	}
804 805 806 807 808

	if (JavaVersion.current().java9Compatible) {
		// Netty4ClientHttpRequestFactory requires access to sun.nio.ch.SelectorImpl
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
809 810 811 812
}

project("spring-web-reactive") {
	description = "Spring Web Reactive"
813

814 815 816
	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-web"))
817 818
		compile "org.reactivestreams:reactive-streams"
		compile "io.projectreactor:reactor-core"
819 820
		optional(project(":spring-context-support"))  // for FreeMarker support
		provided "javax.servlet:javax.servlet-api:${servletVersion}"
821
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
822 823
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		optional("org.freemarker:freemarker:${freemarkerVersion}")
824
		optional "org.apache.httpcomponents:httpclient:${httpclientVersion}"
825
		optional('org.webjars:webjars-locator:0.32')
826
		optional("io.projectreactor.ipc:reactor-netty")
827 828 829 830 831
		optional("io.reactivex:rxnetty-http:${rxnettyVersion}") {
			exclude group: 'io.reactivex', module: 'rxjava'
		}
		optional("io.reactivex:rxjava:${rxjavaVersion}")
		optional("io.reactivex:rxjava-reactive-streams:${rxjavaAdapterVersion}")
832 833 834 835 836
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
		optional("org.apache.tomcat:tomcat-websocket:${tomcatVersion}") {
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
837 838 839
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
			exclude group: "javax.servlet", module: "javax.servlet"
		}
840 841 842
		optional("io.undertow:undertow-websockets-jsr:${undertowVersion}") {
			exclude group: "org.jboss.spec.javax.websocket", module: "jboss-websocket-api_1.1_spec"
		}
843 844
		optional("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
		optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
845
		testCompile("io.projectreactor.addons:reactor-test")
846
		testCompile("javax.validation:validation-api:${beanvalVersion}")
R
Rossen Stoyanchev 已提交
847
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
848 849 850 851
		testCompile("org.apache.tomcat:tomcat-util:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}")
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}")
S
Sebastien Deleuze 已提交
852
		testCompile "io.reactivex.rxjava2:rxjava:${rxjava2Version}"
853
		testCompile("io.undertow:undertow-core:${undertowVersion}")
854
		testCompile("org.jboss.xnio:xnio-api:${xnioVersion}")
855
		testCompile("com.fasterxml:aalto-xml:1.0.0")
856
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
857
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
858
	    testCompile("com.squareup.okhttp3:mockwebserver:${okhttp3Version}")
859 860
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
861 862 863
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
864
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
865
		testRuntime("org.jboss.logging:jboss-logging:3.3.0.Final")
866
		testRuntime("org.webjars:underscorejs:1.8.3")
867
		testRuntime("org.jruby:jruby:9.1.7.0")
868
		testRuntime("org.python:jython-standalone:2.5.3")
869 870 871 872 873 874 875 876 877
		// Ideally, kotlin-script-runtime should be enough for JSR-223, but that's not
		// the case yet, so we depend on kotlin-script-util and exclude these
		// dependencies only used for artifact retrieval. Point raised to Kotlin team.
		testRuntime("org.jetbrains.kotlin:kotlin-compiler:${kotlinVersion}")
		testRuntime("org.jetbrains.kotlin:kotlin-script-util:${kotlinVersion}") {
			exclude group: "com.jcabi", module: "jcabi-aether"
			exclude group: "org.apache.maven", module: "maven-core"
			exclude group: "org.sonatype.aether", module: "aether-api"
		}
878
	}
879 880 881 882 883

	if (JavaVersion.current().java9Compatible) {
		// ReactorClientHttpConnector requires access to sun.nio.ch.SelectorImpl
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
C
Chris Beams 已提交
884 885
}

P
Phillip Webb 已提交
886 887
project("spring-orm") {
	description = "Spring Object/Relational Mapping"
888

889
	dependencies {
890 891 892 893 894 895 896
		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"))
J
Juergen Hoeller 已提交
897
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
898 899
		optional("org.eclipse.persistence:org.eclipse.persistence.core:${eclipselinkVersion}")
		optional("org.eclipse.persistence:org.eclipse.persistence.jpa:${eclipselinkVersion}") {
900 901
			exclude group: 'org.eclipse.persistence', module: 'javax.persistence'
		}
902
		optional("org.hibernate:hibernate-core:${hibernate5Version}")
903
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
S
Sam Brannen 已提交
904
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
P
Phillip Webb 已提交
905
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
906
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
907
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
908
	}
C
Chris Beams 已提交
909 910
}

P
Phillip Webb 已提交
911 912
project("spring-webmvc") {
	description = "Spring Web MVC"
913

914
	dependencies {
915
		compile(project(":spring-aop"))
916 917
		compile(project(":spring-beans"))
		compile(project(":spring-context"))
918
		compile(project(":spring-core"))
919
		compile(files(project(":spring-core").objenesisRepackJar))
920 921
		compile(project(":spring-expression"))
		compile(project(":spring-web"))
922
		provided("javax.servlet:javax.servlet-api:${servletVersion}")
923
		optional(project(":spring-context-support"))  // for FreeMarker support
924
		optional(project(":spring-oxm"))  // for MarshallingView
925
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
926
		optional("javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1")
927
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
928 929
		optional("org.apache.poi:poi:${poiVersion}")
		optional("org.apache.poi:poi-ooxml:${poiVersion}")
930
		optional("org.freemarker:freemarker:${freemarkerVersion}")
931
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
932 933
		optional("com.lowagie:itext:2.1.7")
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
934
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jackson2Version}")
935 936
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-smile:${jackson2Version}")
		optional("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${jackson2Version}")
937
		optional("com.rometools:rome:${romeVersion}")
938
		optional("javax.el:javax.el-api:${elApiVersion}")
939 940
		optional("org.apache.tiles:tiles-api:${tiles3Version}")
		optional("org.apache.tiles:tiles-core:${tiles3Version}") {
941 942
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
943
		optional("org.apache.tiles:tiles-servlet:${tiles3Version}") {
944 945
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
946
		optional("org.apache.tiles:tiles-jsp:${tiles3Version}") {
947 948
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
949
		optional("org.apache.tiles:tiles-el:${tiles3Version}") {
950 951
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
952
		optional("org.apache.tiles:tiles-extras:${tiles3Version}") {
953 954 955
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
			exclude group: "org.springframework", module: "spring-web"
		}
956
		optional('org.webjars:webjars-locator:0.32')
957
		testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
958
		testCompile("dom4j:dom4j:1.6.1") {
P
Phillip Webb 已提交
959
			exclude group: "xml-apis", module: "xml-apis"
960 961
		}
		testCompile("jaxen:jaxen:1.1.1") {
P
Phillip Webb 已提交
962 963 964
			exclude group: "xml-apis", module: "xml-apis"
			exclude group: "xom", module: "xom"
			exclude group: "xerces", module: "xercesImpl"
965
		}
B
Brian Clozel 已提交
966
		testCompile("org.eclipse.jetty:jetty-servlet:${jettyVersion}") {
B
Brian Clozel 已提交
967
			exclude group: "javax.servlet", module: "javax.servlet"
968
		}
B
Brian Clozel 已提交
969
		testCompile("org.eclipse.jetty:jetty-server:${jettyVersion}") {
B
Brian Clozel 已提交
970
			exclude group: "javax.servlet", module: "javax.servlet"
971
		}
J
Juergen Hoeller 已提交
972
		testCompile("javax.validation:validation-api:${beanvalVersion}")
973
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
974 975
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
		testCompile("commons-fileupload:commons-fileupload:${fileuploadVersion}")
976
		testCompile("commons-io:commons-io:1.3")
977
		testCompile("joda-time:joda-time:${jodaVersion}")
978
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
979
		testCompile("org.mozilla:rhino:1.7.7.1")
980
		testRuntime("org.jruby:jruby:9.1.7.0")
981
		testRuntime("org.python:jython-standalone:2.5.3")
982 983 984
		// Ideally, kotlin-script-runtime should be enough for JSR-223, but that's not
		// the case yet, so we depend on kotlin-script-util and exclude these
		// dependencies only used for artifact retrieval. Point raised to Kotlin team.
985 986 987 988 989 990
		testRuntime("org.jetbrains.kotlin:kotlin-compiler:${kotlinVersion}")
		testRuntime("org.jetbrains.kotlin:kotlin-script-util:${kotlinVersion}") {
			exclude group: "com.jcabi", module: "jcabi-aether"
			exclude group: "org.apache.maven", module: "maven-core"
			exclude group: "org.sonatype.aether", module: "aether-api"
		}
991
		testRuntime("org.webjars:underscorejs:1.8.3")
992
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
993 994 995
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
		testRuntime("javax.activation:activation:${activationApiVersion}")
996 997 998
	}
}

999 1000 1001 1002 1003 1004 1005 1006 1007
project("spring-websocket") {
	description = "Spring WebSocket"

	dependencies {
		compile(project(":spring-core"))
		compile(project(":spring-context"))
		compile(project(":spring-web"))
		optional(project(":spring-messaging"))
		optional(project(":spring-webmvc"))
1008 1009
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033
		optional("org.apache.tomcat:tomcat-websocket:${tomcatVersion}") {
			exclude group: "org.apache.tomcat", module: "tomcat-websocket-api"
			exclude group: "org.apache.tomcat", module: "tomcat-servlet-api"
		}
		optional("org.glassfish.tyrus:tyrus-spi:${tyrusVersion}")
		optional("org.glassfish.tyrus:tyrus-core:${tyrusVersion}")
		optional("org.glassfish.tyrus:tyrus-server:${tyrusVersion}")
		optional("org.glassfish.tyrus:tyrus-container-servlet:${tyrusVersion}")
		optional("org.eclipse.jetty:jetty-webapp:${jettyVersion}") {
			exclude group: "javax.servlet", module: "javax.servlet"
		}
		optional("org.eclipse.jetty.websocket:websocket-server:${jettyVersion}") {
			exclude group: "javax.servlet", module: "javax.servlet"
		}
		optional("org.eclipse.jetty.websocket:websocket-client:${jettyVersion}")
		optional("org.eclipse.jetty:jetty-client:${jettyVersion}")
		optional("io.undertow:undertow-core:${undertowVersion}")
		optional("io.undertow:undertow-servlet:${undertowVersion}") {
			exclude group: "org.jboss.spec.javax.servlet", module: "jboss-servlet-api_3.1_spec"
			exclude group: "org.jboss.spec.javax.annotation", module: "jboss-annotations-api_1.2_spec"
		}
		optional("io.undertow:undertow-websockets-jsr:${undertowVersion}") {
			exclude group: "org.jboss.spec.javax.websocket", module: "jboss-websocket-api_1.1_spec"
		}
1034
		optional("org.jboss.xnio:xnio-api:${xnioVersion}")
1035 1036 1037
		optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
		testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}")
1038 1039
		testCompile("io.projectreactor:reactor-core")
		testCompile("io.projectreactor.ipc:reactor-netty")
1040 1041
		testCompile("io.netty:netty-all:${nettyVersion}")
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
1042
		testRuntime("org.jboss.xnio:xnio-nio:${xnioVersion}")
1043
		testRuntime("org.jboss.logging:jboss-logging:3.3.0.Final")
1044
	}
1045 1046 1047 1048 1049

	if (JavaVersion.current().java9Compatible) {
		// Reactor2TcpClient's use of Netty requires access to sun.nio.ch.SelectorImpl
		test.jvmArgs(["--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"])
	}
1050 1051
}

P
Phillip Webb 已提交
1052 1053
project("spring-test") {
	description = "Spring TestContext Framework"
1054

1055
	dependencies {
1056
		compile(project(":spring-core"))
1057 1058 1059 1060 1061 1062 1063
		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"))
1064
		optional(project(":spring-websocket"))
1065
		optional("junit:junit:${junitVersion}")
1066
		optional("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
1067
		optional("org.testng:testng:${testngVersion}")
1068
		optional("javax.inject:javax.inject:1")
1069 1070
		optional("javax.servlet:javax.servlet-api:${servletVersion}")
		optional("javax.servlet.jsp:javax.servlet.jsp-api:${jspVersion}")
1071 1072 1073 1074
		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"
		}
1075
		optional("javax.el:javax.el-api:${elApiVersion}")
1076
		optional("javax.websocket:javax.websocket-api:${websocketVersion}")
1077 1078
		optional("javax.activation:activation:${activationApiVersion}")
		optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
1079
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
S
Sam Brannen 已提交
1080
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
1081
		optional("org.hamcrest:hamcrest-core:${hamcrestVersion}")
1082
		optional("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
1083
		optional("net.sourceforge.htmlunit:htmlunit:2.24")
1084 1085
		optional("org.seleniumhq.selenium:htmlunit-driver:2.23.2")
		optional("org.seleniumhq.selenium:selenium-java:3.0.1") {
1086 1087
			exclude group: "io.netty", module: "netty"
		}
1088
		optional("org.skyscreamer:jsonassert:1.4.0")
1089
		optional("com.jayway.jsonpath:json-path:2.2.0")
1090 1091
		optional("org.reactivestreams:reactive-streams")
		optional("io.projectreactor:reactor-core")
1092 1093
		testCompile(project(":spring-context-support"))
		testCompile(project(":spring-oxm"))
1094
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
1095
		testCompile("javax.ejb:javax.ejb-api:${ejbApiVersion}")
S
Stephane Nicoll 已提交
1096
		testCompile("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
1097
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
1098
		testCompile("org.hibernate:hibernate-validator:${hibval5Version}")
1099 1100
		// Enable use of the JUnitPlatform Runner
		testCompile("org.junit.platform:junit-platform-runner:${junitPlatformVersion}")
1101
		testCompile("com.thoughtworks.xstream:xstream:${xstreamVersion}")
1102
		testCompile("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}")
1103
		testCompile("com.rometools:rome:${romeVersion}")
1104 1105
		testCompile("org.apache.tiles:tiles-api:${tiles3Version}")
		testCompile("org.apache.tiles:tiles-core:${tiles3Version}") {
1106 1107
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
1108
		testCompile("org.apache.tiles:tiles-servlet:${tiles3Version}") {
1109 1110
			exclude group: "org.slf4j", module: "jcl-over-slf4j"
		}
1111
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
S
Sam Brannen 已提交
1112
		testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
1113
		testCompile("org.apache.httpcomponents:httpclient:${httpclientVersion}")
1114
		testCompile("javax.cache:cache-api:${cacheApiVersion}")
1115
		testCompile('de.bechte.junit:junit-hierarchicalcontextrunner:4.12.1')
1116
		testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
1117
		testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}")  // Java Util Logging for JUnit 5
1118
		testRuntime("org.ehcache:ehcache:${ehcache3Version}")
J
Juergen Hoeller 已提交
1119
		testRuntime("org.terracotta:management-model:2.0.0")
1120 1121
		testRuntime("javax.el:javax.el-api:${elApiVersion}")
		testRuntime("org.glassfish:javax.el:3.0.1-b08")
1122 1123
		testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
		testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")
1124
	}
1125 1126

	task testNG(type: Test) {
1127
		description = 'Runs TestNG tests.'
1128
		useTestNG()
1129
		scanForTestClasses = false
1130 1131
		include(["**/testng/**/*Tests.class", "**/testng/**/*Test.class"])
		// Show STD_OUT & STD_ERR of the test JVM(s) on the console:
1132
		// testLogging.showStandardStreams = true
1133
		// forkEvery 1
1134
		reports.junitXml.destination = file("$buildDir/test-results")
1135 1136 1137
	}

	test {
1138
		description = 'Runs JUnit tests.'
1139 1140
		dependsOn testNG
		useJUnit()
1141 1142 1143
		scanForTestClasses = false
		include(['**/*Tests.class', '**/*Test.class', '**/SpringJUnitJupiterTestSuite.class'])
		exclude(['**/testng/**/*.*'])
1144 1145
		// Java Util Logging for JUnit 5.
		// systemProperty('java.util.logging.manager', 'org.apache.logging.log4j.jul.LogManager')
1146
		reports.junitXml.destination = file("$buildDir/test-results")
1147
	}
1148 1149

	task aggregateTestReports(type: TestReport) {
1150
		description = 'Aggregates JUnit and TestNG test reports.'
1151 1152 1153 1154 1155
		destinationDir = test.reports.html.destination
		reportOn test, testNG
	}

	check.dependsOn aggregateTestReports
C
Chris Beams 已提交
1156 1157
}

P
Phillip Webb 已提交
1158 1159 1160
project("spring-aspects") {
	description = "Spring Aspects"
	apply from: "aspects.gradle"
1161

1162
	dependencies {
1163
		aspects(project(":spring-orm"))
1164 1165 1166
		ajc("org.aspectj:aspectjtools:${aspectjVersion}")
		rt("org.aspectj:aspectjrt:${aspectjVersion}")
		compile("org.aspectj:aspectjweaver:${aspectjVersion}")
J
Juergen Hoeller 已提交
1167
		provided("org.eclipse.persistence:javax.persistence:${jpaVersion}")
1168 1169 1170 1171 1172 1173
		optional(project(":spring-aop"))  // for @Async support
		optional(project(":spring-beans"))  // for @Configurable support
		optional(project(":spring-context"))  // for @Enable* support
		optional(project(":spring-context-support"))  // for JavaMail and JSR-107 support
		optional(project(":spring-orm"))  // for JPA exception translation support
		optional(project(":spring-tx"))  // for JPA, @Transactional support
1174
		optional("javax.transaction:javax.transaction-api:${jtaVersion}")  // for @javax.transaction.Transactional support
1175
		optional("javax.cache:cache-api:${cacheApiVersion}")
1176
		testCompile(project(":spring-core"))  // for CodeStyleAspect
1177
		testCompile(project(":spring-test"))
1178
		testCompile("javax.mail:javax.mail-api:${javamailVersion}")
1179
	}
1180

1181
	eclipse.project {
P
Phillip Webb 已提交
1182
		natures += "org.eclipse.ajdt.ui.ajnature"
1183
		buildCommands = [new org.gradle.plugins.ide.eclipse.model.BuildCommand("org.eclipse.ajdt.core.ajbuilder")]
1184
	}
C
Chris Beams 已提交
1185 1186
}

1187 1188
project("spring-framework-bom") {
	description = "Spring Framework (Bill of Materials)"
1189

1190 1191 1192 1193 1194
	dependencyManagement {
		generatedPomCustomization {
			enabled = false
		}
	}
1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227

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

1228 1229
sonarqube {
	properties {
S
Stephane Nicoll 已提交
1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241
		property "sonar.projectName", "Spring Framework"
		property "sonar.profile", "Spring Framework"
		property "sonar.jacoco.reportPath", "${buildDir.name}/jacoco.exec"
		property "sonar.links.homepage", linkHomepage
		property "sonar.links.ci", linkCi
		property "sonar.links.issue", linkIssue
		property "sonar.links.scm", linkScmUrl
		property "sonar.links.scm_dev", linkScmDevConnection
		property "sonar.java.coveragePlugin", "jacoco"
	}
}

1242
configure(rootProject) {
P
Phillip Webb 已提交
1243
	description = "Spring Framework"
1244

B
Brian Clozel 已提交
1245
	apply plugin: "org.asciidoctor.convert"
1246
	apply plugin: "docbook-reference"
1247
	apply plugin: "groovy"
R
Rob Winch 已提交
1248

1249
	// apply plugin: "detect-split-packages"
1250 1251
	apply from: "${gradleScriptDir}/jdiff.gradle"

R
Rob Winch 已提交
1252
	asciidoctor {
B
Brian Clozel 已提交
1253 1254
		sourceDir project.file('src/asciidoc')
		separateOutputDirs = false
1255
		backends = ['docbook']
B
Brian Clozel 已提交
1256
		options doctype: 'book', eruby: 'erubis'
J
Juergen Hoeller 已提交
1257
		attributes 'spring-version': project.version, 'revnumber': project.version, 'docinfo': ""
1258 1259
	}

1260 1261 1262
	reference {
		sourceDir = asciidoctor.outputDir
		pdfFilename = "spring-framework-reference.pdf"
1263
		epubFilename = "spring-framework-reference.epub"
1264 1265 1266 1267 1268 1269 1270
		expandPlaceholders = ""
	}

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

1271 1272 1273 1274 1275
	// 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")
	// }
1276

C
Chris Beams 已提交
1277
	// don't publish the default jar for the root project
1278 1279
	configurations.archives.artifacts.clear()

1280
	dependencies {  // for integration tests
1281
		testCompile(project(":spring-aop"))
1282
		testCompile(project(":spring-beans"))
1283
		testCompile(project(":spring-context"))
1284 1285
		testCompile(project(":spring-core"))
		testCompile(project(":spring-expression"))
1286
		testCompile(project(":spring-jdbc"))
1287
		testCompile(project(":spring-orm"))
1288
		testCompile(project(":spring-test"))
1289
		testCompile(project(":spring-tx"))
1290
		testCompile(project(":spring-web"))
1291
		testCompile("javax.servlet:javax.servlet-api:${servletVersion}")
1292
		testCompile("javax.inject:javax.inject:1")
J
Juergen Hoeller 已提交
1293
		testCompile("javax.resource:javax.resource-api:${jcaVersion}")
1294
		testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
1295
		testCompile("org.hibernate:hibernate-core:${hibernate5Version}")
P
Phillip Webb 已提交
1296
		testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
1297 1298 1299
	}

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

1304 1305 1306 1307 1308
		dependsOn {
			subprojects.collect {
				it.tasks.getByName("jar")
			}
		}
1309 1310 1311
		options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
		options.author = true
		options.header = rootProject.description
P
Phillip Webb 已提交
1312
		options.overview = "src/api/overview.html"
1313
		options.stylesheetFile = file("src/api/stylesheet.css")
1314
		options.splitIndex = true
C
Chris Beams 已提交
1315
		options.links(project.ext.javadocLinks)
1316
		options.addStringOption('Xdoclint:none', '-quiet')
C
Chris Beams 已提交
1317

1318 1319 1320
		source subprojects.collect { project ->
			project.sourceSets.main.allJava
		}
C
Chris Beams 已提交
1321

P
Phillip Webb 已提交
1322
		maxMemory = "1024m"
C
Chris Beams 已提交
1323
		destinationDir = new File(buildDir, "api")
1324 1325 1326

		doFirst {
			classpath = files(
1327 1328
                // ensure Servlet 3.x has precedence on the javadoc classpath
                project(":spring-webmvc").sourceSets.main.compileClasspath.files.find { it =~ "servlet-api" },
1329 1330 1331 1332 1333
				// 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 })
		}
1334 1335
	}

1336
	task docsZip(type: Zip, dependsOn: 'reference') {
P
Phillip Webb 已提交
1337 1338 1339
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "docs"
1340 1341 1342
		description = "Builds -${classifier} archive containing api and reference " +
			"for deployment at http://static.springframework.org/spring-framework/docs."

P
Phillip Webb 已提交
1343 1344
		from("src/dist") {
			include "changelog.txt"
1345 1346 1347
		}

		from (api) {
1348
			into "javadoc-api"
1349 1350
		}

1351 1352
		from (reference) {
			into "spring-framework-reference"
1353 1354 1355 1356
		}
	}

	task schemaZip(type: Zip) {
P
Phillip Webb 已提交
1357 1358 1359
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "schema"
1360 1361
		description = "Builds -${classifier} archive containing all " +
			"XSDs for deployment at http://springframework.org/schema."
S
Stephane Nicoll 已提交
1362
		duplicatesStrategy 'exclude'
1363
		moduleProjects.each { subproject ->
1364 1365 1366
			def Properties schemas = new Properties();

			subproject.sourceSets.main.resources.find {
P
Phillip Webb 已提交
1367
				it.path.endsWith("META-INF/spring.schemas")
1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384
			}?.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 已提交
1385 1386 1387
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist"
1388
		description = "Builds -${classifier} archive, containing all jars and docs, " +
J
Juergen Hoeller 已提交
1389
			"suitable for community download page."
1390 1391 1392

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

P
Phillip Webb 已提交
1393 1394 1395 1396
		from("src/dist") {
			include "readme.txt"
			include "license.txt"
			include "notice.txt"
1397
			into "${baseDir}"
P
Phillip Webb 已提交
1398
			expand(copyright: new Date().format("yyyy"), version: project.version)
1399 1400 1401 1402 1403 1404 1405 1406 1407 1408
		}

		from(zipTree(docsZip.archivePath)) {
			into "${baseDir}/docs"
		}

		from(zipTree(schemaZip.archivePath)) {
			into "${baseDir}/schema"
		}

1409
		moduleProjects.each { subproject ->
1410 1411
			into ("${baseDir}/libs") {
				from subproject.jar
P
Phillip Webb 已提交
1412
				if (subproject.tasks.findByPath("sourcesJar")) {
1413 1414
					from subproject.sourcesJar
				}
P
Phillip Webb 已提交
1415
				if (subproject.tasks.findByPath("javadocJar")) {
1416 1417 1418 1419 1420 1421
					from subproject.javadocJar
				}
			}
		}
	}

1422
	// Create a distribution that contains all dependencies (required and optional).
1423 1424
	// Not published by default; only for use when building from source.
	task depsZip(type: Zip, dependsOn: distZip) { zipTask ->
P
Phillip Webb 已提交
1425 1426 1427
		group = "Distribution"
		baseName = "spring-framework"
		classifier = "dist-with-deps"
1428 1429 1430 1431 1432 1433 1434 1435 1436 1437
		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 ->
1438 1439
					(subproject.configurations.runtime.resolvedConfiguration.resolvedArtifacts +
					subproject.configurations.optional.resolvedConfiguration.resolvedArtifacts).each { artifact ->
1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460
						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 已提交
1461
		description = "Generates gradlew[.bat] scripts"
J
Juergen Hoeller 已提交
1462
		gradleVersion = '3.3'
1463 1464

		doLast() {
1465
			def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
1466
			def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
P
Phillip Webb 已提交
1467
			File wrapperFile = file("gradlew")
1468 1469
			wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
				"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
P
Phillip Webb 已提交
1470
			File wrapperBatFile = file("gradlew.bat")
1471 1472 1473 1474
			wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
				"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
		}
	}
1475

1476
}
1477

S
Stephane Nicoll 已提交
1478
configure([project(':spring-build-src'), project(':spring-framework-bom')]) {
1479
	sonarqube {
S
Stephane Nicoll 已提交
1480 1481 1482 1483 1484
		skipProject = true
	}
}

configure(project(':spring-core')) {
1485 1486
	sonarqube {
		properties {
S
Stephane Nicoll 已提交
1487 1488 1489 1490 1491 1492
			property "sonar.exclusions",
					"src/main/java/org/springframework/cglib/**/*,src/main/java/org/springframework/asm/**/*"
		}
	}
}

1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508
/*
 * Copyright 2002-2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519
/*
 * 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-")) {
1520
			return version.replace('BUILD', qualifier)
1521 1522
		}
	}
1523
	return version
1524
}