2014-02-24 93 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

你在說什麼問題? –

相關問題