2014-12-01 11 views
0

Я искал в Интернете ссылку на хороший учебник о том, что я собираюсь описать, но я еще не нашел его. Я надеюсь, что у кого-то здесь уже есть идея, где его найти и вы можете отправить ссылку на него здесь.Создание moddable приложения с OSGi

Я хочу знать, как использовать OSGi/Equinox для создания приложения (игры, бизнеса или другого), которое позволяет добавлять библиотеки позже неизвестного контента.

Эта идея очаровывала меня с первого раза, когда я использовал Minecraft Forge, и все, что мне нужно было сделать, - это выбросить JAR в каталог мод, который, вероятно, был идентифицирован как путь к классам или что-то в этом роде.

Сначала я исследовал тему в .NET и нашел подходящий ответ в библиотеках «System.AddIn» и «System.AddIn.Contract». Здесь есть хороший учебник: MSDN - Creating an Extensible Application. Это работало очень хорошо. Вы создаете конвейер интерфейсов и контрактов, которые определяют типы AddIns, а затем AddIns могут быть добавлены позже, просто отбросив библиотеки классов в правильном каталоге.

Теперь я активно исследую, как это сделать на Java, и сейчас я просматриваю плагины OSGi. Тем не менее, все примеры, с которыми я столкнулся до сих пор, сосредоточены на связках, которые известны во время разработки. Более того, есть разговор «DynamicImport-Package», но ресурсы, которые я видел до сих пор, нахмурились.

Итак, возникает вопрос, знает ли кто-нибудь о ресурсе, который обсуждает метод, который «улыбается» для динамического обнаружения и загрузки неизвестного набора (библиотеки классов), который соответствует определенному интерфейсу?

ответ

1

Вы ищете услуги OSGi. В OSGi вы можете регистрировать службы в одном комплекте и использовать эти службы в другом комплекте. Вы также можете отслеживать службы, которые появляются в контейнере OSGi, и использовать их, если они отвечают вашим потребностям.

В NET есть много учебников, в которых объясняется, как вы можете использовать службы OSGi. Например: http://www.knopflerfish.org/osgi_service_tutorial.html

Пример, как вы могли бы использовать:

  • Вы можете указать интерфейс
  • Каждого плагин пучок должен иметь реализацию интерфейса и расслоение регистрирует экземпляр объекта как OSGi оказание услуг.
  • В вашем комплекте с технологией (который может иметь плагины) отслеживаются все службы OSGi, реализующие интерфейс.
+0

Отлично! Я собираюсь взглянуть на статью, которую вы опубликовали. Я должен был бы дать твердый ответ в течение следующих 24 часов. – MrGoodfix

+0

Спасибо за хорошую находку! Время свернуть рукава. – MrGoodfix

+0

Я хотел бы добавить эту ссылку для тех, кто читает это после факта: http://docs.oracle.com/javase/tutorial/ext/basics/spi.html – MrGoodfix

0

Основной OSGi API, чтобы посмотреть на то, чтобы внедрить рамки OSGi в приложение, а затем динамически загружать библиотеки OSGi расслоения плагин для загрузки является org.osgi.framework.launch.Framework. Вы можете найти код исходного проекта моего проекта https://github.com/vorburger/ch.vorburger.minecraft.osgi/ в этом контексте: он внедряет фреймворк Apache Felix OSGi в модем Minecraft Sponge и загружает дополнительные моды Minecraft, поскольку пакеты OSGi динамически - в значительной степени то, о чем вы просите? ;-) Посмотрите конкретно на класс OSGiFrameworkWrapper. Вы также можете делать это без OSGi и получать удовольствие от java.lang.ClassLoader самостоятельно или использовать мой проект https://github.com/vorburger/HoTea.

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

  • Нет связанных вопросов^_^