Files
spring-framework/build.gradle
T
Chris Beams da2aa3d35c Test pom generation and update optional deps
Gradle-generated poms thoroughly tested against 3.1.1 versions, with an
eye toward making as many spring-* dependencies optional as possible.

All spring-* modules now declare a Gradle dependency on any other
spring-* module where there is a direct compile-time usage of the
sources in that module. Previously, dependency declarations were
minimal, letting transitive resolution do most of the work. However,
this creates less than ideal poms and is generally not very
informative.

So for example, spring-jdbc uses spring-core, spring-beans and
spring-tx classes directly. Therefore it has the following declarations:

  compile project(":spring-core")
  compile project(":spring-beans")
  compile project(":spring-tx")

spring-core depends on spring-asm, but spring-jdbc does not use
spring-asm classes directly. Therefore spring-jdbc does not declare a
dependency on spring-asm. Transitive resolution is fine in such a case.

As for optional dependencies, it is a matter of degrees what
constitutes optional. A rule of thumb is whether there are legitimate
and likely use cases in which the module can be used without needing
the dependency. spring-jdbc has only one compile-time dependency on
spring-context classes, and that's in JndiDataSourceLookup. It is
certainly reasonable to imagine using spring-jdbc without JNDI,
therefore the spring-context dependency is declared optional as
follows:

  compile(project(":spring-context"), optional) // for JndiDataSourceLookup
2012-05-28 18:16:27 +03:00

661 lines
24 KiB
Groovy

