sencillos proyecto programas programa paso mundo hola hacer ejemplos crear como java plugins plugin-architecture

proyecto - ¿Cómo crear un programa Java conectable?



hola mundo java (6)

Quiero crear un programa Java que se pueda extender con complementos. ¿Cómo puedo hacer eso y dónde debo buscar?

Tengo un conjunto de interfaces que el complemento debe implementar, y debe estar en un contenedor. El programa debería buscar nuevas jarras en una carpeta relativa (al programa) y registrarlas de alguna manera.

Aunque me gusta Eclipse RCP, creo que es demasiado para mis necesidades simples.

Lo mismo ocurre con Spring, pero como iba a verlo de todos modos, mejor intentarlo.

Pero aún así, preferiría encontrar una forma de crear mi propio "framework" de plugins lo más simple posible.


¿Ha considerado construir sobre la plataforma de cliente enriquecido de Eclipse y luego exponer el marco de extensión de Eclipse?

Además, según sus necesidades, Spring Framework podría ayudar con eso y otras cosas que podría querer hacer: http://www.springframework.org/


Aunque secundo la solución aceptada, si se necesita un soporte de complemento básico (que es el caso la mayor parte del tiempo), también existe el Marco de complemento de Java (JPF) que, aunque no cuenta con la documentación adecuada, es un marco de plugin muy ordenado. implementación.

Es fácil de implementar y, cuando superas las idiosincrasias de carga de clases, es muy fácil de desarrollar. Un comentario a lo anterior es tener en cuenta que los caminos de carga de complementos debajo del directorio de complementos deben nombrarse después de la ruta de clase completa, además de tener sus archivos de clase implementados en una ruta de paquete de paquete normal llamada ruta de acceso. P.ej

plugins `-com.my.package.plugins `-com `-my `-package `-plugins |- Class1.class `- Class2.class


En el enfoque del cargador de clases casero: si bien es definitivamente una buena forma de aprender sobre los cargadores de clases, existe algo llamado "infierno de cargador de clases", conocido principalmente por personas que lucharon con él cuando se trata de usar en proyectos más grandes. Las clases en conflicto son fáciles de introducir y difíciles de resolver.

Y hay una buena razón por la cual el eclipse se movió a OSGi hace años. Entonces, si es más que un proyecto de mascotas, eche un vistazo serio a OSGi. Vale la pena mirar Aprenderá sobre los cargadores de clases MÁS un estándar emergente de tecnología.


He hecho esto para el software que he escrito en el pasado, es muy útil. Lo hice creando primero una interfaz que todas mis clases de ''complemento'' necesitaban implementar. Luego utilicé el Java ClassLoader para cargar esas clases y crear instancias de ellas.

Una manera de hacerlo es esta:

File dir = new File("put path to classes you want to load here"); URL loadPath = dir.toURI().toURL(); URL[] classUrl = new URL[]{loadPath}; ClassLoader cl = new URLClassLoader(classUrl); Class loadedClass = cl.loadClass("classname"); // must be in package.class name format

Eso ha cargado la clase, ahora necesita crear una instancia de la misma, asumiendo que el nombre de la interfaz es MyModule:

MyModule modInstance = (MyModule)loadedClass.newInstance();


Mire en OSGi .

Por un lado, OSGi proporciona todo tipo de infraestructura para administrar, comenzar y hacer muchas otras cosas con componentes de software modulares. Por otro lado, podría ser demasiado pesado para tus necesidades.

A propósito, Eclipse usa OSGi para administrar sus complementos.


Recomiendo que eche un vistazo de cerca a la API de Java Service Provider (SPI) . Proporciona un sistema simple para encontrar todas las clases en todos los jar en el classpath que se exponen a sí mismos como implementando un servicio particular. Lo he usado en el pasado con sistemas de complementos con gran éxito.