From 8abd72d7c0dc3c4644c0eb92f98f6570518e1bcb Mon Sep 17 00:00:00 2001 From: abilan Date: Wed, 21 Jun 2023 17:39:55 -0400 Subject: [PATCH] Upgrade dependencies; fix problems * Mockito doesn't allow to `spy()` mocks any more or "overspy" * Deprecate `KotlinScriptExecutor` if favor of fully supported JSR223 service loaded via `DefaultScriptExecutor` * Use only one `kotlin-scripting-jsr223` dependency --- build.gradle | 65 +++++++++---------- .../BoundRabbitChannelAdviceTests.java | 4 +- .../kafka/inbound/MessageSourceTests.java | 4 +- .../jsr223/KotlinScriptExecutor.java | 19 ++---- .../jsr223/ScriptExecutorFactory.java | 5 +- .../DeriveLanguageFromExtensionTests.java | 4 +- .../test/mock/MockMessageHandlerTests.java | 3 +- 7 files changed, 44 insertions(+), 60 deletions(-) diff --git a/build.gradle b/build.gradle index 1014ed467c..0bffb7b5b1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlinVersion = '1.8.10' + ext.kotlinVersion = '1.8.20' ext.isCI = System.getenv('GITHUB_ACTION') || System.getenv('bamboo_buildKey') repositories { gradlePluginPortal() @@ -15,11 +15,11 @@ buildscript { } plugins { - id 'org.sonarqube' version '4.2.0.3129' + id 'org.sonarqube' version '4.2.1.3168' id 'io.spring.nohttp' version '0.0.11' apply false id 'org.ajoberstar.grgit' version '4.1.1' id 'io.spring.dependency-management' version '1.1.0' - id 'com.jfrog.artifactory' version '4.31.9' apply false + id 'com.jfrog.artifactory' version '4.32.0' apply false id 'org.jetbrains.dokka' version "$kotlinVersion" id 'org.asciidoctor.jvm.pdf' version '3.3.2' id 'org.asciidoctor.jvm.gems' version '3.3.2' @@ -48,32 +48,32 @@ ext { modifiedFiles = files(grgit.status().unstaged.modified).filter { f -> f.name.endsWith('.java') || f.name.endsWith('.kt') } - apacheSshdVersion = '2.9.2' - artemisVersion = '2.28.0' + apacheSshdVersion = '2.10.0' + artemisVersion = '2.29.0' aspectjVersion = '1.9.19' assertjVersion = '3.24.2' - assertkVersion = '0.26' + assertkVersion = '0.26.1' avroVersion = '1.11.1' awaitilityVersion = '4.2.0' - camelVersion = '3.20.4' + camelVersion = '3.20.6' commonsDbcp2Version = '2.9.0' commonsIoVersion = '2.11.0' commonsNetVersion = '3.9.0' curatorVersion = '5.5.0' - debeziumVersion = '2.3.0.CR1' + debeziumVersion = '2.3.0.Final' derbyVersion = '10.16.1.1' findbugsVersion = '3.0.1' ftpServerVersion = '1.2.0' - graalvmVersion = '22.3.2' + graalvmVersion = '23.0.0' greenmailVersion = '2.1.0-alpha-1' groovyVersion = '4.0.12' hamcrestVersion = '2.2' - hazelcastVersion = '5.2.3' - hibernateVersion = '6.2.2.Final' - hsqldbVersion = '2.7.1' + hazelcastVersion = '5.3.1' + hibernateVersion = '6.2.5.Final' + hsqldbVersion = '2.7.2' h2Version = '2.1.214' - jacksonVersion = '2.15.0' - jaxbVersion = '4.0.2' + jacksonVersion = '2.15.2' + jaxbVersion = '4.0.3' jcifsVersion = '2.1.34' jeroMqVersion = '0.5.3' jmsApiVersion = '3.1.0' @@ -88,31 +88,31 @@ ext { lettuceVersion = '6.2.4.RELEASE' log4jVersion = '2.20.0' mailVersion = '2.0.2' - micrometerTracingVersion = '1.1.1' - micrometerVersion = '1.11.0' - mockitoVersion = '5.3.1' + micrometerTracingVersion = '1.1.2' + micrometerVersion = '1.11.1' + mockitoVersion = '5.4.0' mongoDriverVersion = '4.9.1' mysqlVersion = '8.0.33' pahoMqttClientVersion = '1.2.5' postgresVersion = '42.6.0' - protobufVersion = '3.23.0' + protobufVersion = '3.23.3' r2dbch2Version = '1.0.0.RELEASE' - reactorVersion = '2022.0.7' + reactorVersion = '2022.0.8' resilience4jVersion = '2.0.2' romeToolsVersion = '2.1.0' - rsocketVersion = '1.1.3' + rsocketVersion = '1.1.4' servletApiVersion = '6.0.0' smackVersion = '4.4.6' - springAmqpVersion = '3.0.4' - springDataVersion = '2023.0.0' - springGraphqlVersion = '1.2.0' - springKafkaVersion = '3.0.7' - springRetryVersion = '2.0.1' - springSecurityVersion = '6.1.0' + springAmqpVersion = '3.0.5' + springDataVersion = '2023.0.1' + springGraphqlVersion = '1.2.1' + springKafkaVersion = '3.0.8' + springRetryVersion = '2.0.2' + springSecurityVersion = '6.1.1' springVersion = '6.1.0-SNAPSHOT' springWsVersion = '4.0.4' - testcontainersVersion = '1.18.1' - tomcatVersion = '10.1.8' + testcontainersVersion = '1.18.3' + tomcatVersion = '10.1.10' xmlUnitVersion = '2.9.1' xstreamVersion = '1.4.20' ztZipVersion = '1.15' @@ -366,7 +366,7 @@ configure(javaProjects) { subproject -> checkstyle { configDirectory.set(rootProject.file('src/checkstyle')) - toolVersion = project.hasProperty('checkstyleVersion') ? project.checkstyleVersion : '10.11.0' + toolVersion = project.hasProperty('checkstyleVersion') ? project.checkstyleVersion : '10.12.0' } jar { @@ -884,18 +884,13 @@ project('spring-integration-scripting') { description = 'Spring Integration Scripting Support' dependencies { api project(':spring-integration-core') - optionalApi ('org.jetbrains.kotlin:kotlin-script-util') { - exclude group: 'org.jetbrains.kotlin', module: 'kotlin-daemon-client' - } - optionalApi 'org.jetbrains.kotlin:kotlin-compiler-embeddable' + optionalApi 'org.jetbrains.kotlin:kotlin-scripting-jsr223' providedImplementation "org.graalvm.sdk:graal-sdk:$graalvmVersion" providedImplementation "org.graalvm.js:js:$graalvmVersion" testImplementation "org.jruby:jruby-complete:$jrubyVersion" testImplementation 'org.apache.groovy:groovy-jsr223' testImplementation "org.python:jython-standalone:$jythonVersion" - - testRuntimeOnly 'org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable' } tasks.withType(JavaForkOptions) { diff --git a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/BoundRabbitChannelAdviceTests.java b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/BoundRabbitChannelAdviceTests.java index 9d90abc730..0884e2141c 100644 --- a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/BoundRabbitChannelAdviceTests.java +++ b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/BoundRabbitChannelAdviceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2018-2022 the original author or authors. + * Copyright 2018-2023 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. @@ -44,7 +44,6 @@ import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.willAnswer; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -96,7 +95,6 @@ public class BoundRabbitChannelAdviceTests { public CachingConnectionFactory cf() throws Exception { ConnectionFactory cf = mock(ConnectionFactory.class); cf.setHost("localhost"); - cf = spy(cf); willAnswer(i -> { this.connection = mock(Connection.class); willAnswer(ii -> { diff --git a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/inbound/MessageSourceTests.java b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/inbound/MessageSourceTests.java index 9da40da9d4..91984be7ac 100644 --- a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/inbound/MessageSourceTests.java +++ b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/inbound/MessageSourceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2018-2022 the original author or authors. + * Copyright 2018-2023 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. @@ -576,7 +576,7 @@ class MessageSourceTests { ack1.acknowledge(AcknowledgmentCallback.Status.REQUEUE); assertThat(received2.getHeaders().get(KafkaHeaders.OFFSET)).isEqualTo(1L); AcknowledgmentCallback ack2 = StaticMessageHeaderAccessor.getAcknowledgmentCallback(received2); - Log log2 = spy(KafkaTestUtils.getPropertyValue(ack1, "logger.log", Log.class)); + Log log2 = spy(KafkaTestUtils.getPropertyValue(ack2, "logger.log", Log.class)); new DirectFieldAccessor(ack2).setPropertyValue("logger.log", log2); given(log2.isWarnEnabled()).willReturn(true); willDoNothing().given(log2).warn(any()); diff --git a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/KotlinScriptExecutor.java b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/KotlinScriptExecutor.java index 5bbe376129..6fff32a681 100644 --- a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/KotlinScriptExecutor.java +++ b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/KotlinScriptExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 the original author or authors. + * Copyright 2019-2023 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. @@ -18,29 +18,24 @@ package org.springframework.integration.scripting.jsr223; import javax.script.Bindings; import javax.script.ScriptEngine; - -import org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory; +import javax.script.ScriptEngineManager; /** * An {@link AbstractScriptExecutor} for the Kotlin scripts support. - * Uses {@link KotlinJsr223JvmLocalScriptEngineFactory} directly since there is - * no {@code META-INF/services/javax.script.ScriptEngineFactory} file in CLASSPATH. - * Also sets an {@code idea.use.native.fs.for.win} system property to {@code false} - * to disable a native engine discovery for Windows: bay be resolved in the future Kotlin versions. * * @author Artem Bilan * * @since 5.2 + * + * @deprecated since 6.2 in favor of {@link DefaultScriptExecutor} with {@code kotlin} + * as an argument. */ +@Deprecated(since = "6.2", forRemoval = true) public class KotlinScriptExecutor extends AbstractScriptExecutor { - static { - System.setProperty("idea.use.native.fs.for.win", "false"); - } - public KotlinScriptExecutor() { - super(new KotlinJsr223JvmLocalScriptEngineFactory().getScriptEngine()); + super(new ScriptEngineManager().getEngineByName("kotlin")); } @Override diff --git a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/ScriptExecutorFactory.java b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/ScriptExecutorFactory.java index e9a9fb3a57..078112459c 100644 --- a/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/ScriptExecutorFactory.java +++ b/spring-integration-scripting/src/main/java/org/springframework/integration/scripting/jsr223/ScriptExecutorFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 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. @@ -40,9 +40,6 @@ public final class ScriptExecutorFactory { else if (language.equalsIgnoreCase("ruby") || language.equalsIgnoreCase("jruby")) { return new RubyScriptExecutor(); } - else if (language.equalsIgnoreCase("kotlin")) { - return new KotlinScriptExecutor(); - } else if (language.equalsIgnoreCase("js") || language.equalsIgnoreCase("javascript")) { return new PolyglotScriptExecutor("js"); } diff --git a/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/DeriveLanguageFromExtensionTests.java b/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/DeriveLanguageFromExtensionTests.java index fadb45506a..c9a95fa5d2 100644 --- a/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/DeriveLanguageFromExtensionTests.java +++ b/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/jsr223/DeriveLanguageFromExtensionTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 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. @@ -48,7 +48,7 @@ public class DeriveLanguageFromExtensionTests { RubyScriptExecutor.class, DefaultScriptExecutor.class, PythonScriptExecutor.class, - KotlinScriptExecutor.class + DefaultScriptExecutor.class }; Map scriptProcessors = diff --git a/spring-integration-test/src/test/java/org/springframework/integration/test/mock/MockMessageHandlerTests.java b/spring-integration-test/src/test/java/org/springframework/integration/test/mock/MockMessageHandlerTests.java index 159b83310f..2f44d9b3a8 100644 --- a/spring-integration-test/src/test/java/org/springframework/integration/test/mock/MockMessageHandlerTests.java +++ b/spring-integration-test/src/test/java/org/springframework/integration/test/mock/MockMessageHandlerTests.java @@ -61,7 +61,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.assertj.core.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.springframework.integration.test.mock.MockIntegration.mockMessageHandler; @@ -187,7 +186,7 @@ public class MockMessageHandlerTests { public void testMockRawHandler() { ArgumentCaptor> messageArgumentCaptor = MockIntegration.messageArgumentCaptor(); MessageHandler mockMessageHandler = - spy(mockMessageHandler(messageArgumentCaptor)) + mockMessageHandler(messageArgumentCaptor) .handleNext(m -> { });