升级sshd-sftp至2.10.0后spring-integration-sftp v6.1.2抛NoSuchMethodError
问题分析与解决方案
问题原因
这个NoSuchMethodError是由于Apache SSHD组件版本不一致导致的:你只升级了sshd-sftp到2.10.0,但Spring Integration SFTP 6.1.2默认依赖的sshd-core(ConnectFuture类所在的核心包)还是旧版本(比如2.9.2)。旧版本的ConnectFuture类并没有verify(java.time.Duration)这个方法,而Spring Integration的DefaultSftpSessionFactory在初始化会话时调用了该方法,因此触发运行时异常。
解决方案
方案1:统一所有SSHD组件版本
修改依赖配置,排除Spring Integration中引入的所有SSHD相关组件,然后显式引入2.10.0版本的sshd-core和sshd-sftp,确保版本完全一致:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> <version>3.1.2</version> </dependency> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-sftp</artifactId> <version>6.1.2</version> <exclusions> <!-- 排除所有旧版本SSHD依赖 --> <exclusion> <groupId>org.apache.sshd</groupId> <artifactId>sshd-core</artifactId> </exclusion> <exclusion> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> </exclusion> </exclusions> </dependency> <!-- 显式引入统一版本的SSHD核心包 --> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-core</artifactId> <version>2.10.0</version> </dependency> <!-- 引入目标版本的SFTP包 --> <dependency> <groupId>org.apache.sshd</groupId> <artifactId>sshd-sftp</artifactId> <version>2.10.0</version> </dependency>
方案2:升级Spring Integration SFTP到兼容版本
如果方案1无效,说明Spring Integration SFTP 6.1.2与SSHD 2.10.0存在兼容性问题。可以尝试升级spring-integration-sftp到更高版本(比如6.1.3或6.2.x),这些版本通常会适配较新的SSHD版本。
额外步骤
修改依赖后,清理本地Maven/Gradle缓存,确保下载的是正确版本的依赖包,避免旧版本JAR残留导致的问题。
内容的提问来源于stack exchange,提问作者ChristineVl
相关产品推荐
相关产品推荐

