Заменить jar и перенаправить операторы импорта - PullRequest
1 голос
/ 27 января 2020

У нас есть программа Java, которая использует указанную библиотеку c. Мы создали вторую библиотеку, которая имеет API, очень похожий на первую библиотеку, однако эта библиотека сделана собственными силами, и мы готовы начать ее тестирование.

Для тестирования мы хотели бы заменить jar в программе Java с jar нашей новой библиотеки. Проблема в том, что новая библиотека не имеет точно такое же пространство имен, поэтому операторы импорта не будут выравниваться. Например,

Java программа

import someLibrary.x.y.Foo;

public class Main {
    public static void main(String[] args){
        new Foo().bar();   
    }
}

Новая библиотека имеет тот же API, но другое пространство имен

anotherLibrary.x.y.Foo;

Вопрос: Как я могу использовать загрузчик классов или другой инструмент для запуска программы Java, но заменить операторы зависимостей и перенаправить импорт в другое пространство имен?

[EDIT] - Мы делаем не имеют доступа к исходному коду программы Java. Мы можем изменить эту программу на использование нашей новой библиотеки, но мы не хотим делать это до тех пор, пока она не будет тщательно протестирована.

Ответы [ 2 ]

1 голос
/ 27 января 2020

Единственное решение, которое я могу придумать, заключается в написании пользовательского ClassLoader, который изменит байт-код для изменения ссылок на методы и ссылок на поля для изменения имени класса.

0 голосов
/ 27 января 2020

Как насчет простого решения:

  1. Создайте ветвь вашей основной программы (в git или любом другом инструменте управления исходным кодом, который вы используете):
  2. Примените все необходимые изменения для работы с новой библиотекой (измените весь импорт)
  3. Развертывание в тестовой среде и расширенное тестирование
  4. Слияние с мастером, когда вы чувствуете себя достаточно уверенно

Другой решение может быть следующим:

  1. Создать ветку из новой библиотеки
  2. Измените импорт так, чтобы он выглядел точно так же, как старый (со всеми пакетами)
  3. Замените старую библиотеку новой в вашем приложении
  4. Разверните в тестовой среде и проведите всестороннее тестирование
  5. Когда вы будете готовы с новой библиотекой, разверните ее и продолжайте работать в производственной среде для льготный период месяца или около того (пока вы действительно не почувствуете себя уверенно)
  6. Через месяц верните обратно весь импорт (в основном переходите из ветки со «старым» импортом в бюстгальтер) нч с вашим реальным импортом в библиотеку и приложение.

Обновление

Также возможно автоматическое перемещение пакетов вашей версии библиотеки, если вы используете maven.

Плагин Shaven Maven имеет relocate цель, которую можно использовать для «перемещения» пакетов вашей библиотеки, чтобы они были такими же, как пакеты существующей библиотеки. См. документацию плагина оттенка

...