有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

bouncycastle Java运行SSHD服务器错误未找到类定义

我目前正在运行Java Mina SSHD服务器。 我的服务器在sshd-core-0.14.0上运行良好,但我的病毒扫描程序标记出弱密码,这让我别无选择,只能升级到2.5.1版本。我已经试着简单地更换了。jar文件并将classpath变量更改为新版本,但会出现以下错误

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();
    }

共 (2) 个答案

  1. # 1 楼答案

    版本0.14.0和2.5.1之间可能存在巨大差异,因此类可能并不真正存在于2.5.1中

    1. 尝试先用新版本编译项目(而不是更改库中的JAR)
    2. 相应地更改代码以符合新版本
  2. # 2 楼答案

    我在maven repository index站点中搜索,发现了一个包含相同类的JAR。然而,您可能必须在自己的终端上配置的路径发生了变化

    我使用zip实用程序(7zip)在包中搜索,找到有问题的类名及其完全限定的类路径。还有其他方法可以做到这一点

    https://mvnrepository.com/artifact/org.apache.sshd/sshd-common/2.5.1

    原始海报在异常堆栈中给出的路径是org。阿帕奇。sshd。常见的KeyPairProvider但是在这个包中,它似乎是组织。阿帕奇。sshd。常见的密钥提供者。KeyPairProvider(注意添加的keyprovider

    故障排除步骤:

    1. 确认你有一个罐子里的班级
    2. 如果KeyPairProvider的完全限定类名如上所述发生了更改,则更新对新的完全限定类名的引用