2014-02-24 59 views
0

我使用j2ssh,但由于某些原因(我们不能检测到),我们决定切换到新的ssh lib。
我可以在我的java代码中使用两个ssh java lib吗?

在J2SSH 2种功能,这不是给预期的结果,我们必须切换到新的SSH(我已经找到vngx-jsch适用)

但只有2个功能,我需要做全面返工所有ssh相关的功能,我不想。
所以我有以下查询: -

  1. 我可以同时使用lib?
  2. 它有意义吗?
  3. 如果我保留j2ssh,并且只为那些2个函数,我将加载vngx-ssh?
  4. 是否有可能?
  5. 该怎么办?任何例子?
+0

当然,除非他们都依赖于其他竞争版本,但为什么? – EJP

+0

sry,但我不明白你的答案。竞争版本的其他东西意味着什么? j2ssh和vngx-jsch都是不同的java ssh库都有类似的功能来支持sftp等。 – user1145280

+0

他们都依赖的另一个JAR的竞争版本。 – EJP

回答

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

非常感谢你的回答,我了解这件事,一个问题 - 我已经包括这两个罐子现在假设只有2个功能我已经应用完全合格的名称(在我的情况下与vngx-jsch)是足够的还是其他地方我有提到j2ssh? – user1145280

+0

应该工作。无需在其他地方改变。 –

+0

以及如果你认为答案是有用的,并回答你的问题,投票“up”,并标记它完成:) –

1

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

可能是的。但是你需要尝试一下。

的两件事情,这将是禁忌指示是:

  • 定义具有相同的完全限定类名,或

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

2)它有意义吗?

可能。但IMO,更有意义要么找到并修复根问题或重新编码该应用程序,以便它确实需要两个缺失的功能。

3)如果我保留j2ssh,因为它只是为那些2功能,我会加载vngx-ssh?可能吗?

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

该怎么办?任何例子?

这取决于你的问题的细节。 (但你是不可能找到的例子,因为你在做什么听起来像一个劣质的方法...)


1 - 如果这是一个问题,有可能使用解决名称冲突classloader魔法,但你只能作为最后的手段。

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

+0

okie。你能否在下面的问题上添加一些意见 – user1145280

+0

你在说什么问题? –

相关问题