Skip to content

Commit

Permalink
Resolve Gradle deprecation warnings
Browse files Browse the repository at this point in the history
* Use `optional` and `provided` variants instead of `registerFeature`
* Simplify setting `<scope>provided</scope>` for generate POM
* Use lazy-load for `Javadoc.classpath` to avoid early configuration resolution
* Use actual Mark Fisher's e-mail for author. Thank you, Mark!

**Auto-cherry-pick to `6.2.x`**
  • Loading branch information
artembilan committed Aug 5, 2024
1 parent 3933605 commit 6ae8f73
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 58 deletions.
136 changes: 79 additions & 57 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,30 @@ configure(javaProjects) { subproject ->

apply from: "${rootDir}/gradle/publish-maven.gradle"

def scopeAttribute = Attribute.of('dependency.scope', String)

configurations {
optional {
attributes {
attribute(scopeAttribute, 'optional')
}
}
provided {
attributes {
attribute(scopeAttribute, 'provided')
}
}
}

components.java.with {
it.addVariantsFromConfiguration(configurations.optional) {
mapToOptional()
}
it.addVariantsFromConfiguration(configurations.provided) {
mapToMavenScope('compile') // This is temporary. Gradle doesn't natively support the provided scope
}
}

sourceSets {
test {
resources {
Expand All @@ -212,15 +236,16 @@ configure(javaProjects) { subproject ->
}
}

[configurations.optional, configurations.provided].each { scoped ->
sourceSets.all {
compileClasspath += scoped
runtimeClasspath += scoped
}
}

java {
withJavadocJar()
withSourcesJar()
registerFeature('optional') {
usingSourceSet(sourceSets.main)
}
registerFeature('provided') {
usingSourceSet(sourceSets.main)
}
}

compileJava {
Expand Down Expand Up @@ -256,6 +281,10 @@ configure(javaProjects) { subproject ->

// dependencies that are common across all java projects
dependencies {
attributesSchema {
attribute(scopeAttribute)
}

if (!(subproject.name ==~ /.*-test.*/)) {
testImplementation(project(':spring-integration-test-support')) {
exclude group: 'org.hamcrest'
Expand Down Expand Up @@ -426,14 +455,8 @@ configure(javaProjects) { subproject ->
from components.java
pom.withXml {
def pomDeps = asNode().dependencies.first()
subproject.configurations.providedImplementation.allDependencies.each { dep ->
pomDeps.remove(pomDeps.'*'.find { it.artifactId.text() == dep.name })
pomDeps.appendNode('dependency').with {
it.appendNode('groupId', dep.group)
it.appendNode('artifactId', dep.name)
it.appendNode('version', dep.version)
it.appendNode('scope', 'provided')
}
subproject.configurations.provided.allDependencies.each { dep ->
pomDeps.'*'.find { it.artifactId.text() == dep.name }.scope.first().value = 'provided'
}
}
}
Expand All @@ -451,19 +474,19 @@ project('spring-integration-test-support') {
api 'org.springframework:spring-context'
api 'org.springframework:spring-messaging'
api 'org.springframework:spring-test'
optionalApi("junit:junit:$junit4Version") {
optional("junit:junit:$junit4Version") {
exclude group: 'org.hamcrest'
}
optionalApi 'org.junit.jupiter:junit-jupiter-api'
optionalApi 'org.apache.logging.log4j:log4j-core'
optional 'org.junit.jupiter:junit-jupiter-api'
optional 'org.apache.logging.log4j:log4j-core'
}
}

project('spring-integration-amqp') {
description = 'Spring Integration AMQP Support'
dependencies {
api 'org.springframework.amqp:spring-rabbit'
optionalApi 'org.springframework.amqp:spring-rabbit-stream'
optional 'org.springframework.amqp:spring-rabbit-stream'

testImplementation 'org.springframework.amqp:spring-rabbit-junit'
testImplementation project(':spring-integration-stream')
Expand Down Expand Up @@ -514,23 +537,23 @@ project('spring-integration-core') {
api 'io.projectreactor:reactor-core'
api 'io.micrometer:micrometer-observation'

optionalApi 'com.fasterxml.jackson.core:jackson-databind'
optionalApi 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'
optionalApi 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
optionalApi 'com.fasterxml.jackson.datatype:jackson-datatype-joda'
optionalApi('com.fasterxml.jackson.module:jackson-module-kotlin') {
optional 'com.fasterxml.jackson.core:jackson-databind'
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'
optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda'
optional('com.fasterxml.jackson.module:jackson-module-kotlin') {
exclude group: 'org.jetbrains.kotlin'
}
optionalApi "com.google.protobuf:protobuf-java:$protobufVersion"
optionalApi "com.jayway.jsonpath:json-path:$jsonpathVersion"
optionalApi "com.esotericsoftware:kryo:$kryoVersion"
optionalApi 'io.micrometer:micrometer-core'
optionalApi('io.micrometer:micrometer-tracing') {
optional "com.google.protobuf:protobuf-java:$protobufVersion"
optional "com.jayway.jsonpath:json-path:$jsonpathVersion"
optional "com.esotericsoftware:kryo:$kryoVersion"
optional 'io.micrometer:micrometer-core'
optional('io.micrometer:micrometer-tracing') {
exclude group: 'aopalliance'
}
optionalApi "io.github.resilience4j:resilience4j-ratelimiter:$resilience4jVersion"
optionalApi "org.apache.avro:avro:$avroVersion"
optionalApi 'org.jetbrains.kotlinx:kotlinx-coroutines-reactor'
optional "io.github.resilience4j:resilience4j-ratelimiter:$resilience4jVersion"
optional "org.apache.avro:avro:$avroVersion"
optional 'org.jetbrains.kotlinx:kotlinx-coroutines-reactor'

testImplementation "com.google.protobuf:protobuf-java-util:$protobufVersion"
testImplementation "org.aspectj:aspectjweaver:$aspectjVersion"
Expand All @@ -543,7 +566,7 @@ project('spring-integration-core') {
}

dokkaHtmlPartial {
outputDirectory.set(new File(buildDir, 'kdoc'))
outputDirectory.set(new File('build', 'kdoc'))
dokkaSourceSets {
main {
sourceRoots.setFrom(file('src/main/kotlin'))
Expand Down Expand Up @@ -618,7 +641,7 @@ project('spring-integration-ftp') {
api project(':spring-integration-file')
api "commons-net:commons-net:$commonsNetVersion"
api 'org.springframework:spring-context-support'
optionalApi "org.apache.ftpserver:ftpserver-core:$ftpServerVersion"
optional "org.apache.ftpserver:ftpserver-core:$ftpServerVersion"

testImplementation project(':spring-integration-file').sourceSets.test.output
}
Expand Down Expand Up @@ -677,9 +700,9 @@ project('spring-integration-http') {
description = 'Spring Integration HTTP Support'
dependencies {
api 'org.springframework:spring-webmvc'
providedImplementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion"
optionalApi "com.rometools:rome:$romeToolsVersion"
optionalApi 'org.springframework:spring-webflux'
provided "jakarta.servlet:jakarta.servlet-api:$servletApiVersion"
optional "com.rometools:rome:$romeToolsVersion"
optional 'org.springframework:spring-webflux'

testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
testImplementation 'org.springframework.security:spring-security-messaging'
Expand Down Expand Up @@ -711,7 +734,7 @@ project('spring-integration-jdbc') {
description = 'Spring Integration JDBC Support'
dependencies {
api 'org.springframework:spring-jdbc'
optionalApi "org.postgresql:postgresql:$postgresVersion"
optional "org.postgresql:postgresql:$postgresVersion"

testImplementation "com.h2database:h2:$h2Version"
testImplementation "org.hsqldb:hsqldb:$hsqldbVersion"
Expand All @@ -736,7 +759,7 @@ project('spring-integration-jms') {
description = 'Spring Integration JMS Support'
dependencies {
api 'org.springframework:spring-jms'
providedImplementation "jakarta.jms:jakarta.jms-api:$jmsApiVersion"
provided "jakarta.jms:jakarta.jms-api:$jmsApiVersion"

testImplementation("org.apache.activemq:artemis-server:$artemisVersion") {
exclude group: 'org.jboss.logmanager'
Expand All @@ -759,7 +782,7 @@ project('spring-integration-jpa') {
description = 'Spring Integration JPA Support'
dependencies {
api 'org.springframework:spring-orm'
optionalApi "jakarta.persistence:jakarta.persistence-api:$jpaApiVersion"
optional "jakarta.persistence:jakarta.persistence-api:$jpaApiVersion"

testImplementation 'org.springframework.data:spring-data-jpa'
testImplementation "com.h2database:h2:$h2Version"
Expand All @@ -782,7 +805,7 @@ project('spring-integration-mail') {
dependencies {
api 'org.springframework:spring-context-support'

providedImplementation "org.eclipse.angus:jakarta.mail:$mailVersion"
provided "org.eclipse.angus:jakarta.mail:$mailVersion"

testImplementation "com.icegreen:greenmail:$greenmailVersion"

Expand All @@ -795,8 +818,8 @@ project('spring-integration-mongodb') {
dependencies {
api 'org.springframework.data:spring-data-mongodb'

optionalApi "org.mongodb:mongodb-driver-sync:$mongoDriverVersion"
optionalApi "org.mongodb:mongodb-driver-reactivestreams:$mongoDriverVersion"
optional "org.mongodb:mongodb-driver-sync:$mongoDriverVersion"
optional "org.mongodb:mongodb-driver-reactivestreams:$mongoDriverVersion"

testImplementation 'org.testcontainers:mongodb'
}
Expand All @@ -817,7 +840,7 @@ project('spring-integration-mqtt') {
dependencies {
api "org.eclipse.paho:org.eclipse.paho.client.mqttv3:$pahoMqttClientVersion"

optionalApi "org.eclipse.paho:org.eclipse.paho.mqttv5.client:$pahoMqttClientVersion"
optional "org.eclipse.paho:org.eclipse.paho.mqttv5.client:$pahoMqttClientVersion"

testImplementation project(':spring-integration-jmx')
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
Expand Down Expand Up @@ -847,9 +870,9 @@ project('spring-integration-rsocket') {
project('spring-integration-scripting') {
description = 'Spring Integration Scripting Support'
dependencies {
optionalApi 'org.jetbrains.kotlin:kotlin-scripting-jsr223'
providedImplementation "org.graalvm.sdk:graal-sdk:$graalvmVersion"
providedImplementation "org.graalvm.polyglot:js:$graalvmVersion"
optional 'org.jetbrains.kotlin:kotlin-scripting-jsr223'
provided "org.graalvm.sdk:graal-sdk:$graalvmVersion"
provided "org.graalvm.polyglot:js:$graalvmVersion"

testImplementation "org.jruby:jruby-complete:$jrubyVersion"
testImplementation 'org.apache.groovy:groovy-jsr223'
Expand Down Expand Up @@ -893,7 +916,7 @@ project('spring-integration-smb') {
project('spring-integration-stomp') {
description = 'Spring Integration STOMP Support'
dependencies {
optionalApi 'org.springframework:spring-websocket'
optional 'org.springframework:spring-websocket'

testImplementation project(':spring-integration-websocket')
testImplementation project(':spring-integration-websocket').sourceSets.test.output
Expand Down Expand Up @@ -945,7 +968,7 @@ project('spring-integration-webflux') {
exclude group: 'org.springframework', module: 'spring-webmvc'
}
api 'org.springframework:spring-webflux'
optionalApi 'io.projectreactor.netty:reactor-netty-http'
optional 'io.projectreactor.netty:reactor-netty-http'

testImplementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion"
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
Expand All @@ -968,8 +991,8 @@ project('spring-integration-websocket') {
description = 'Spring Integration WebSockets Support'
dependencies {
api 'org.springframework:spring-websocket'
optionalApi 'org.springframework:spring-webmvc'
providedImplementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion"
optional 'org.springframework:spring-webmvc'
provided "jakarta.servlet:jakarta.servlet-api:$servletApiVersion"

testImplementation project(':spring-integration-event')
testImplementation "org.apache.tomcat.embed:tomcat-embed-websocket:$tomcatVersion"
Expand All @@ -994,7 +1017,7 @@ project('spring-integration-ws') {
exclude group: 'org.glassfish.jaxb'
}

providedImplementation "com.sun.xml.bind:jaxb-impl:$jaxbVersion"
provided "com.sun.xml.bind:jaxb-impl:$jaxbVersion"

testImplementation "com.thoughtworks.xstream:xstream:$xstreamVersion"
testImplementation('org.springframework.ws:spring-ws-support') {
Expand All @@ -1015,7 +1038,7 @@ project('spring-integration-xml') {
api('org.springframework.ws:spring-xml') {
exclude group: 'org.springframework'
}
optionalApi('org.springframework.ws:spring-ws-core') {
optional('org.springframework.ws:spring-ws-core') {
exclude group: 'org.springframework'
}

Expand Down Expand Up @@ -1045,7 +1068,7 @@ project('spring-integration-zeromq') {
dependencies {
api "org.zeromq:jeromq:$jeroMqVersion"

optionalApi 'com.fasterxml.jackson.core:jackson-databind'
optional 'com.fasterxml.jackson.core:jackson-databind'
}
}

Expand Down Expand Up @@ -1109,10 +1132,9 @@ tasks.register('api', Javadoc) {
source javaProjects.collect { project ->
project.sourceSets.main.allJava
}
destinationDir = new File(buildDir, 'api')
classpath = files(javaProjects.collect { project ->
project.sourceSets.main.compileClasspath
})
destinationDir = new File('build', 'api')
classpath = files().from { files(javaProjects.collect { it.sourceSets.main.compileClasspath }) }

}

dokkaHtmlMultiModule {
Expand Down
2 changes: 1 addition & 1 deletion gradle/publish-maven.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ publishing {
developer {
id = 'markfisher'
name = 'Mark Fisher'
email = 'mark.fisher@broadcom.com'
email = 'mark.ryan.fisher@gmail.com'
roles = ['project founder and lead emeritus']
}
}
Expand Down

0 comments on commit 6ae8f73

Please sign in to comment.