2009-03-23 11 views
12

Есть ли у кого-нибудь образец «привет мир» или учебник для создания фрагмента плагина 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(). Может ли кто-нибудь дать мне рабочий пример?

ответ

17

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

Откройте «Редактор манифеста плагинов» (вы можете сделать это, нажав на build.properties, manifest.mf или фрагмент.xml - если такого файла нет, создайте его вручную) и в закладке «Extentions» нажмите «Добавить ..» и добавьте «org.eclipse.ui.startup» и просмотрите класс, который реализует класс org.eclipse.ui.IStartup. Создайте этот класс и реализуйте его. Вам необходимо реализовать метод earlyStartup(), который является точкой входа в фрагмент.

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

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

  • Фрагмент-Project - корень реж
    • /META-INF
      • MANIFEST.MF
    • /SRC (который является исходный каталог)
      • FragmentStartClass.java (которые реализуют интерфейс org.eclipse.ui.IStartup и метод earlyStartup)
    • build.properties
    • фрагмент.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 

fragment.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!"); 

    } 


} 
+0

, который мне очень помог. Спасибо! – casaout

3

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

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

См. this note от Eclipse Wiki.

0

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

Например:

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 это интерфейс, определенный в хост-плагин, и реализовать ваш фрагмент.

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

0

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

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

0

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

Рядом с файлами классов, есть только один файл требуется в этом 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 

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

+0

Я также пытаюсь развернуть проект Fragment с обновленным сайтом и файлом Jar. Для сайта обновлений я создал сайт Update Site for Fragment, но когда я устанавливаю его в eclipse, он не отражает мои изменения. Я пробовал метод, который у вас есть упомянутый выше, но все же я не получаю. Мне нужно следовать любому другому подходу. Пожалуйста, помогите – Eshika

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