我在 eclipse 中的项目外部构建路径中添加了一个新 jar:
C:\folder\projectFolder\lib\jcabi-ssh-1.5.2.jar
添加了导入语句:
import com.jcabi.ssh.SSH;
import com.jcabi.ssh.Shell;
添加了测试命令:
Shell shell = new SSH(...);
String stdout = new Shell.Plain(shell).exec("echo 'Hello, world!'");
在运行项目之前,IDE 中没有显示任何问题。
运行项目后,我得到:
java.lang.NoClassDefFoundError: com/jcraft/jsch/JSchException
在关注其他一些帖子后,我看到了:
System.out.println(System.getProperty("java.class.path"));
返回包含以下内容的列表:
C:folderprojectFolderlibjcabi-ssh-1.5.2.jar
在这种情况下还缺少什么?我在外部构建路径中的所有其他 jar 都工作正常。
谢谢!
jar文件 jcabi-ssh-1.5.2.jar 只包含包com.jcabi.ssh
中的类,但缺少的类不属于该包。
因此,您的代码没有显式引用 JSchException 类,这就是为什么您的 IDE 中一切正常的原因。 但是,当你运行应用程序并且一些jcabi类说"抛出新的JSchException"时 - 这就是JVM开始寻找它的时候。
JSchException
可以在 JSch 罐中找到。 例如,您可以从 http://www.jcraft.com/jsch/下载它。
但是,请注意,该jar文件并不是jcabi类具有的唯一依赖项 - 您可以在maven存储库站点中看到"编译依赖项"部分的完整列表,例如:
https://mvnrepository.com/artifact/com.jcabi/jcabi-ssh/1.5.2
所以你还必须下载所有这些,以及所有这些具有的所有编译依赖项,以及所有编译依赖项.....
更容易的是让系统为您加载所有依赖项 - 这就是 maven 和 ivy 以及其他人所做的。