Java 运行 SSHD 服务器错误 - 未找到 class def
Java run SSHD Server Error - No class def found
我目前是 运行 一个 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();
}
可能版本 0.14.0 和 2.5.1 之间存在巨大差异 class 在 2.5.1 中可能并不存在 因此
- 首先尝试使用新版本编译您的项目(而不是更改 lib 中的 jars)
- 相应地更改您的代码以符合新版本
我在 Maven 存储库索引站点中搜索并找到了一个包含相同 class 的 JAR。但是,您可能必须在自己的端配置的路径发生了变化。
我使用 zip 实用程序 (7zip) 搜索包以找到有问题的 class 名称及其 fully-qualified class 路径。还有其他方法可以做到这一点。
https://mvnrepository.com/artifact/org.apache.sshd/sshd-common/2.5.1
原始发布者在异常堆栈中给出的路径是 org.apache.sshd.common.KeyPairProvider 但是在这个包中它似乎是 org.apache.sshd.common.keyprovider.KeyPairProvider(注意添加的 keyprovider)。
故障排除步骤:
- 确认您的其中一个罐子中有 class
- 如果 KeyPairProvider 的完全限定 class 名称确实发生了如上所述的更改,则更新对新的完全限定 class 名称[=31= 的引用]
我目前是 运行 一个 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();
}
可能版本 0.14.0 和 2.5.1 之间存在巨大差异 class 在 2.5.1 中可能并不存在 因此
- 首先尝试使用新版本编译您的项目(而不是更改 lib 中的 jars)
- 相应地更改您的代码以符合新版本
我在 Maven 存储库索引站点中搜索并找到了一个包含相同 class 的 JAR。但是,您可能必须在自己的端配置的路径发生了变化。
我使用 zip 实用程序 (7zip) 搜索包以找到有问题的 class 名称及其 fully-qualified class 路径。还有其他方法可以做到这一点。
https://mvnrepository.com/artifact/org.apache.sshd/sshd-common/2.5.1
原始发布者在异常堆栈中给出的路径是 org.apache.sshd.common.KeyPairProvider 但是在这个包中它似乎是 org.apache.sshd.common.keyprovider.KeyPairProvider(注意添加的 keyprovider)。
故障排除步骤:
- 确认您的其中一个罐子中有 class
- 如果 KeyPairProvider 的完全限定 class 名称确实发生了如上所述的更改,则更新对新的完全限定 class 名称[=31= 的引用]