152 votes

Meilleure façon de construire un système de Plugin avec Java

Comment mettrait en œuvre un système de greffons pour votre application Java ?

Est-il possible d’avoir un système facile à utiliser (pour le développeur) qui réalise ce qui suit :

  • Utilisateurs de mettent leurs plugins dans un sous-répertoire de l’application
  • Le Plugin peut fournir un écran de configuration
  • Si vous utilisez un cadre, est la licence compatible avec le développement commercial ?

111voto

Bombe Points 34185

D'abord vous avez besoin d'une interface que tous les plugins ont besoin pour mettre en œuvre, par exemple

public interface Plugin {
    public void load(PluginConfiguration pluginConfiguration);
    public void run();
    public void unload();
    public JComponent getConfigurationPage();
}

Les auteurs de plugins doivent alors bundle leurs plug-ins dans des fichiers JAR. Vos applications ouvre le fichier JAR et pourrait alors utiliser un attribut à partir de POT de manifester ou de la liste de tous les fichiers dans le fichier JAR de trouver la classe qui l'implémente interface du Plugin. Instancier cette classe, le plugin est prêt à aller.

Bien sûr, vous pouvez également mettre en œuvre une sorte de bac à sable afin que le plugin est limité dans ce qu'il peut et ne peut pas faire. J'ai créé une petite application de test (et blogué à ce sujet) qui se compose de deux plugins, dont l'accès est refusé aux ressources locales.

43voto

Aaron Maenpaa Points 39173

Utiliser OSGi.

C'est le fondement de l'Éclipse système de plug-in. Equinox est l'Éclipse de la mise en œuvre (sous licence EPL) et Felix est Apache mise en œuvre du Projet (sous licence Apache Licence Publique).

Eclipse fournit un exemple concret qui OSGi peut couvrir les points que vous avez mentionnés (ou vous pouvez créer votre application sur le dessus de Eclipse RCP si vous voulez une Éclipse complète/SWT/JFace pile).

30voto

Pete Kirkham Points 32484

1.6, depuis java.util.ServiceLoader , qui peut être utilisé si vous voulez coder votre propre système simple.

Mais si vous voulez autre chose que des fonctionnalités de base, utilisez l’un des cadres existants.

16voto

jan Points 203

Il y a aussi des JPF (Java Plugin Framework).

15voto

Sean K Anderson Points 101

J'ai travaillé sur OSGi pour une semaine--intense, mais rien de OSGi semaine. À la fin, c'était comme un mauvais rêve, mais j'ai beaucoup appris.

J'ai été en mesure d'obtenir OSGi de travail (pas facile, tous les exemples ne sont pas à jour, tout sur le net est d'au moins trois ans au lieu de cinq), mais j'ai eu de graves problèmes à la faire intégrer dans un projet existant en raison de problèmes avec le pot se manifeste.

En bref, il y a seulement quelques obscurs des outils utilisés pour la construction des manifestes et ils ne sont pas bien documentés (BND Outils est peu obscur, mais il est conçu pour un certain processus dans Eclipse). Aussi, la plupart des OSGi l'information disponible n'est pas destiné aux développeurs d'applications qui possèdent déjà une application de bureau.

Cela rend beaucoup du contexte à l'information dans le brouillard ou inapproprié. Neil Bartlett messages de blog ont été la plus grande aide, mais même ceux qui ont échoué à obtenir un système de travail (j'ai attrapé un peu de code à partir de la Felix tutoriel et assemblés ensemble pour obtenir le cadre intégré de roulement). J'ai trouvé son livre le projet qu'il a posté pour gratuit ans, ce qui est excellent, mais les exemples dans Eclipse ne fonctionnent pas en raison de changements dans Eclipse, OSGi soutien.

Chaque étape est un obstacle majeur. Je vais essayer de poster un peu plus de détails ici plus tard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X