我在eclipse中为我项目的外部构建路径添加了一个新jar:
C:\文件夹\ 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:\folder\projectFolder\lib\jcabi-ssh-1.5.2.jar
此实例中还缺少什么?我在外部构建路径中的所有其他jar工作正常。
谢谢!
答案 0 :(得分:0)
jar文件jcabi-ssh-1.5.2.jar只包含包com.jcabi.ssh
中的类,但缺少的类不属于该包。
所以发生的事情是你的代码没有显式引用JSchException类,这就是你的IDE中一切正常的原因。但是,当你运行应用程序时,一些jcabi类会说“抛出新的JSchException” - 那就是JVM开始寻找它时。
JSchException
可以在JSch jar中找到。您可以从http://www.jcraft.com/jsch/。
但是,请注意,该jar文件不是jcabi类所具有的唯一依赖项 - 您可以在maven存储库站点中看到“Compile Dependencies”部分的完整列表,例如:
https://mvnrepository.com/artifact/com.jcabi/jcabi-ssh/1.5.2
所以你必须下载所有这些,以及所有那些编译依赖项,以及所有编译依赖项......
让系统加载所有依赖项更容易 - 这就是maven和ivy以及其他人所做的事情。