我可以在我的java代码中使用两个ssh java库吗?

时间:2014-02-24 08:43:28

标签: java ssh j2ssh

我正在使用j2ssh,但由于某些原因(我们无法检测到),我们决定切换到新的ssh lib。

在j2ssh中,对于没有给出预期结果的2个函数,我们必须切换到新的ssh(我发现vngx-jsch合适)

但仅限于2个函数,我需要对所有ssh相关函数进行完全返工,这是我不想要的。
所以我有以下疑问: -

  1. 我可以同时使用两个lib吗?
  2. 有意义吗?
  3. 如果我保持j2ssh原样并且只为那些2功能我将加载vngx-ssh怎么办?
  4. 有可能吗?
  5. 怎么办?举个例子?

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。您可以使用完全限定名称来解决冲突。例如:

假设有2个包,com.package1.Acom.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 :(得分:1)

  

1)我可以同时使用lib吗?

可能是的。但你需要尝试它才能确定。

这两个反对指示的事情将是:

  • 两个库定义具有相同完全限定类名 1

  • 的类
  • 需要使用相同的端口使用两个库接受应用程序中的ssh连接。

  

2)有意义吗?

可能。但IMO,它更有意义找到并修复根问题 2 ,或重新编写应用程序,以便它确实需要两个缺少的函数。

  

3)如果我保持j2ssh原样并且只为那些2功能我将加载vngx-ssh怎么办?有可能吗?

这取决于你的意思。如果使用这两个库进行单独的连接,则可以使用。

  

怎么做?举个例子?

这取决于您问题的详细信息。 (但你不太可能找到例子,因为你所做的事情听起来像是一种劣等的方法......)


1 - 如果这是一个问题,可以使用classloader magic解决名称冲突,但你应该只做最后的手段。

2 - 这是开源的优势之一。如果您使用的应用程序/库中存在问题,您可以找到并修复它...然后将您的修复程序返回给社区。