В сущности задачка очень простая, а сходу найти решения не могу.
Хочется, зная имя пакета, получить список всех его классов, подпакетов и т.п.
Кто-нибудь сталкивался с подобной задачей?
Re: Список классов пакета
От:
Аноним
Дата:
24.04.08 12:41
Оценка:
Здравствуйте, Бердник Антон, Вы писали:
БА>В сущности задачка очень простая, а сходу найти решения не могу. БА>Хочется, зная имя пакета, получить список всех его классов, подпакетов и т.п. БА>Кто-нибудь сталкивался с подобной задачей?
Если такое и есть, в чем я глубоко сомневаюсь, то через ClassLoader.
Такого нету, в чем я глубоко не сомневаюсь, т.к. пакеты — это формальные логические сущности и связь "пакет — подпакет" есть только на уровне файловой системы. Решение — писать свой код, который лазит по файловой системе во всех CLASSPATH местах.
Здравствуйте, Бердник Антон, Вы писали:
БА>В сущности задачка очень простая, а сходу найти решения не могу. БА>Хочется, зная имя пакета, получить список всех его классов, подпакетов и т.п. БА>Кто-нибудь сталкивался с подобной задачей?
Много кто сталкивался. Жаль поиск не работает. В общем случае задача не разрешима, так как JVM по большому счету ничего не знает о классах которые ещё не были загружены. Поэтому единственный приемлимый способ это сканировать jar-ы до которых можно докопатся. А зачем понадобилось? Всегда можно найти более приемлемый способ виде какого-нибудь рестра нужных классов.
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, Бердник Антон, Вы писали:
БА>>В сущности задачка очень простая, а сходу найти решения не могу. БА>>Хочется, зная имя пакета, получить список всех его классов, подпакетов и т.п. БА>>Кто-нибудь сталкивался с подобной задачей?
B>Много кто сталкивался. Жаль поиск не работает. В общем случае задача не разрешима, так как JVM по большому счету ничего не знает о классах которые ещё не были загружены. Поэтому единственный приемлимый способ это сканировать jar-ы до которых можно докопатся. А зачем понадобилось? Всегда можно найти более приемлемый способ виде какого-нибудь рестра нужных классов.
Понадобилось — вот зачем:
Хочется получить список классов, отбираемых по определенному критерию (например, по аннотации какой то)
Указывать все классы не хочется — а хочется стандартизировать их размещение в некотором пакете и указывать только пакет. Вот поэтому по факту имеем набор названий пакетов и хотим в них найти классы по заданному критерию — в целом вот.
Здравствуйте, Бердник Антон, Вы писали:
БА>В сущности задачка очень простая, а сходу найти решения не могу. БА>Хочется, зная имя пакета, получить список всех его классов, подпакетов и т.п. БА>Кто-нибудь сталкивался с подобной задачей?
я думаю, что в данном случае может помочь java agent, который указывается как jvm аргумент. На его основе построены все профайлеры. Кто сталкивался например с YourKit — тот знает как его навесить. Копните в эту сторону и я думаю это Вам поможет
Здравствуйте, Vampiro, Вы писали:
V>Здравствуйте, Бердник Антон, Вы писали:
БА>>В сущности задачка очень простая, а сходу найти решения не могу. БА>>Хочется, зная имя пакета, получить список всех его классов, подпакетов и т.п. БА>>Кто-нибудь сталкивался с подобной задачей?
V>я думаю, что в данном случае может помочь java agent, который указывается как jvm аргумент. На его основе построены все профайлеры. Кто сталкивался например с YourKit — тот знает как его навесить. Копните в эту сторону и я думаю это Вам поможет
он устанавливается с помощью атрибута
-javaagent
Вам будет необходимо написать класс с методом premain в котором Вы сможете подсчитывать любую статистическую информацию по загружаемым класам.
Вам нужно будет на Instumentation навесить Transformer и в методе transform Вы получите всю необходимую информацию.
V>>я думаю, что в данном случае может помочь java agent, который указывается как jvm аргумент. На его основе построены все профайлеры. Кто сталкивался например с YourKit — тот знает как его навесить. Копните в эту сторону и я думаю это Вам поможет
V>он устанавливается с помощью атрибута
V>-javaagent
V>Вам будет необходимо написать класс с методом premain в котором Вы сможете подсчитывать любую статистическую информацию по загружаемым класам. V>Вам нужно будет на Instumentation навесить Transformer и в методе transform Вы получите всю необходимую информацию.
Здравствуйте, Бердник Антон, Вы писали:
БА>В сущности задачка очень простая, а сходу найти решения не могу. БА>Хочется, зная имя пакета, получить список всех его классов, подпакетов и т.п. БА>Кто-нибудь сталкивался с подобной задачей?
В Spring есть похожая функциональность: классам ставим аннотацию @Component, в конфиге пишем <context:component-scan base-package="my.package"/>, он при старте их все находит.