Я могу использовать два SSH Java в моем коде Java?

Я использую j2ssh, но по некоторым причинам (которые мы пока не можем обнаружить) мы решили перейти на новую ssh lib.

в j2ssh для 2 функций, которые не дают ожидаемого результата, мы должны переключиться на новый ssh ​​(я нашел vngx-jsch подходящий)

но только для 2 функций, мне нужно сделать полную переработку всех функций, связанных с SSH, что я не хочу.
поэтому у меня есть следующие запросы: -

  1. я могу использовать оба lib?
  2. имеет ли это смысл?
  3. что если я сохраню j2ssh как есть, и только для этих двух функций я буду загружать vngx-ssh?
  4. Является ли это возможным?
  5. как это сделать? любой пример?

2 ответа

Решение

Да, это возможно. Вы можете использовать полные имена для разрешения конфликтов. например:

скажем, есть 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 - это одно из преимуществ открытого исходного кода. Если есть проблема в приложении / библиотеке, которую вы используете, вы можете найти и исправить ее... и затем отправить свое исправление обратно в сообщество.

Другие вопросы по тегам