java - NoClassDefFoundError SecretKeySpec 与 JSch

标签 java jsch

我正在使用以下方法连接到远程主机并使用 JSch 执行命令:

public String runCommandOnRemote(String username, String password, String hostname, String command) {
    String output = null;
    JSch jsch = new JSch();
    java.util.Properties config = new java.util.Properties();
    config.put(Constants.STRICT_HOST_KEY_CHECKING, Constants.STRICT_HOST_KEY_CHECKING_NO);
    Session session;
    try {
        session = jsch.getSession(username, hostname);
        session.setPassword(password);
        session.setConfig(config);
        session.connect(30000);
        ChannelExec channel = (ChannelExec) session.openChannel(Constants.CHANNEL_EXEC);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(channel.getInputStream()));
        ((ChannelExec) channel).setCommand(command);
        channel.setCommand(command);
        channel.connect(3 * 1000);
        while ((output = bufferedReader.readLine()) != null) {
        }
        channel.disconnect();
        session.disconnect();
        return output;
    } catch (JSchException | IOException e) {
        new InstanceException("Error connecting to remote host" + hostname + ". " + e.getMessage());
        logger.error("Error connecting to remote host " + hostname + "\n" + e.getMessage());
        e.printStackTrace();
    }

在 session.connect() 上,它给出以下错误:

[err] Exception in thread "Thread-57" 
[err] java.lang.NoClassDefFoundError: javax/crypto/spec/SecretKeySpec
[err]   at com.jcraft.jsch.jce.AES256CTR.init(AES256CTR.java:55)
[err]   at com.jcraft.jsch.Session.checkCipher(Session.java:2497)
[err]   at com.jcraft.jsch.Session.checkCiphers(Session.java:2474)
[err]   at com.jcraft.jsch.Session.send_kexinit(Session.java:624)
[err]   at com.jcraft.jsch.Session.connect(Session.java:307)

SecretKeySpec 类作为 JRE 系统库的一部分捆绑在 jce.jar 中。那为什么我会收到此错误?

最佳答案

这是一个 OSGi 项目,我必须在 list 文件中添加以下依赖项:javax.crypto、javax.crypto.interfaces、javax.crypto.spec

以下是我的 list 文件的一部分:

Manifest-Version: x.x
Bundle-ManifestVersion: x
Bundle-Name: xxx
Bundle-SymbolicName: xxx
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Version: x.x

Import-Package: example.com,
javax.crypto,
javax.crypto.interfaces,
javax.crypto.spec
Bundle-ClassPath: .,
jsch-0.1.54.jar
Bundle-Blueprint: OSGI-INF/blueprint/*.xml

关于java - NoClassDefFoundError SecretKeySpec 与 JSch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45277282/

相关文章:

java - 从哪个版本的 JRE 支持 AES128-CTR

java - Java 中的 FTP 单元测试(JSch 和 MockFtpServer)

java - 如何将数组列表转换为数组?

java - 如何从 Java 中的匿名内部类中获取对封闭类的引用?

Java - 在图像的中心绘制文本

java - 使用 java 将电子表格保存到磁盘

java - JFrame 内存泄漏

java - 使用 Spring Integration 时抛出不同的 JSchException

java - 通过SFTP传输文件

java - 使 FileAlterationObserver 观察远程目录