Как упаковать библиотеку как плагин Eclipse для использования другим плагином - PullRequest
2 голосов
/ 01 апреля 2012

Я пытаюсь создать плагин Eclipse, который зависит от библиотеки, которая должна распространяться отдельно от него.Причины этого:

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

Плагин предназначен для среды разработки на основе Eclipse, и его целью является обеспечение функциональности нашей библиотеки в этой среде.Сама библиотека зависит от других бесплатных компонентов, которые я могу связать с ней без проблем.

Так как я не знаю, могу ли я точно сказать, какая это библиотека, но я должен держать это однозначнодавайте назовем библиотеку «L», а плагин, который я пытаюсь разработать, - «P».

Для этого я использую инструмент bnd, и до сих пор я пробовал обе упаковки L как отдельный плагин.и как фрагмент плагина.

Как автономный плагин, он был принят средой хост-затмения, и я мог бы перечислить его как зависимость от P и успешно построить его.Однако во время выполнения плагин P не видел ресурсов из библиотеки L на своем пути к классам.В основном нужны те, что находятся в META-INF / services.

Затем я попытался упаковать L в качестве фрагмента плагина для P. Я надеялся, что это сработает, поскольку в спецификации сказано, что путь к классу фрагмента объединен с его хостом.плагина.Это не сработало, потому что я не мог использовать классы из L в качестве зависимостей сборки P - размещение L в каталоге плагинов eclipse не привело к тому, что он был распознан как установленный плагин.

Итак, я 'Я застрял.Мне нужны банки L как часть времени выполнения P и сборки classpath, и в то же время они должны быть в отдельном плагине.Возможно ли то, что я пытаюсь сделать?

Ответы [ 4 ]

2 голосов
/ 02 апреля 2012

Чтобы P мог видеть ресурсы L, L должен экспортировать содержащиеся в нем папки как «пакеты», а P должен их импортировать. Это выглядит немного не элегантно, но позволяет папкам типа META-INF / services находиться в пути к классу P.

В качестве альтернативы, в частности для META-INF / services, вы можете посмотреть на новую функцию в выпуске 5 спецификации Enterprise OSGi в области ServiceLoaders. Хороший блог, объясняющий эту идею: http://coderthoughts.blogspot.co.uk/2011/08/javautilserviceloader-in-osgi.html,, а Apache Aries имеет раннюю реализацию .

1 голос
/ 01 апреля 2012

Зависимости плагинов Eclipse от других плагинов можно определить как Необязательно .Если у пользователя его нет, вы можете использовать Class.forName, чтобы проверить, был ли загружен зависимый класс.

0 голосов
/ 02 апреля 2012

Насколько я понимаю, вы хотите добавить Jar в качестве зависимости от плагина.Лучший способ сделать это Перейти в плагин View -> Скопировать файл JAR в каталог плагинов -> Импортировать его как исходный проект в вашей рабочей области.Plugin.xml -> вкладка зависимостей -> добавить его как зависимость.

Если вы хотите упаковать его в плагин, используйте механизм загрузки динамической библиотеки.

0 голосов
/ 01 апреля 2012

Очевидно, вы не указали плагин «библиотека» как импорт OSGI «основного» плагина.Не видя ваших манифестов, невозможно сказать наверняка.

...