如何解决Java运行SSHD服务器错误-未找到类定义
我当前正在运行Java Mina SSHD服务器。
我的服务器在sshd-core-0.14.0
上运行良好,但病毒扫描程序在标记弱密码,因此我只能升级到版本2.5.1
。我尝试简单地替换.jar文件并将classpath
vars更改为新版本,但是出现以下错误。
Error: A JNI error has occurred,please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org.apache.sshd.commo
n.KeyPairProvider
at java.lang.J9VMInternals.prepareClassImpl(Native Method)
at java.lang.J9VMInternals.prepare(J9VMInternals.java:303)
at java.lang.Class.getMethodHelper(Class.java:1247)
at java.lang.Class.getMethod(Class.java:1191)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:556
)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:538)
Caused by: java.lang.ClassNotFoundException: org.apache.sshd.common.KeyPairProvi
der
at java.net.URLClassLoader.findClass(URLClassLoader.java:610)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:944)
at java.lang.ClassLoader.loadClass(ClassLoader.java:889)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:872)
... 6 more
启动基于Java的SSHD的代码在这里:
import org.apache.sshd.SshServer;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class WinSSHServer {
public WinSSHServer(Properties props) throws IOException {
final SshServer sshd = SshServer.setUpDefaultServer();
sshd.getProperties().put(SshServer.IDLE_TIMEOUT,String.valueOf(sessionTimeoutMSec));
sshd.setPort(22);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(props.getProperty("hostkey")));
sshd.setCommandFactory(new WinCmdExeCommandFactory());
final PuTTYPublicKeyAuthenticator pka = new PuTTYPublicKeyAuthenticator();
addPublicKeysFromProps(pka,props);
sshd.setPublickeyAuthenticator(pka);
sshd.start();
}
解决方法
0.14.0和2.5.1版本之间可能存在巨大差异,因此该类在2.5.1中可能并不存在
- 尝试首先使用新版本编译项目(而不是更改lib中的jar)
- 相应地更改代码以符合新版本
我在Maven存储库索引站点中进行了搜索,发现包含相同类的JAR。但是,您可能必须在一端配置的路径发生了变化。
我使用zip实用程序(7zip)进行了搜索,以搜索软件包以查找所涉及的类名称及其完全限定的类路径。还有其他方法可以做到这一点。
https://mvnrepository.com/artifact/org.apache.sshd/sshd-common/2.5.1
原始张贴者在异常堆栈中给出的路径是 org.apache.sshd.common.KeyPairProvider ,但是在此软件包中,它的路径似乎是 org.apache.sshd.common.keyprovider .KeyPairProvider (请注意已添加的 keyprovider )。
故障排除步骤:
- 确认您的班级中有一个班级
- 如果 KeyPairProvider 的完全限定类名称确实如上所述发生更改,则将引用更新为新的完全限定类名称
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。