Статьи

Разработка плагинов Eclipse

Недавно я начал работать с командой над плагином Eclipse. Команда разработала отличный плагин, который выполняет поставленную цель. Таким образом я проверил источник и попытался построить его. Исходный код проекта содержал все необходимые библиотеки, и его можно было собрать только в Eclipse. В современном мире непрерывных поставок это является серьезным препятствием, поскольку такой проект не может быть построен на Дженкинс. Проект не только содержал необходимые библиотеки, но и все параметры затмения были сохранены как часть исходного кода, поэтому я подумал об улучшении этого в первую очередь. Я создал POM.xml в проекте и удалил настройки и библиотеки. Сборка работала нормально, но как только я открыл проект в Eclipse, это стало беспорядком. Там ничего не получалось!

Потребовалось некоторое время, чтобы понять, что «Затмение» и «Мейвен» — это два разных мира, которые нелегко сходятся. Даже самые маленькие из них, такие как версия артефакта и версия пакета, не сходятся легко. В Maven может быть что угодно, например, 21-снимок. Но в затмении есть стандарты, его нужно назвать [число]. [Число]. [Число] .qualifier, например, 1.1.21.qualifier.

Eclipse , Tycho

Для того, чтобы преодолеть разрыв между двумя мирами, Sonatype внесли вклад Tycho в экосистему Eclipse. Добавьте плагин с хранилищем Eclipse:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<repository>
<id>juno</id>
<layout>p2</layout>
</repository>
 
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-versions-plugin</artifactId>
<version>0.18.1</version>
</plugin>
 
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>0.18.1</version>
<configuration>
<pomDependencies>consider</pomDependencies>
<environments>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86_64</arch>
</environment>
</environments>
</configuration>
</plugin>

Здесь есть несколько моментов, на которые стоит обратить внимание:

  • Если плагин предназначен для конкретной платформы Eclipse, его следует добавить в репозиторий.
  • Плагин может использовать зависимости от POM или MANIFEST.MF. Если зависимости используются из POM, тогда установите pomDependencies

Плагин Tycho также включает в себя набор плагинов для обновления версии, проверки достоверности и т. Д. Плагины могут быть вызваны индивидуально для выполнения различных целей, например, плагин версий может использоваться следующим образом для установки версий:

1
mvn tycho-versions:set-version -DnewVersion=1.1.1-SNAPSHOT

Это установит версию 1.1.1-SNAPSHOT в POM и 1.1.1.qualifier в MANIFEST.MF

Хотя плагины предлагают много, есть и некоторые ограничения. Плагин не может генерировать правильные настройки затмения для PDE. Таким образом, если мы не сохраняем эти настройки, нам нужно сгенерировать их снова. Несколько других ограничений перечислены на странице плагина .

После этого теперь мы смогли соединить два мира в некотором смысле. Возможны сборки Maven, которые генерируют плагин Eclipse.

Плагин Classloaders

В PDE затмения есть плагины и фрагменты. Плагины — это полные модули, которые предлагают функциональность, а фрагменты — это модуль, который присоединяется к родительскому плагину и расширяет его возможности. Таким образом, плагин может прикрепить n фрагментов, увеличивая его во время выполнения.

У нас был базовый плагин, который предлагал некоторые базовые функции, а сверху был построен фрагмент для использования Hadoop 1.x в плагине. Через некоторое время пришло требование поддерживать и Hadoop 2.x. Теперь две библиотеки не совместимы друг с другом. Таким образом, некоторый обходной путь был необходим для включения этого

К счастью, Eclipse на основе OSGI имеет другой механизм загрузки классов по сравнению с другими Java-приложениями. Обычно есть один загрузчик классов / иерархии, которые загружают полное приложение. Теперь в таком случае, если две несовместимые банки объединены, будет загружен только один. Но в eclipse каждый плагин имеет свой собственный загрузчик классов, который может загружать свои собственные классы. Теперь это предлагает несколько возможностей, таких как поддержка разных версий одной и той же библиотеки. Эта функция распространяется только на плагин, а не на фрагменты. Фрагменты не имеют своих собственных загрузчиков классов и используют родительские загрузчики классов плагинов.

Мы могли бы использовать поддержку загрузчика классов плагина, но библиотеки hadoop загружались фрагментом, а не плагином. Мы преобразовали фрагмент в плагин, который требовал полной реорганизации существующей кодовой базы. После создания плагина на основе hadoop 1.x. Мы могли бы сделать больше плагинов для hadoop 2.x. Каждый плагин загружает свой собственный набор классов. Теперь единственное требование — иметь больше пространства PermGem, поскольку весь плагин не может быть загружен в пространство PermGem по умолчанию.

Ссылка: Разработка плагинов Eclipse от нашего партнера JCG Рахула Шарма в блоге The Road пока … блог.