访问外部构建路径中存在的jar时的java.lang.NoClassDefFoundError

时间:2017-04-11 11:34:03

标签: java ssh build path

我在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工作正常。

谢谢!

1 个答案:

答案 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以及其他人所做的事情。