| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > 2 jar-ника и один класс |
| Автор: Се ля ви 11.4.2007, 15:17 |
| Существуют какие-то правила, регламентирующие подгрузку классов из Jar-ников в дерритктории, в которой сразу лежат две версии одной и той же библиотеки, и естественно содержат классы в одинаковых пакетах и с одинаковыми именами? Добавлено через 1 минуту и 10 секунд То есть как мне чётко указать из какого Jar-ника из нескольких импортированных надо взять нужный мне класс? |
| Автор: LSD 11.4.2007, 15:34 |
| Стандартный class-loader ищет файлы почередно просматривая все элементы CLASSPATH, но гарантий такого поведения нет. |
| Автор: kkorsakoff 11.4.2007, 15:38 |
| 1. Регламента четкого нет насколько мне известно, но есть вполне известная логика работы "стандартного" класслоадера (URLClassLoader). ... * Finds the first occurrence of a resource that can be found. The locations * are searched in the order they were added to the URLClassLoader. * * @param resourceName the resource name to look for * @return the URLResource for the resource if found, null otherwise ... 2. Такое можно реализовать либо написав свой класслоадер, либо создав URLClassLoader, передав ему нужные джары и загрузить им нужный класс. Но пользоваться созданными объектами будет не очень удобно, ведь прийдется манипулировать при помощи рефлекшена, ведь если ты будешь использовать имя класса типа Logger l=..., то класс Logger будет загружен тем же самым "стандартным" класслоадером при загрузке ссылающегося класса. Немного сумбурно, но вроде бы так |
| Автор: chief39 11.4.2007, 16:35 |
| Лучше до такого не доводить... Может вручную и можно временно перехитрить... Но что делать с джибоссом, например, который в либе видит этот класс + в еарке и, ессно, ругается.... ? |
| Автор: _Y_ 11.4.2007, 17:59 | ||||
Так может просто делать это при обьявлении переменных? Т.е. явно указывать пакет. Например при обьявлении переменных variable1 и variable2:
И можно пользоваться одноименными классами из разных пакетов |
| Автор: chief39 11.4.2007, 19:39 | ||
Без приоритетов. Два варианта класса - "трахайся, хозяин, я с таким не работаю". И он, в принципе, прав. Java для замены своих классов как бы endorsed предполагает... А в данной ситуации... а что начнётся когда ты вручную обойдёшь нестыковки и "покажешь" куда класслоадеру глядеть? Если парень не может написать либу 2 с поддержкой фич либы 1 - тогда кто будет следить за правильным(!) автовыбором нужного джарника? Только усугубите кашу... Имхо - боретесь со следствием, а не с причиной... и оно далеко заведёт... Можно, конечно, как kkorsakoff показал. но ведь и сам понимаешь что новые бока далеко переплюнут нынешние.... |
| Автор: nornad 11.4.2007, 21:14 | ||
Я так понимаю, что в данном случае проблема больше в правильной проектировке интерфейса либы. Наиболее умный вариант - делать либу так, чтобы она не изменяла свой интерфейс от версии к версии. Точнее, чтобы все старые вещи были доступны и дальше. Новое - добавляйте. Старое - менять только внутри, но так, чтобы никакие закулисные действия не изменялись (лучше чтобы их вообще не было). А любой способ, который вы сейчас отыщете, будет чреват жуткими последствиями в недалёком будущем (думаю, вторая версия либы - это не предел и будут и последующие |
| Автор: LSD 11.4.2007, 21:57 | ||
Ну конечно, JVM не даст тебе грузить классы из пакетов java и javax. Вообщем это неправильное проектирование. Хотя я и сам с такими проблемами сталкивался и именно с JBoss |
| Автор: chief39 11.4.2007, 23:49 |
Имхо, это таки так. :( Джибосс - это у мну ;) У Селяви, кажется, сановский сервер и, кажется, веблогик Почти единогласно выходит что дело не в лоадерах а в проектировании либы. И хотя звучит как "вместо нужной настройки апача советуют пересесть на IIS", но всё-таки пересмотреть подход к разработке либ было бы лучше... Кста. Сегодня под федорой возился в раром. скачал, поставил. Не может найти либок. Фик с ним, нашёл рар поновее, стало. Линух я уважаю, но подумалось - а на винде я не волнуюсь какая у меня сборка винды когда ставлю винрар.... Похожий случай |