我正在使用 j2ssh,但由于某些原因(我们还无法检测到),我们决定切换到新的 ssh 库。
在 j2ssh 中,对于 2 个没有给出预期结果的函数,我们必须切换到新的 ssh(我发现 vngx-jsch 合适)
但仅针对 2 个功能,我需要对所有我不想做的 ssh 相关功能进行全面返工。
所以我有以下疑问: -
- 我可以同时使用 lib 吗?
- 是否有意义 ?
- 如果我保持 j2ssh 原样并且只为这两个函数加载 vngx-ssh 会怎样?
- 可能吗?
- 怎么做 ?有什么例子吗?
是的,这是可能的。您可以使用完全限定名称来解决冲突。例如:
假设有 2 个包,com.package1.A
它们com.package2.B
导出相同的功能,func()
. 在您的 Java 程序中,您可以通过调用其中任何一个来使用其中的任何一个
package com.package1;
public class A {
public void func() {
System.out.println("Inside A package's func ");
}
}
第二个是:
package com.package2;
public class B {
public void func() {
System.out.println("Inside B package's func ");
}
}
然后在一个单独的类中,您可以像这样使用它:
public class App {
public static void main(String[] args) {
com.package1.A.func();
com.package2.B.func();
}
}
1)我可以同时使用 lib 吗?
大概是。但是您需要尝试一下才能确定。
有矛盾的两件事是:
定义具有相同完全限定类名1的类的两个库,或
需要使用使用相同端口的两个库在您的应用程序中接受 ssh 连接。
2)这有意义吗?
可能。但是 IMO,找到并修复根本问题2或重新编码应用程序以使其确实需要两个缺失的功能更有意义。
3) 如果我保持 j2ssh 原样并且只为这两个函数加载 vngx-ssh 会怎样?可能吗?
这取决于你的意思。如果您使用这两个库进行单独的连接,那么这可能会起作用。
怎么做 ?有什么例子吗?
这取决于你的问题的细节。(但是您不太可能找到示例,因为您正在做的事情听起来像是一种劣等方法……)
1 - 如果这是一个问题,可以使用类加载器魔法来解决名称冲突,但你应该只作为最后的手段。
2 - 这是开源的优势之一。如果您正在使用的应用程序/库中存在问题,您可以找到并修复它......然后将您的修复贡献回社区。