![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Существуют какие-то правила, регламентирующие подгрузку классов из Jar-ников в дерритктории, в которой сразу лежат две версии одной и той же библиотеки, и естественно содержат классы в одинаковых пакетах и с одинаковыми именами?
Добавлено через 1 минуту и 10 секунд То есть как мне чётко указать из какого Jar-ника из нескольких импортированных надо взять нужный мне класс? -------------------- |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Стандартный class-loader ищет файлы почередно просматривая все элементы CLASSPATH, но гарантий такого поведения нет.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
kkorsakoff |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
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 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Лучше до такого не доводить... Может вручную и можно временно перехитрить... Но что делать с джибоссом, например, который в либе видит этот класс + в еарке и, ессно, ругается.... ?
-------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
_Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Так может просто делать это при обьявлении переменных? Т.е. явно указывать пакет. Например при обьявлении переменных variable1 и variable2:
И можно пользоваться одноименными классами из разных пакетов Это сообщение отредактировал(а) _Y_ - 11.4.2007, 18:02 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
_Y_, да в том-то и дело, что пакет-то один
![]() Так получается из-за того, что кто-то допустим напишет библиотеку mylib1.jar . Первую версию, ессно. Потом кто-то напишет ещё одну библиотеку butthisismylib.jar, классы в которой будут использовать mylib1.jar . А потом первый парень напишет версию 2: mylib2.jar . И мы заложим её как базовую при разработке какого-то проекта. И потом нам понадобится и библиотека butthisismylib.jar и выясняется, что второй парень для новой версии либы mylib свою либу не переписал и нам приодится присоединять к проекту и mylib1.jar, что бы работала butthisismylib.jar. А потом начинаются догадайся какие чудеса... Добавлено через 7 минут и 45 секунд Ну тут хотя бы теоретически понятно, что приоритет должен быть у либ твоего аппликейшна, затем JBoss`а, затем - JVM и общего CLASSPATH`а... Это сообщение отредактировал(а) Се ля ви - 11.4.2007, 18:17 -------------------- |
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Без приоритетов. Два варианта класса - "трахайся, хозяин, я с таким не работаю". И он, в принципе, прав. Java для замены своих классов как бы endorsed предполагает... А в данной ситуации... а что начнётся когда ты вручную обойдёшь нестыковки и "покажешь" куда класслоадеру глядеть? Если парень не может написать либу 2 с поддержкой фич либы 1 - тогда кто будет следить за правильным(!) автовыбором нужного джарника? Только усугубите кашу... Имхо - боретесь со следствием, а не с причиной... и оно далеко заведёт... Можно, конечно, как kkorsakoff показал. но ведь и сам понимаешь что новые бока далеко переплюнут нынешние.... -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Я так понимаю, что в данном случае проблема больше в правильной проектировке интерфейса либы. Наиболее умный вариант - делать либу так, чтобы она не изменяла свой интерфейс от версии к версии. Точнее, чтобы все старые вещи были доступны и дальше. Новое - добавляйте. Старое - менять только внутри, но так, чтобы никакие закулисные действия не изменялись (лучше чтобы их вообще не было). А любой способ, который вы сейчас отыщете, будет чреват жуткими последствиями в недалёком будущем (думаю, вторая версия либы - это не предел и будут и последующие ![]() -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну конечно, JVM не даст тебе грузить классы из пакетов java и javax. Вообщем это неправильное проектирование. Хотя я и сам с такими проблемами сталкивался и именно с JBoss ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Имхо, это таки так. :( Джибосс - это у мну ;) У Селяви, кажется, сановский сервер и, кажется, веблогик Почти единогласно выходит что дело не в лоадерах а в проектировании либы. И хотя звучит как "вместо нужной настройки апача советуют пересесть на IIS", но всё-таки пересмотреть подход к разработке либ было бы лучше... Кста. Сегодня под федорой возился в раром. скачал, поставил. Не может найти либок. Фик с ним, нашёл рар поновее, стало. Линух я уважаю, но подумалось - а на винде я не волнуюсь какая у меня сборка винды когда ставлю винрар.... Похожий случай -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |