2016-05-02 1 views
1

Можно ли использовать java-отражения api или org.reflection api для загрузки классов Java во время выполнения во внешнем проекте, который не находится в нашем пути к классу? может кто-то ответить мне, если есть какой-либо другой способ загрузить классы extenal java во время выполненияМогу ли я загружать классы java внешнего проекта во время выполнения с использованием отражений или любым другим способом

+0

Существует URLClassLoader; можно использовать URI файлов: «file:/.... .jar». Более ориентированной на плагин будет система OSGi с модулями и определенными жизненными циклами. –

+0

Вот пример того, как мы динамически загружаем плагины с помощью URLClassLoader в нашем приложении: https://github.com/taconaut/ums-mlx/blob/master/core/src/main/java/net/pms/plugins/PluginsFactory.java # L247 – Philippe

ответ

2

Да, вы можете загружать классы с отражением api, которые не находятся в вашем фактическом проекте или под траекторией класса. Например, это работает с URLClassLoader.

Чтобы загрузить более нескольких файлов, указанных в комментариях, вы можете перебирать файлы в каталоге. Для каждого файла вы можете использовать класс-загрузчик.

Вы можете получить файлы каталога с помощью файла-класса. Например:

Path p = Paths.get(""); 
File f = p.toFile(); 
String[] files = f.toAbsoluteFile().list(); 

Тогда у вас есть строковый массив файлов/каталогов. Если вы находитесь в каталоге, содержащем ваши файлы классов, вы можете просто перебирать массив и загружать их один за другим вашим ClassLoader

+0

Я уже это сделал, но мое приложение хочет загрузить классы Java в пакете и хотеть прочитать конкретное. Аннотации в java-классах, как я могу достичь этого, файл cz jar содержит файлы .class? –

+0

Прошу прощения, но я не понимаю, что должно делать ваша реализация. Или, говоря иначе, что делать с аннотациями. – Supahupe

+0

Хорошо, дайте мне знать, как загружать несколько классов внутри банки с помощью отражений. Cz для метода name() принимает ровно одно имя класса. –

Смежные вопросы