para - plugins eclipse java
Fragmento del complemento Eclipse (5)
Bueno, primero, ¿qué estás tratando de lograr? ¿Estás seguro de que los fragmentos son la solución?
Los fragmentos son simplemente adiciones a un complemento existente. No hay un Activador de Bundle para "iniciar" el fragmento. Simplemente obtienes los recursos adicionales en el fragmento. Podría usar un punto de extensión para informar al host que alguna funcionalidad particular fue extendida por un fragmento presente. Piense en ello como la fusión de los dos en el tiempo de ejecución.
Vea esta nota de Eclipse Wiki .
¿Alguien tiene una muestra o tutorial de "mundo hello" para crear un fragmento de plugin de Eclipse?
Tengo un complemento de host funcional que, en aras de la simplicidad, es solo esto ...
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);
}
Bastante simple y funciona. Ahora quiero agregar un fragmento a ese host, que no parece tan simple como crear un host de complemento. Simplemente no veo cómo crear un proyecto de fragmento y agregarle lógica. Digamos que solo quiero hacer algo simple y tener el fragmento para imprimir un "Hello2" al start()
y "Goodbye2" en el stop()
. ¿Puede alguien darme un ejemplo de trabajo?
Creo que lo que está tratando de hacer está mejor servido mediante el uso de puntos de extensión y complementos separados, ya que desea agregar funcionalidad al complemento base.
Los fragmentos solo se usan para agregar recursos o clases adicionales al complemento base.
No estoy seguro de poder hacer esto sin que el complemento de host sepa algo sobre cargar el código de implementación extra del fragmento.
Por ejemplo:
MyInterface o = null;
try {
Class<?> c = getClass().getClassLoader().loadClass("my.fragment.Activator");
o = (MyInterface) c.newInstance();
} catch (ClassNotFoundException e) {
}
if (o != null) {
o.start();
}
donde MyInterface es una interfaz definida en el complemento de host e implementada por tu fragmento.
Otra forma podría ser que el fragmento proporcione un punto de extensión que identifique la clase extendida, pero probablemente sea más de lo necesario.
Eclipse -> Archivo -> Nuevo ... -> Proyecto de fragmento -> configure el complemento de host (que se encuentra en su espacio de trabajo o en los complementos de la plataforma de destino).
Abra el "Editor de manifiesto de complemento" (puede hacerlo haciendo clic en build.properties, manifest.mf o fragment.xml; si no existe dicho archivo, créelo a mano) y en la pestaña llamada "Extentions" haga clic en "Add". . "y agrega" org.eclipse.ui.startup "y examina la clase que implementa la clase org.eclipse.ui.IStartup. Crea esta clase e impleméntala. Necesita implementar el método earlyStartup () que es el punto de entrada al fragmento.
Nota: Las líneas a continuación son solo ejemplos. No lo probé para que haya errores ...
Todo lo que necesita es esto (esta es la estructura del proyecto / estructura de directorios):
- Fragment-Project - directorio raíz
- / META-INF
- MANIFEST.MF
- / src (que es el directorio de origen)
- FragmentStartClass.java (que implementa la interfaz org.eclipse.ui.IStartup y el método earlyStartup)
- build.properties
- fragment.xml
- / META-INF
Contenido de 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:
contenido build.properties :
source.. = src,/ output.. = bin/ bin.includes = META-INF/, ., fragment.xml
fragmento.xml contenido:
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.2"?> <fragment> <extension point="org.eclipse.ui.startup"> <startup class="FragmentStartClass"> </startup> </extension> </fragment>
Contenido FragmentStartClass.java :
import org.eclipse.ui.IStartup; public class FragmentStartClass implements IStartup { public void earlyStartup() { System.out.println("Hello World From Fragment!"); } }
Para el registro, acabo de crear un Fragmento de Eclipse que contiene algunas clases de reglas de Java PMD.
Junto a los archivos de clase, solo se necesita un archivo en ese 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
Intenté esto con el Eclipse 3.7 actual. La implementación consiste en colocar el archivo Jar en <eclipse root>/dropins/plugins
(cree esa carpeta si aún no está allí).