Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2 jar-ника и один класс 
:(
    Опции темы
Се ля ви
Дата 11.4.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 8
Всего: 127



Существуют какие-то правила, регламентирующие подгрузку классов из Jar-ников в дерритктории, в которой сразу лежат две версии одной и той же библиотеки, и естественно содержат классы в одинаковых пакетах и с одинаковыми именами?

Добавлено через 1 минуту и 10 секунд
То есть как мне чётко указать из какого Jar-ника из нескольких импортированных надо взять нужный мне класс?


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
LSD
Дата 11.4.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
kkorsakoff
Дата 11.4.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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 будет загружен тем же самым "стандартным" класслоадером при загрузке ссылающегося класса. Немного сумбурно, но вроде бы такsmile
PM MAIL WWW ICQ   Вверх
chief39
Дата 11.4.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Лучше до такого не доводить... Может вручную и можно временно перехитрить... Но что делать с джибоссом, например, который в либе видит этот класс + в еарке и, ессно, ругается.... ?


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
_Y_
Дата 11.4.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(Се ля ви @ 11.4.2007,  15:17)
как мне чётко указать из какого Jar-ника из нескольких импортированных надо взять нужный мне класс?

Так может просто делать это при обьявлении переменных? Т.е. явно указывать пакет. Например при обьявлении переменных variable1 и variable2:
Код

com.sun.xml.internal.bind.v2.model.core.Element variable1;
javax.swing.text.Element variable2;

И можно пользоваться одноименными классами из разных пакетов


Это сообщение отредактировал(а) _Y_ - 11.4.2007, 18:02


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Се ля ви
Дата 11.4.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 8
Всего: 127



_Y_, да в том-то и дело, что пакет-то один smile Просто разные версии либы подключены к приложению одновременно...

Так получается из-за того, что кто-то допустим напишет библиотеку mylib1.jar . Первую версию, ессно. Потом кто-то напишет ещё одну библиотеку butthisismylib.jar, классы в которой будут использовать mylib1.jar . А потом первый парень напишет версию 2: mylib2.jar . И мы заложим её как базовую при разработке какого-то проекта. И потом нам понадобится и библиотека butthisismylib.jar и выясняется, что второй парень для новой версии либы mylib свою либу не переписал и нам приодится присоединять к проекту и mylib1.jar, что бы работала butthisismylib.jar.

А потом начинаются догадайся какие чудеса...

Добавлено через 7 минут и 45 секунд
Цитата(chief39 @  11.4.2007,  16:35 Найти цитируемый пост)
Лучше до такого не доводить... Может вручную и можно временно перехитрить... Но что делать с джибоссом, например, который в либе видит этот класс + в еарке и, ессно, ругается.... ?

Ну тут хотя бы теоретически понятно, что приоритет должен быть у либ твоего аппликейшна, затем JBoss`а, затем - JVM и общего CLASSPATH`а...

Это сообщение отредактировал(а) Се ля ви - 11.4.2007, 18:17


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
chief39
Дата 11.4.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Цитата(Се ля ви @  11.4.2007,  18:15 Найти цитируемый пост)
Ну тут хотя бы теоретически понятно, что приоритет должен быть у либ твоего аппликейшна, затем JBoss`а, затем - JVM и общего CLASSPATH`а...

Без приоритетов. Два варианта класса - "трахайся, хозяин, я с таким не работаю".
И он, в принципе, прав.
Java для замены своих классов как бы endorsed предполагает...

А в данной ситуации...
Цитата(Се ля ви @  11.4.2007,  18:15 Найти цитируемый пост)
А потом начинаются догадайся какие чудеса...

а что начнётся когда ты вручную обойдёшь нестыковки и "покажешь" куда класслоадеру глядеть?

Если парень не может написать либу 2 с поддержкой фич либы 1 - тогда кто будет следить за правильным(!) автовыбором нужного джарника?
Только усугубите кашу...
Имхо - боретесь со следствием, а не с причиной... и оно далеко заведёт...

Можно, конечно, как kkorsakoff показал. но ведь и сам понимаешь что новые бока далеко переплюнут нынешние....


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
nornad
Дата 11.4.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(Се ля ви @  11.4.2007,  21:15 Найти цитируемый пост)
Так получается из-за того, что кто-то допустим напишет библиотеку mylib1.jar . Первую версию, ессно. Потом кто-то напишет ещё одну библиотеку butthisismylib.jar, классы в которой будут использовать mylib1.jar . А потом первый парень напишет версию 2: mylib2.jar . И мы заложим её как базовую при разработке какого-то проекта. И потом нам понадобится и библиотека butthisismylib.jar и выясняется, что второй парень для новой версии либы mylib свою либу не переписал и нам приходится присоединять к проекту и mylib1.jar, что бы работала butthisismylib.jar.

Я так понимаю, что в данном случае проблема больше в правильной проектировке интерфейса либы. Наиболее умный вариант - делать либу так, чтобы она не изменяла свой интерфейс от версии к версии. Точнее, чтобы все старые вещи были доступны и дальше. Новое - добавляйте. Старое - менять только внутри, но так, чтобы никакие закулисные действия не изменялись (лучше чтобы их вообще не было).
А любой способ, который вы сейчас отыщете, будет чреват жуткими последствиями в недалёком будущем (думаю, вторая версия либы - это не предел и будут и последующие  smile ).


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
LSD
Дата 11.4.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Се ля ви @  11.4.2007,  18:15 Найти цитируемый пост)
Ну тут хотя бы теоретически понятно, что приоритет должен быть у либ твоего аппликейшна, затем JBoss`а, затем - JVM и общего CLASSPATH`а...

Ну конечно, JVM не даст тебе грузить классы из пакетов java и javax. Вообщем это неправильное проектирование.

Хотя я и сам с такими проблемами сталкивался и именно с JBoss smile


--------------------
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.
PM MAIL WWW   Вверх
chief39
Дата 11.4.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Цитата(LSD @  11.4.2007,  21:57 Найти цитируемый пост)
Вообщем это неправильное проектирование.

Имхо, это таки так. :(

Цитата(LSD @  11.4.2007,  21:57 Найти цитируемый пост)

Хотя я и сам с такими проблемами сталкивался и именно с JBoss smile 

Джибосс - это у мну ;) У Селяви, кажется, сановский сервер и, кажется, веблогик

Почти единогласно выходит что дело не в лоадерах а в проектировании либы.

И хотя звучит как "вместо нужной настройки апача советуют пересесть на IIS", но всё-таки пересмотреть подход к разработке либ было бы лучше...

Кста. Сегодня под федорой возился в раром. скачал, поставил. Не может найти либок. Фик с ним, нашёл рар поновее, стало. Линух я уважаю, но подумалось - а на винде я не волнуюсь какая у меня сборка винды когда ставлю винрар....
Похожий случай



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1161 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.