Подтвердить что ты не робот

Фрагмент плагина Eclipse

Есть ли у кого-нибудь образец "привет мир" или учебник для создания фрагмента плагина Eclipse?

У меня есть рабочий хост-плагин, который для простоты - это просто...

public void start(BundleContext context) throws Exception {
    System.out.println("Hello....");
    super.start(context);
    plugin = this;
}

public void stop(BundleContext context) throws Exception {
    System.out.println("Goodbye...");
    plugin = null;
    super.stop(context);
}

Прост достаточно и работает. Теперь я хочу добавить фрагмент к этому хосту, который кажется не таким простым, как создание узла плагина. Я просто не вижу, как создать проект фрагмента и добавить к нему логику. Скажем, я просто хочу сделать что-то простое и иметь фрагмент для печати "Hello2" в start() и "Goodbye2" в stop(). Может ли кто-нибудь дать мне рабочий пример?

4b9b3361

Ответ 1

  1. Eclipse → File → New... → Fragment project → установить плагин хоста (который находится либо в вашей рабочей области, либо в плагинах на целевой платформе).

  2. Откройте редактор манифеста плагина (вы можете сделать это, нажав на build.properties, manifest.mf или fragment.xml - если такого файла нет, создайте его вручную)

  3. В вкладке Расширения нажмите Добавить.. и добавьте org.eclipse.ui.startup и просмотрите класс, который реализует класс org.eclipse.ui.IStartup.

  4. Создайте этот класс и реализуйте его. Вам необходимо реализовать метод earlyStartup() который является точкой входа в фрагмент.

Примечание. Строки ниже - это просто пример. Я не тестировал его, чтобы могли быть ошибки...

Все, что вам нужно, это (это структура проекта/структура каталогов):

  • Фрагмент-проект - корневой каталог
    • /META-INF
      • MANIFEST.MF
    • /src (который является исходным каталогом)
      • FragmentStartClass.java (которые реализуют интерфейс org.eclipse.ui.IStartup и метод earlyStartup)
    • build.properties
    • fragment.xml

Содержание META-INF/MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: FragmentProject 
Bundle-SymbolicName: FragmentProject;singleton:=true 
Bundle-Version: 1.0.0 
Bundle-ClassPath: src/,. 
Fragment-Host: *HostPluginProjectSymbolicName*;bundle-version="1.0.0" 
Bundle-RequiredExecutionEnvironment: J2SE-1.5 
Require-Bundle:  

Содержимое build.properties:

source.. = src,\
output.. = bin/
bin.includes = META-INF/,
              .,
                  fragment.xml

contents.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<fragment>
   <extension
         point="org.eclipse.ui.startup">
      <startup
            class="FragmentStartClass">
      </startup>
   </extension>
</fragment>

Содержимое FragmentStartClass.java:

import org.eclipse.ui.IStartup;


public class FragmentStartClass implements IStartup {

    public void earlyStartup() {
       System.out.println("Hello World From Fragment!");

    }


}

Ответ 2

Хорошо, во-первых, чего вы пытаетесь достичь? Вы уверены, что фрагменты - это решение?

Фрагменты - это просто дополнения к существующему плагину. Активатор Bundle-Activator не запускает этот фрагмент. Вы просто получаете дополнительные ресурсы в фрагменте. Вы можете использовать точку расширения, чтобы сообщить хосту, что какая-то конкретная функциональность была расширена данным фрагментом. Подумайте об этом как о слиянии двух во время выполнения.

Смотрите это примечание из Eclipse Wiki.

Ответ 3

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

Например:

MyInterface o = null;
try {
    Class<?> c = getClass().getClassLoader().loadClass("my.fragment.Activator");
    o = (MyInterface) c.newInstance();
} catch (ClassNotFoundException e) {
}

if (o != null) {
    o.start();
}

где MyInterface - это интерфейс, определенный в плагине хоста, и реализованный вашим фрагментом.

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

Ответ 4

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

Фрагменты используются только для добавления ресурсов или дополнительных классов в базовый плагин.

Ответ 5

Для записи я просто создал фрагмент Eclipse, содержащий некоторые классы правил Java PMD.

Рядом с файлами класса в этом Jar есть только один файл: META-INF/MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: com.acme.tools.pmd
Bundle-SymbolicName: com.acme.tools.pmd;singleton:=true
Bundle-Version: 1.0.0
Fragment-Host: net.sourceforge.pmd.eclipse.plugin;bundle-version="3.2.6"
Bundle-RequiredExecutionEnvironment: J2SE-1.5

Я пробовал это с помощью текущего Eclipse 3.7. Развертывание осуществляется путем размещения файла Jar в <eclipse root>/dropins/plugins (создайте эту папку, если она еще не существует).