2017-04-11 35 views
0

我已经在Eclipse中增加了一个新的jar到我的项目的外部构建路径时:java.lang.NoClassDefFoundError访问罐子存在于外部构建路径

C:\文件夹\ projectFolder \ LIB \ jcabi-SSH -1.5.2.jar

添加import语句:

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 

在这种情况下还缺少了什么?我在外部构建路径中的所有其他罐子都正常工作。

谢谢!

回答

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仓库网站部分,如的完整列表:

https://mvnrepository.com/artifact/com.jcabi/jcabi-ssh/1.5.2 

所以你将不得不下载所有这些以及所有编译依赖关系,以及所有编译依赖关系.....

更容易的是让系统为您加载所有依赖关系 - 这是什么maven和常春藤等等。

+0

谢谢你的澄清racaman。为什么他们不能像其他软件包一样自己包含它? – David

+0

https://github.com/hudson/ganymed-ssh-2正在诀窍中!谷歌搜索ganymed-ssh2.jar虽然。 – David