0

当我调用getSftpUtil(). 我还确保所有适当的 jar 都在 maven 项目的外部库中,并且在WEB-INF/lib项目的文件夹中可用

代码

net.sf.opensftp.SftpUtil util = SftpUtilFactory.getSftpUtil();

堆栈跟踪

SftpUtilFactory: Trying to get SftpUtil class name from the system property net.sf.opensftp.SftpUtil
SftpUtilFactory  - Trying to get SftpUtil class name from the system property net.sf.opensftp.SftpUtil
SftpUtilFactory: The system property net.sf.opensftp.SftpUtil is not set.
SftpUtilFactory  - The system property net.sf.opensftp.SftpUtil is not set.
SftpUtilFactory: Use the default one.
SftpUtilFactory  - Use the default one.

Caused by: java.lang.NoSuchMethodError: com.jcraft.jsch.JSch.setLogger(Lcom/jcraft/jsch/Logger;)V
at net.sf.opensftp.impl.SftpUtil.<clinit>(SftpUtil.java:110)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at net.sf.opensftp.SftpUtilFactory.getSftpUtil(SftpUtilFactory.java:184)
4

2 回答 2

0

好吧,我猜您缺少此依赖项或正确的版本:

<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.49</version> <!--latest version -->
于 2013-06-13T18:16:24.727 回答
0

基于 jcraft 的change log, setLogger 是在 jsch-0.1.30 中添加到 JSch.java 的方法。所以你的 WEB-INF/lib 下的 jar 应该是旧版本。

你可以跑

mvn dependency:tree

查看您的哪些依赖项正在使用旧版本,然后使用以下内容将其排除:

<dependency>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <exclusions>
        <exclusion>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
        </exclusion>
    </exclusions>
</dependency>

您可能有另一个依赖项指的是更新版本的 jsch,因此此时您的问题应该得到解决。但是,如果不是这种情况,您可以将其添加到 pom.xml:

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.50</version>
</dependency>
于 2013-06-13T18:36:25.230 回答