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


Comment implémenteriez-vous un système de Plugin pour votre application Java?

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

  • Les utilisateurs placent leurs plugins dans un sous-répertoire de l'application
  • Le Plugin peut fournir un écran de configuration
  • Si vous utilisez un framework, la licence est-elle compatible avec le développement commercial?
Author: Marcus Leon, 2009-01-21

8 answers

Vous avez d'abord besoin d'une interface que tous les plugins doivent implémenter, par exemple

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

Les auteurs de plugins doivent ensuite regrouper leurs plugins dans des fichiers JAR. Vos applications ouvrent le fichier JAR et peuvent ensuite utiliser un attribut du manifeste JAR ou la liste de tous les fichiers du fichier JAR pour trouver la classe qui implémente votre interface de plugin. Instancier cette classe, le plugin est prêt à partir.

Bien sûr, vous pouvez également implémenter une sorte de sandboxing afin que le plugin soit 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'un se voit refuser l'accès aux ressources locales.

 95
Author: Bombe, 2013-07-19 12:14:35

UtilisezOSGi .

C'est la base du système de plug-in Eclipse. Equinox est l'implémentation d'Eclipse (sous licence EPL) etFelix est l'implémentation du projet Apache (sous licence Apache Public License).

Eclipse fournit un exemple concret qu'OSGi peut couvrir les points que vous avez mentionnés (ou vous pouvez simplement construire votre application au-dessus deEclipse RCP si vous voulez une pile Eclipse/SWT/JFace complète).

 41
Author: Aaron Maenpaa, 2017-03-03 09:21:14

Depuis 1.6, il y a eu 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 frameworks existants.

 29
Author: Pete Kirkham, 2011-05-09 05:16:07
 16
Author: jan, 2014-05-09 09:14:26

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

J'ai pu faire fonctionner OSGi (pas facile, tous les exemples sont obsolètes, tout sur le net a au moins trois ans sinon cinq), mais j'ai eu de sérieux problèmes pour l'intégrer dans un projet existant à cause de problèmes avec les manifestes jar.

En bref, il n'y a que quelques outils obscurs utilisés pour construire des manifestes et ils ne le sont pas bien documenté (BND Tools n'est guère obscur, mais il est conçu pour un certain processus dans Eclipse). De plus, la plupart des informations OSGi disponibles ne sont pas destinées aux développeurs d'applications disposant d'une application de bureau existante.

Cela rend beaucoup de contexte pour l'information brumeux ou inapproprié. Les articles de blog de Neil Bartlett ont été la plus grande aide, mais même ceux-ci n'ont pas réussi à obtenir un système de travail (j'ai attrapé du code du tutoriel Felix et l'ai reconstitué pour obtenir le cadre intégré roulant). J'ai trouvé son brouillon de livre qu'il a posté gratuitement il y a des années, ce qui est excellent, mais les exemples dans Eclipse ne fonctionnent pas en raison des changements dans le support Eclipse OSGi.

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

 13
Author: Sean Anderson, 2014-06-14 15:17:06

Je pense que recommander OSGi pour résoudre le problème mentionné ci-dessus est un conseil extrêmement médiocre. OSGi est "le bon choix" mais pour un scénario comme celui ci-dessus, je pense que JPF ou un cadre minimaliste local est suffisant.

 9
Author: Steen, 2009-01-29 18:24:59

Utiliser PF4J. Il a un support pour le Web, le printemps et le guichet. Facile à utiliser et à construire les applications

 9
Author: Mallikarjuna Sangisetty, 2014-11-24 14:12:57

Il y a des années, j'ai commencé un projet comme celui-là et j'espère que bientôt je serai prêt.Je me suis inspiré de projets comme NetBeans et Eclipse, mais en attendant, cela a changé pour quelque chose d'un peu différent. OSGi ressemble à un bon choix maintenant, mais je n'ai pas eu l'occasion de le comparer avec mon project.It est similaire avec JPF mentionné ci-dessus, mais en même temps différent à bien des égards.

L'idée de base qui m'a motivé est d'être aussi facile que possible de construire une application Java, sans séparation entre les applications Web, les applications de bureau ou les applications applet/JWS(bien sûr, cela ne couvre pas encore l'interface utilisateur) en tant que fonctionnalité de base.

J'ai construit le projet avec quelques objectifs en tête:

  • peu importe si vous créez une application Web ou une application de bureau, vous devez démarrer l'application de la même manière, une méthode principale simple, pas de web sophistiqué.déclaration xml (pas que je sois contre un descripteur Web standard, mais cela ne va pas bien avec un système de plug-in, où vous ajouter "servlets" - Je les appelle RequestHandler (s) - dynamique à votre guise).
  • facile à brancher "extensions" autour d'un "point d'extension" - quelque chose d'Eclipse mais une approche différente.
  • auto-déployable, puisque tous les plugins sont enregistrés (fichiers XML), l'application doit être auto-déployable indépendamment du système de construction - bien sûr, il y a une tâche Ant et un MOJO Maven qui sont les liens avec le monde ourside, mais à la fin, il appelle l'application et lui demande de auto-déploiement lui-même à un emplacement spécifique.
  • emprunté à Maven, il peut télécharger du code à partir de référentiels (y compris les référentiels Maven 1 et 2) afin que votre application puisse être déployée comme un seul petit pot tant que vous avez accès aux référentiels (utile parfois, et fondamentalement, cela prend en charge les mises à jour automatiques-n'aimez - vous pas l'idée d'être informé par votre application Web qu'il existe une version plus récente, qu'elle a été téléchargée et qu'elle a juste besoin de votre permission pour l'installer? Je sais que je l'amour que).
  • surveillance de base des applications sur la santé du système, notifications par e-mail en cas de défaillance
 3
Author: adrian.tarau, 2009-10-23 14:03:41