Prior to this commit, native images would dynamically check for the presence of `jakarta.inject.*` annotations and might fail at runtime or miss them entirely. This change ensures that if such classes are present during the AOT build, relevant runtime hints are registered so that these annotations can be read at runtime. Closes gh-28614
123 lines
4.7 KiB
Groovy
123 lines
4.7 KiB
Groovy
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
|
|
|
description = "Spring Core"
|
|
|
|
apply plugin: "kotlin"
|
|
|
|
// spring-core includes asm, javapoet and repackages cglib, inlining all into the
|
|
// spring-core jar. cglib itself depends on asm and is therefore further transformed by
|
|
// the ShadowJar task to depend on org.springframework.asm; this avoids including two
|
|
// different copies of asm.
|
|
def cglibVersion = "3.3.0"
|
|
def javapoetVersion = "1.13.0"
|
|
def objenesisVersion = "3.2"
|
|
|
|
configurations {
|
|
cglib
|
|
javapoet
|
|
objenesis
|
|
}
|
|
|
|
task cglibRepackJar(type: ShadowJar) {
|
|
archiveBaseName.set('spring-cglib-repack')
|
|
archiveVersion.set(cglibVersion)
|
|
configurations = [project.configurations.cglib]
|
|
relocate 'net.sf.cglib', 'org.springframework.cglib'
|
|
relocate 'org.objectweb.asm', 'org.springframework.asm'
|
|
}
|
|
|
|
task javapoetRepackJar(type: ShadowJar) {
|
|
archiveBaseName.set('spring-javapoet-repack')
|
|
archiveVersion.set(javapoetVersion)
|
|
configurations = [project.configurations.javapoet]
|
|
relocate 'com.squareup.javapoet', 'org.springframework.javapoet'
|
|
}
|
|
|
|
task objenesisRepackJar(type: ShadowJar) {
|
|
archiveBaseName.set('spring-objenesis-repack')
|
|
archiveVersion.set(objenesisVersion)
|
|
configurations = [project.configurations.objenesis]
|
|
relocate 'org.objenesis', 'org.springframework.objenesis'
|
|
}
|
|
|
|
dependencies {
|
|
cglib("cglib:cglib:${cglibVersion}@jar")
|
|
javapoet("com.squareup:javapoet:${javapoetVersion}@jar")
|
|
objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")
|
|
api(files(cglibRepackJar))
|
|
api(files(javapoetRepackJar))
|
|
api(files(objenesisRepackJar))
|
|
api(project(":spring-jcl"))
|
|
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("org.jetbrains.kotlinx:kotlinx-coroutines-core")
|
|
optional("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
|
|
optional("io.projectreactor:reactor-core")
|
|
optional("io.reactivex.rxjava3:rxjava")
|
|
optional("io.smallrye.reactive:mutiny")
|
|
optional("io.netty:netty-buffer")
|
|
testImplementation("jakarta.annotation:jakarta.annotation-api")
|
|
testImplementation("jakarta.inject:jakarta.inject-api")
|
|
testImplementation("jakarta.xml.bind:jakarta.xml.bind-api")
|
|
testImplementation("com.google.code.findbugs:jsr305")
|
|
testImplementation("com.fasterxml.woodstox:woodstox-core")
|
|
testImplementation("org.xmlunit:xmlunit-assertj")
|
|
testImplementation("org.xmlunit:xmlunit-matchers")
|
|
testImplementation("io.projectreactor:reactor-test")
|
|
testImplementation("io.projectreactor.tools:blockhound")
|
|
testImplementation("org.skyscreamer:jsonassert")
|
|
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")
|
|
testFixturesImplementation("io.projectreactor:reactor-test")
|
|
}
|
|
|
|
jar {
|
|
reproducibleFileOrder = true
|
|
preserveFileTimestamps = false // maybe not necessary here, but good for reproducibility
|
|
manifest.attributes["Dependencies"] = "jdk.unsupported" // for WildFly (-> Objenesis 3.2)
|
|
|
|
// Inline repackaged cglib classes directly into spring-core jar
|
|
dependsOn cglibRepackJar
|
|
from(zipTree(cglibRepackJar.archivePath)) {
|
|
include "org/springframework/cglib/**"
|
|
exclude "org/springframework/cglib/beans/BeanMap.class"
|
|
exclude "org/springframework/cglib/beans/BeanMap\$*.class"
|
|
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 javapoetRepackJar
|
|
from(zipTree(javapoetRepackJar.archivePath)) {
|
|
include "org/springframework/javapoet/**"
|
|
}
|
|
|
|
dependsOn objenesisRepackJar
|
|
from(zipTree(objenesisRepackJar.archivePath)) {
|
|
include "org/springframework/objenesis/**"
|
|
}
|
|
}
|
|
|
|
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 + files(sourceSets.main.output.resourcesDir) + classpath - files(jar.archiveFile)
|
|
|
|
// Ensure that BlockHound tests run on JDK 13+. For details, see:
|
|
// https://github.com/reactor/BlockHound/issues/33
|
|
jvmArgs += [
|
|
"-XX:+AllowRedefinitionToAddDeleteMethods"
|
|
]
|
|
}
|