Настроить две версии одного и того же фляги в одном приложении - PullRequest
1 голос
/ 06 января 2010

Мое приложение использует JAR-файл Http client2.0.2, а мой пакетный тестовый файл использует JAR-файл Http client3.1.

Как настроить две версии одного и того же файла JAR в одном приложении?

Ответы [ 5 ]

3 голосов
/ 06 января 2010

Вам нужно установить два разных пути к классам.Для тестов (которые вы, вероятно, запускаете с помощью такого инструмента, как ant), добавьте http-клиент 3.1 в classpath.

При развертывании разверните http-клиент 2.0.2 на сервере приложений.Пропустить тестовые классы и другую версию http-клиента.

Однако есть недостаток: вы не можете тестировать классы, которые используют старый http-клиент (ну, по крайней мере, не локально).Поэтому предлагаю обновить приложение до новой версии библиотеки.

2 голосов
/ 06 января 2010

Может быть, вы могли бы использовать jarjar для встраивания Http-клиента 2.0.2 в ваше приложение и позволить вашим модульным тестам использовать более свежую версию.

1 голос
/ 06 января 2010

Netbeans делают это очень хорошо: у вас есть 2 отдельные папки для импортированных библиотек, одна для теста (Test Librairies) и другая для вашего приложения (Librairies) ...

Если ваша IDE не поддерживает это, вы можете сделать это вручную, как предложено Aaron Digulla и определить разные пути к классам в вашей конфигурации муравья ... вы можете следовать этому учебнику сделай это ...

1 голос
/ 06 января 2010

В вашем приложении могут быть разные версии одного и того же класса (или библиотеки). Это не большая проблема, вам просто нужно использовать разные загрузчики классов для своих библиотек.

Вам нужно создать URLClassLoader для загрузки вашего тестового приложения с открытым исходным кодом (родительский загрузчик классов будет системным загрузчиком классов), возможно, другой загрузчик классов для клиентской версии 3.1 как дочерний по отношению к первому. Затем удалите эти библиотеки из пути к классам, разрешите и «запустите» основной класс из приложения с открытым исходным кодом. Он должен либо работать напрямую, либо, по крайней мере, давать достаточно подсказок (NoClassDefFoundError) для пропущенных шагов (раньше не пробовал, извините, это довольно теоретически). Взгляните на JavaDoc для класса java.lang.Classloader (и его расширителей)

Если бы требовалось использовать разные версии одной и той же библиотеки в одном приложении, я бы использовал OSGi в качестве платформы, потому что там вы получаете эту функциональность бесплатно. Клиентский комплект может зависеть от версии клиента 2.0.2, тестовый комплект - от версии клиента 3.1. Вам просто нужно отредактировать файлы Manifest и запустить приложение с каркасом OSGi (например, Equinox).

1 голос
/ 06 января 2010

I на самом деле не верю, что вы должны тестировать против одной банки и развертывать против другой. Я думаю, что это реальная проблема здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...