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

comment implémenter un Plugin-système 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?
133
demandé sur Marcus Leon 2009-01-21 15:33:01

8 réponses

tout d'abord, vous avez 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 de jar manifest 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 à aller.

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

95
répondu Bombe 2013-07-19 12:14:35

Use OSGi .

c'est la base du système plug-in Eclipse. Equinox est l'implémentation D'Eclipse (licence EPL) et Felix est l'implémentation du projet Apache (Licence Publique Apache).

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

41
répondu 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 plus que des fonctionnalités de base, utilisez l'un des cadres existants.

29
répondu Pete Kirkham 2011-05-09 05:16:07
16
répondu jan 2014-05-09 09:14:26

J'ai travaillé sur OSGi pendant une semaine -- une semaine intense, rien Qu'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 périmés, tout sur le net a au moins trois ans sinon cinq), mais j'ai eu de sérieuses difficultés à l'intégrer dans un projet existant en raison de problèmes avec les jar manifeste.

en bref, il n'y a que quelques outils obscurs utilisés pour les manifestes de construction et ils ne sont pas bien documentés (outils BND est à peine obscur, mais il est conçu pour un certain processus dans Eclipse). En outre, la plupart des informations OSGi disponibles ne sont pas destinées aux développeurs d'applications qui ont une application bureautique existante.

cela rend beaucoup de contexte pour l'information brumeuse ou inappropriée. Les billets de blog de Neil Bartlett ont été la plus grande aide, mais même ceux qui n'ont pas réussi à obtenir un système de travail (j'ai attrapé un certain code de le tutoriel Félix et assemblé pour faire démarrer le cadre intégré). 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 fonctionne pas en raison de changements dans le soutien OSGi Eclipse.

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

13
répondu Sean Anderson 2014-06-14 15:17:06

je pense que recommander OSGi pour résoudre le problème énoncé ci-dessus est un très mauvais conseil. OSGi est "le bon choix" mais pour un scénario comme celui ci-dessus, je pense que JPF ou un cadre minimaliste maison est suffisant.

9
répondu Steen 2009-01-29 18:24:59

utiliser PF4J. Il a le soutien pour le Web, le ressort et le Wicket. Facile à utiliser et construire les applications

9
répondu 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 sera prêt.J'ai été inspiré par des projets comme NetBeans et Eclipse mais en attendant il a changé en quelque chose un peu différent. OSGi semble être un bon choix maintenant, mais je n'ai pas eu la chance de le comparer avec mon projet.Il est similaire à 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 à construire L'application Java, avec il n'y a pas de séparation entre les applications web, les applications bureautiques 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 dans mon esprit :

  • cela n'a pas d'importance si vous construisez une application web ou une application de bureau, vous devriez démarrer l'application de la même manière, une méthode principale simple, Aucune Fantaisie web.déclaration xml(pas que je suis contre le fait d'avoir un standard web descripteur, mais il ne va pas bien avec un système plug-in, où vous ajoutez "servlets" - je les appelle RequestHandler(S) - dynamique à votre volonté).
  • facile à brancher dans "extensions" autour d'un "point d'extension" - quelque chose à partir 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 ya une tâche Ant et un MOJO Maven qui sont les liens avec le monde d'ourside, mais à la fin il appelle l'application et lui donnent l'instruction de s'auto-déployer à un endroit spécifique.
  • emprunté à Maven, il peut télécharger du code à partir de dépôts (y compris les dépôts Maven 1 et 2) de sorte que votre application peut être déployée en un seul petit pot aussi longtemps que vous avez accès aux dépôts (utile parfois, et essentiellement cela fournit le soutien pour les mises à jour automatiques - ne vous aimez pas l'idée d'être notifié par votre application web qu'il y a une nouvelle version, qu'elle a été téléchargée et qu'elle a juste besoin de votre permission pour l'installer? Je sais que j'aime ça).
  • de base de surveillance de l'application du système de santé, des notifications par email en cas de défaillances
3
répondu adrian.tarau 2009-10-23 14:03:41