import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id "com.github.johnrengelman.shadow" version "5.2.0" } description = "Spring Core" apply plugin: "kotlin" // spring-core includes asm and repackages cglib, inlining both into the spring-core jar. // cglib itself depends on asm and is therefore further transformed by the JarJar task to // depend on org.springframework.asm; this avoids including two different copies of asm. def cglibVersion = "3.3.0" def objenesisVersion = "3.1" configurations { cglib objenesis coroutines } task cglibRepackJar(type: ShadowJar) { archiveBaseName = 'spring-cglib-repack' archiveVersion = cglibVersion configurations = [project.configurations.cglib] relocate 'net.sf.cglib', 'org.springframework.cglib' relocate 'org.objectweb.asm', 'org.springframework.asm' } task objenesisRepackJar(type: ShadowJar) { archiveBaseName = 'spring-objenesis-repack' archiveVersion = objenesisVersion configurations = [project.configurations.objenesis] relocate 'org.objenesis', 'org.springframework.objenesis' } dependencies { cglib("cglib:cglib:${cglibVersion}@jar") objenesis("org.objenesis:objenesis:${objenesisVersion}@jar") coroutines(project(path: ":kotlin-coroutines", configuration: 'classesOnlyElements')) compile(files(cglibRepackJar)) compile(files(objenesisRepackJar)) compile(project(":spring-jcl")) compileOnly(project(":kotlin-coroutines")) compileOnly("io.projectreactor.tools:blockhound") optional("net.sf.jopt-simple:jopt-simple") optional("org.aspectj:aspectjweaver") optional("org.jetbrains.kotlin:kotlin-reflect") optional("org.jetbrains.kotlin:kotlin-stdlib") optional("io.projectreactor:reactor-core") optional("io.reactivex:rxjava") optional("io.reactivex:rxjava-reactive-streams") optional("io.reactivex.rxjava2:rxjava") optional("io.reactivex.rxjava3:rxjava") optional("io.netty:netty-buffer") testCompile("io.projectreactor:reactor-test") testCompile("com.google.code.findbugs:jsr305") testCompile("javax.annotation:javax.annotation-api") testCompile("javax.xml.bind:jaxb-api") testCompile("com.fasterxml.woodstox:woodstox-core") testCompile("org.xmlunit:xmlunit-assertj") testCompile("org.xmlunit:xmlunit-matchers") testCompile(project(":kotlin-coroutines")) testCompile("io.projectreactor.tools:blockhound") testFixturesImplementation("io.projectreactor:reactor-test") testFixturesImplementation("com.google.code.findbugs:jsr305") testFixturesImplementation("org.junit.platform:junit-platform-launcher") testFixturesImplementation("org.junit.jupiter:junit-jupiter-api") testFixturesImplementation("org.junit.jupiter:junit-jupiter-params") testFixturesImplementation("org.assertj:assertj-core") testFixturesImplementation("org.xmlunit:xmlunit-assertj") } jar { reproducibleFileOrder = true preserveFileTimestamps = false // maybe not necessary here, but good for reproducibility manifest.attributes["Dependencies"] = "jdk.unsupported" // JBoss modules // Inline repackaged cglib classes directly into spring-core jar dependsOn cglibRepackJar from(zipTree(cglibRepackJar.archivePath)) { include "org/springframework/cglib/**" exclude "org/springframework/cglib/core/AbstractClassGenerator*.class" exclude "org/springframework/cglib/core/AsmApi*.class" exclude "org/springframework/cglib/core/KeyFactory.class" exclude "org/springframework/cglib/core/KeyFactory\$*.class" exclude "org/springframework/cglib/core/ReflectUtils*.class" exclude "org/springframework/cglib/proxy/Enhancer*.class" exclude "org/springframework/cglib/proxy/MethodProxy*.class" } dependsOn objenesisRepackJar from(zipTree(objenesisRepackJar.archivePath)) { include "org/springframework/objenesis/**" } from configurations.coroutines } test { // Make sure the classes dir is used on the test classpath (required by ResourceTests) // When test fixtures are involved, the JAR is used by default classpath = sourceSets.main.output.classesDirs + classpath - files(jar.archiveFile) }