buildscript {
repositories {
maven { url 'http://repo.springsource.org/plugins-release' }
}
dependencies {
classpath 'org.springframework.build.gradle:docbook-reference-plugin:0.1.5'
}
}
configure(allprojects) {
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
group = 'org.springframework'
sourceCompatibility=1.5
targetCompatibility=1.5
ext.aspectjVersion = '1.6.12'
[compileJava, compileTestJava]*.options*.compilerArgs = ['-Xlint:none']
sourceSets.test.resources.srcDirs = ['src/test/resources', 'src/test/java']
test.systemProperty("java.awt.headless", "true")
repositories {
maven { url "http://repo.springsource.org/libs-release" }
maven { url "http://repo.springsource.org/ebr-maven-external" }
}
dependencies {
testCompile "junit:junit:4.10"
testCompile "org.easymock:easymock:2.5.1"
testCompile "org.hamcrest:hamcrest-all:1.1"
}
// servlet-api (2.5) and tomcat-servlet-api (3.0) classpath entries should not be
// exported to dependent projects in Eclipse to avoid false compilation errors due
// to changing APIs across these versions
eclipse.classpath.file.whenMerged { classpath ->
classpath.entries.findAll { entry -> entry.path.contains('servlet-api') }*.exported = false
}
}
configure(subprojects) { subproject ->
apply from: "${rootProject.projectDir}/publish-maven.gradle"
jar {
manifest.attributes['Implementation-Title'] = subproject.name
manifest.attributes['Implementation-Version'] = subproject.version
from("${rootProject.projectDir}/src/dist") {
include "license.txt"
include "notice.txt"
into "META-INF"
expand(copyright: new Date().format('yyyy'), version: project.version)
}
}
javadoc {
options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
options.author = true
options.header = project.name
//options.overview = "${projectDir}/src/main/java/overview.html"
}
task sourcesJar(type: Jar, dependsOn:classes) {
classifier = 'sources'
from sourceSets.main.allJava
}
task javadocJar(type: Jar) {
classifier = 'javadoc'
from javadoc
}
artifacts {
archives sourcesJar
archives javadocJar
}
}
project("spring-asm") {
description = 'Spring ASM'
ext.asmVersion = '2.2.3'
configurations {
asm
jarjar
}
dependencies {
asm "asm:asm:${asmVersion}@jar", "asm:asm-commons:${asmVersion}@jar"
jarjar 'com.googlecode.jarjar:jarjar:1.1'
}
task repackageAsm(type: Jar) { jar ->
jar.baseName = "asm-repack"
jar.version = asmVersion
doLast() {
project.ant {
taskdef name: "jarjar", classname: "com.tonicsystems.jarjar.JarJarTask",
classpath: configurations.jarjar.asPath
jarjar(destfile: archivePath, index: "true", filesetmanifest: "merge") {
configurations.asm.each { jarfile ->
zipfileset(src: jarfile)
}
rule(pattern: 'org.objectweb.asm.**', result: 'org.springframework.asm.@1')
}
}
}
}
jar {
dependsOn repackageAsm
from(zipTree(repackageAsm.archivePath)) {
exclude 'META-INF/INDEX.LIST'
}
}
}
project('spring-core') {
description = 'Spring Core'
dependencies {
// depend on spring-asm project in order to have it show up as a
// <dependency> in the generated pom
compile project(":spring-asm")
// depend directly on the spring-asm jar to avoid errors in Eclipse/STS
compile files(project(":spring-asm").jar.archivePath) {
builtBy project(":spring-asm").jar
}
compile "commons-logging:commons-logging:1.1.1"
compile("org.aspectj:aspectjweaver:${aspectjVersion}", optional)
compile("net.sf.jopt-simple:jopt-simple:3.0") { dep ->
optional dep
exclude group: 'org.apache.ant', module: 'ant'
}
compile("log4j:log4j:1.2.15") { dep ->
optional dep
exclude group: 'javax.mail', module: 'mail'
exclude group: 'javax.jms', module: 'jms'
exclude group: 'com.sun.jdmk', module: 'jmxtools'
exclude group: 'com.sun.jmx', module: 'jmxri'
}
testCompile "xmlunit:xmlunit:1.2"
testCompile "org.codehaus.woodstox:wstx-asl:3.2.7"
}
}
project('spring-beans') {
description = 'Spring Beans'
dependencies {
compile project(":spring-core")
compile("javax.el:el-api:1.0", provided)
compile("javax.inject:javax.inject:1", provided)
compile("cglib:cglib-nodep:2.2", optional)
}
}
project('spring-aop') {
description = 'Spring AOP'
dependencies {
compile project(":spring-core")
compile project(":spring-beans")
compile("com.jamonapi:jamon:2.4", optional)
compile("aopalliance:aopalliance:1.0", optional)
compile("commons-pool:commons-pool:1.5.3", optional)
}
}
project('spring-expression') {
description = 'Spring Expression Language (SpEL)'
dependencies {
compile project(":spring-core")
}
}
project('spring-instrument') {
description = 'Spring Instrument'
dependencies {
compile project(":spring-core")
}
}
project('spring-instrument-tomcat') {
description = 'Spring Instrument Tomcat'
dependencies {
compile("org.apache.tomcat:catalina:6.0.16", provided)
}
}
project('spring-context') {
description = 'Spring Context'
dependencies {
compile(project(":spring-instrument"), optional)
compile project(":spring-aop")
compile project(":spring-beans")
compile project(":spring-expression")
compile project(":spring-core")
compile("backport-util-concurrent:backport-util-concurrent:3.0", optional)
compile("javax.annotation:jsr250-api:1.0", optional)
compile("javax.ejb:ejb-api:3.0", optional)
compile("javax.inject:javax.inject:1", optional)
compile("org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1", optional)
compile("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1", optional)
compile("javax.persistence:persistence-api:1.0", optional)
compile("javax.validation:validation-api:1.0.0.GA", optional)
compile("javax.xml.ws:jaxws-api:2.1-1") { dep ->
optional dep
exclude group: 'javax.jws', module: 'jsr181'
}
compile("org.beanshell:bsh:2.0b4", optional)
compile("org.codehaus.groovy:groovy-all:1.6.3", optional)
compile("org.jruby:jruby:1.4.0", optional)
compile("org.hibernate:hibernate-validator:4.2.0.Final") { dep ->
optional dep
exclude group: 'org.slf4j', module: 'slf4j-api'
}
compile("joda-time:joda-time:1.6", optional)
compile("javax.cache:cache-api:0.5", optional)
compile("net.sf.ehcache:ehcache-core:2.0.0", optional)
compile("org.slf4j:slf4j-api:1.6.1", optional)
compile("org.codehaus.jsr166-mirror:jsr166:1.7.0", provided)
testCompile "commons-dbcp:commons-dbcp:1.2.2"
testCompile("javax.xml:jaxrpc-api:1.1")
testCompile("javax.inject:com.springsource.org.atinject.tck:1.0.0")
}
test {
jvmArgs = ['-disableassertions:org.aspectj.weaver.UnresolvedType'] // SPR-7989
}
}
project('spring-tx') {
description = 'Spring Transaction'
dependencies {
compile(project(":spring-context"), optional) // for JCA, @EnableTransactionManagement
compile(project(":spring-aop"), optional)
compile project(":spring-beans")
compile project(":spring-core")
compile("com.ibm.websphere:uow:6.0.2.17", provided)
compile("javax.resource:connector-api:1.5", optional)
compile "aopalliance:aopalliance:1.0" // NOT optional, as opposed to in :spring-aop
compile("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1", optional)
testCompile "org.easymock:easymockclassextension:2.3"
}
}
project('spring-oxm') {
description = 'Spring Object/XML Marshalling'
apply from: 'oxm.gradle'
dependencies {
compile project(":spring-beans")
compile project(":spring-core")
compile(project(":spring-context"), optional) // for Jaxb2Marshaller
compile "commons-lang:commons-lang:2.5"
compile("com.thoughtworks.xstream:xstream:1.3.1", optional)
compile("com.sun.xml.bind:jaxb-impl:2.1.7", optional)
compile("org.jibx:jibx-run:1.2.3", optional)
compile("org.apache.xmlbeans:xmlbeans:2.4.0", optional)
compile("org.codehaus.castor:castor-xml:1.3.2", optional)
testCompile "org.codehaus.jettison:jettison:1.0.1"
testCompile "xmlunit:xmlunit:1.2"
testCompile "xmlpull:xmlpull:1.1.3.4a"
testCompile(files(genCastor.classesDir).builtBy(genCastor))
testCompile(files(genJaxb.classesDir).builtBy(genJaxb))
testCompile(files(genXmlbeans.classesDir).builtBy(genXmlbeans))
}
}
project('spring-jms') {
description = 'Spring JMS'
dependencies {
compile project(":spring-core")
compile project(":spring-beans")
compile project(":spring-aop")
compile project(":spring-context")
compile project(":spring-tx")
compile(project(":spring-oxm"), optional)
compile("org.codehaus.jackson:jackson-mapper-asl:1.4.2", optional)
}
}
project('spring-jdbc') {
description = 'Spring JDBC'
dependencies {
compile project(":spring-core")
compile project(":spring-beans")
compile(project(":spring-context"), optional) // for JndiDataSourceLookup
compile project(":spring-tx")
compile("c3p0:c3p0:0.9.1.2", optional)
compile("hsqldb:hsqldb:1.8.0.7", optional)
compile("com.h2database:h2:1.0.71", optional)
compile("org.apache.derby:derby:10.5.3.0_1", optional)
compile("org.apache.derby:derbyclient:10.5.3.0_1", optional)
compile("org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1", optional)
}
}
project('spring-context-support') {
description = 'Spring Context Support'
dependencies {
compile project(":spring-core")
compile project(":spring-beans")
compile project(":spring-context")
compile(project(":spring-jdbc"), optional) // for Quartz support
compile(project(":spring-tx"), optional) // for Quartz support
compile("org.codehaus.fabric3.api:commonj:1.1.0", optional)
compile("opensymphony:quartz:1.6.2", optional)
compile("javax.mail:mail:1.4", optional)
compile("velocity:velocity:1.5", optional)
compile("commons-collections:commons-collections:3.2", optional)
compile("org.freemarker:freemarker:2.3.15", optional)
compile("jasperreports:jasperreports:2.0.5") { dep ->
optional dep
transitive = false
}
compile("commons-digester:commons-digester:1.8.1", optional)
compile("commons-beanutils:commons-beanutils:1.8.0", optional)
compile("com.lowagie:itext:2.0.8", optional)
testCompile "hsqldb:hsqldb:1.8.0.10"
testCompile("org.apache.poi:poi:3.0.2-FINAL") {
exclude group: 'log4j', module: 'log4j'
}
}
// pick up **/*.types files in src/main
sourceSets.main.resources.srcDirs += 'src/main/java'
}
project('spring-web') {
description = 'Spring Web'
dependencies {
compile project(":spring-core")
compile project(":spring-beans") // for MultiPartFilter
compile project(":spring-aop") // for JaxWsPortProxyFactoryBean
compile project(":spring-context")
compile(project(":spring-oxm"), optional) // for MarshallingHttpMessageConverter
compile("com.caucho:hessian:3.2.1", optional)
compile("rome:rome:1.0", optional)
compile("javax.el:el-api:1.0", optional)
compile("javax.faces:jsf-api:1.2_08", optional)
compile("javax.portlet:portlet-api:2.0", provided)
compile("org.apache.tomcat:tomcat-servlet-api:7.0.8", provided) // servlet-api 3.0
compile("javax.servlet.jsp:jsp-api:2.1", provided)
compile("javax.xml.soap:saaj-api:1.3", provided)
compile("axis:axis:1.4", optional)
compile("commons-fileupload:commons-fileupload:1.2", optional)
runtime("commons-io:commons-io:1.3", optional)
compile("commons-httpclient:commons-httpclient:3.1", optional)
compile("org.apache.httpcomponents:httpclient:4.1.1", optional)
compile("org.codehaus.jackson:jackson-mapper-asl:1.4.2", optional)
compile("com.fasterxml.jackson.core:jackson-databind:2.0.1", optional)
compile("taglibs:standard:1.1.2", optional)
compile("org.mortbay.jetty:jetty:6.1.9") { dep ->
optional dep
exclude group: 'org.mortbay.jetty', module: 'servlet-api-2.5'
}
testCompile "xmlunit:xmlunit:1.2"
}
// pick up ContextLoader.properties in src/main
sourceSets.main.resources.srcDirs += 'src/main/java'
}
project('spring-orm') {
description = 'Spring Object/Relational Mapping'
dependencies {
// compiling against both hibernate 3 and 4 here in order to support
// our respective orm.hibernate3 and orm.hibernate4 packages
compile("org.hibernate:com.springsource.org.hibernate:3.3.1.GA", optional)
compile("org.hibernate:hibernate-core:4.1.0.Final", optional)
compile("org.hibernate:hibernate-cglib-repack:2.1_3", optional)
compile("org.hibernate:hibernate-annotations:3.4.0.GA", optional)
compile("org.hibernate:hibernate-entitymanager:4.1.0.Final", optional)
compile("org.apache.openjpa:openjpa:1.1.0", optional)
compile("org.eclipse.persistence:org.eclipse.persistence.core:1.0.1", optional)
compile("org.eclipse.persistence:org.eclipse.persistence.jpa:1.0.1", optional)
compile("toplink.essentials:toplink-essentials:2.0-41b", optional)
compile("javax.jdo:jdo-api:3.0", optional)
compile("org.apache.ibatis:ibatis-sqlmap:2.3.4.726", optional)
testCompile "javax.servlet:servlet-api:2.5"
testCompile "org.slf4j:slf4j-jcl:1.5.3"
testCompile "commons-dbcp:commons-dbcp:1.2.2"
testCompile "org.eclipse.persistence:org.eclipse.persistence.asm:1.0.1"
testCompile "org.eclipse.persistence:org.eclipse.persistence.antlr:1.0.1"
compile(project(":spring-web")) {
exclude group: 'javax.persistence', module: 'persistence-api'
}
compile project(":spring-core")
compile project(":spring-beans")
compile(project(":spring-aop"), optional)
compile(project(":spring-context"), optional)
compile project(":spring-tx")
compile project(":spring-jdbc")
}
}
project('spring-webmvc') {
description = 'Spring Web MVC'
dependencies {
compile project(":spring-core")
compile project(":spring-expression")
compile project(":spring-beans")
compile project(":spring-web")
compile project(":spring-context")
compile(project(":spring-context-support"), optional) // for Velocity support
compile(project(":spring-oxm"), optional) // for MarshallingView
compile("org.apache.tiles:tiles-api:2.1.2", optional)
compile("org.apache.tiles:tiles-core:2.1.2", optional)
compile("org.apache.tiles:tiles-jsp:2.1.2", optional)
compile("org.apache.tiles:tiles-servlet:2.1.2", optional)
compile("velocity-tools:velocity-tools-view:1.4", optional)
compile("net.sourceforge.jexcelapi:jxl:2.6.3") { dep ->
optional dep
exclude group: 'log4j', module: 'log4j'
}
compile("org.apache.poi:poi:3.0.2-FINAL") { dep ->
optional dep
exclude group: 'log4j', module: 'log4j'
}
compile("javax.servlet:jstl:1.1.2", provided)
compile("org.apache.tomcat:tomcat-servlet-api:7.0.8", provided) // servlet-api 3.0
testCompile project(":spring-aop")
testCompile("org.slf4j:slf4j-log4j12:1.6.1") {
exclude group: 'log4j', module: 'log4j'
}
testCompile "rhino:js:1.7R1"
testCompile "xmlunit:xmlunit:1.2"
testCompile("dom4j:dom4j:1.6.1") {
exclude group: 'xml-apis', module: 'xml-apis'
}
testCompile("jaxen:jaxen:1.1.1") {
exclude group: 'xml-apis', module: 'xml-apis'
exclude group: 'xom', module: 'xom'
exclude group: 'xerces', module: 'xercesImpl'
}
}
// pick up DispatcherServlet.properties in src/main
sourceSets.main.resources.srcDirs += 'src/main/java'
}
project('spring-webmvc-portlet') {
description = 'Spring Web Portlet'
dependencies {
compile("javax.servlet:servlet-api:2.5", provided)
compile project(":spring-core")
compile project(":spring-beans")
compile project(":spring-context")
compile project(":spring-web")
compile project(":spring-webmvc")
}
// pick up DispatcherPortlet.properties in src/main
sourceSets.main.resources.srcDirs += 'src/main/java'
}
project('spring-test') {
description = 'Spring TestContext Framework'
dependencies {
compile project(":spring-core")
compile(project(":spring-beans"), optional)
compile(project(":spring-context"), optional)
compile(project(":spring-jdbc"), optional)
compile(project(":spring-tx"), optional)
compile(project(":spring-orm"), optional)
compile(project(":spring-web"), optional)
compile(project(":spring-webmvc"), optional)
compile(project(":spring-webmvc-portlet"), optional)
compile("junit:junit:4.10", optional)
compile("org.testng:testng:6.5.2", optional)
compile("javax.servlet:servlet-api:2.5", optional)
compile("javax.servlet.jsp:jsp-api:2.1", optional)
compile("javax.portlet:portlet-api:2.0", optional)
compile("javax.activation:activation:1.0", provided)
testCompile "org.slf4j:slf4j-jcl:1.5.3"
}
}
project('spring-struts') {
description = 'Spring Struts'
dependencies {
compile project(":spring-core")
compile project(":spring-beans")
compile project(":spring-context")
compile project(":spring-web")
compile project(":spring-webmvc")
compile "struts:struts:1.2.9"
compile "commons-beanutils:commons-beanutils:1.7.0"
compile("javax.servlet:servlet-api:2.5", provided)
testCompile project(":spring-test")
}
}
project('spring-aspects') {
description = 'Spring Aspects'
apply from: 'aspects.gradle'
dependencies {
compile project(":spring-core")
compile project(":spring-tx")
compile project(":spring-orm")
aspects project(":spring-orm")
ajc "org.aspectj:aspectjtools:${aspectjVersion}"
compile "org.aspectj:aspectjrt:${aspectjVersion}"
testCompile project(":spring-test")
}
eclipse.project {
natures += 'org.eclipse.ajdt.ui.ajnature'
buildCommands = [new org.gradle.plugins.ide.eclipse.model.
BuildCommand('org.eclipse.ajdt.core.ajbuilder')]
}
}
configure(rootProject) {
description = 'Spring Framework'
apply plugin: 'docbook-reference'
reference {
sourceDir = file('src/reference/docbook')
}
// don't publish the default jar for the root project
configurations.archives.artifacts.clear()
dependencies { // for integration tests
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")
testCompile "org.hibernate:hibernate-core:4.1.0.Final"
testCompile "javax.servlet:servlet-api:2.5"
}
task api(type: Javadoc) {
group = 'Documentation'
description = 'Generates aggregated Javadoc API documentation.'
title = "${rootProject.description} ${version} API"
options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
options.author = true
options.header = rootProject.description
options.overview = 'src/api/overview.html'
options.links(
'http://docs.jboss.org/jbossas/javadoc/4.0.5/connector'
)
source subprojects.collect { project ->
project.sourceSets.main.allJava
}
destinationDir = new File(buildDir, "api")
classpath = files(subprojects.collect { project ->
project.sourceSets.main.compileClasspath
})
maxMemory = '1024m'
}
task docsZip(type: Zip) {
group = 'Distribution'
classifier = 'docs'
description = "Builds -${classifier} archive containing api and reference " +
"for deployment at static.springframework.org/spring-framework/docs."
from('src/dist') {
include 'changelog.txt'
}
from (api) {
into 'api'
}
from (reference) {
into 'reference'
}
}
task schemaZip(type: Zip) {
group = 'Distribution'
classifier = 'schema'
description = "Builds -${classifier} archive containing all " +
"XSDs for deployment at static.springframework.org/schema."
subprojects.each { subproject ->
def Properties schemas = new Properties();
subproject.sourceSets.main.resources.find {
it.path.endsWith('META-INF/spring.schemas')
}?.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]) {
group = 'Distribution'
classifier = 'dist'
description = "Builds -${classifier} archive, containing all jars and docs, " +
"suitable for community download page."
def baseDir = "${project.name}-${project.version}";
from('src/dist') {
include 'readme.txt'
include 'license.txt'
include 'notice.txt'
into "${baseDir}"
expand(copyright: new Date().format('yyyy'), version: project.version)
}
from(zipTree(docsZip.archivePath)) {
into "${baseDir}/docs"
}
from(zipTree(schemaZip.archivePath)) {
into "${baseDir}/schema"
}
subprojects.each { subproject ->
into ("${baseDir}/libs") {
from subproject.jar
if (subproject.tasks.findByPath('sourcesJar')) {
from subproject.sourcesJar
}
if (subproject.tasks.findByPath('javadocJar')) {
from subproject.javadocJar
}
}
}
}
artifacts {
archives docsZip
archives schemaZip
archives distZip
}
task wrapper(type: Wrapper) {
description = 'Generates gradlew[.bat] scripts'
gradleVersion = '1.0-rc-3'
}
}