[JAVA] plugin systeem

Pagina: 1
Acties:

  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 29-11 20:34
Na lang klooien met een classpath om op die manier mijn programma op nieuwe classes te wijzen heb ik het maar opgegeven: Een manifest.mf kan wel een Class-Path bevatten, maar daar moeten absolute verwijzingen in staan.
Ik wil graag wat losse JARs in een /plugin directory plaatsen en deze met behulp van Class.forName tijdens runtime eraan hangen.

Klopt het nu dat ik het beste kan gaan kijken naar het implementeren van een custom ClassLoader die mijn JARs weet te vinden? Ik wilde even zeker weten dat ik niet een makkelijkere oplossing laat liggen. Met google kan ik niet veel vinden over het dynamisch laden van classes vanuit een jar.

You can't have everything. Where would you put it?


  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 01-12 14:58

JaWi

maak het maar stuk hoor...

Is one-jar niet iets? Een van de eerste hits als je op "java JAR classloader" google'd.
Als je echt een full-featured plugin systeem in Java wilt, zou je OSGi kunnen overwegen, da's o.a. de plugin core van Eclipse en project Harmony.

edit:
spel-vouten

[ Voor 5% gewijzigd door JaWi op 11-12-2006 15:47 ]

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 29-11 20:34
One-Jar en FatJar heb ik al eerder gebruikt, maar die zijn in dit geval niet goed genoeg, omdat ik van tevoren niet weet welke JAR er in de plugins directory gaat staan.

Het hoeft ook geen fully featured plugin systeem te worden (dat is way overkill) omdat de JAR slechts 1 simpele methode exposed (hij implementeert een simpele interface).

Ik zie nog steeds geen andere methode dan een eigen class-loader.

[ Voor 9% gewijzigd door tweakerbee op 11-12-2006 15:58 ]

You can't have everything. Where would you put it?


  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 01-12 14:58

JaWi

maak het maar stuk hoor...

Iets verder zoeken levert, IMO, toch wel iets interessants op: Java Plugin Framework.
Zelf met ClassLoaders gaan lopen prutsen is -denk ik- niet iets wat je graag wilt...

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:05

voodooless

Sound is no voodoo!

tweakerbee schreef op maandag 11 december 2006 @ 15:58:
One-Jar en FatJar heb ik al eerder gebruikt, maar die zijn in dit geval niet goed genoeg, omdat ik van tevoren niet weet welke JAR er in de plugins directory gaat staan.
Maar je weet wel de classe naam die je gaat gebruiken in je class.forName() :? Als je dat weet, dan zou je toch ook prima de jar kunnen weten lijkt me.

Anders moet je alle jar's in je dir inladen en dan je class.forName doen. Lijkt me ook niet erg handig...

Je zou eventueel nog wat met de manifest file van de jars kunnen doen en aan de hand daarvan de plugins laden.

[ Voor 9% gewijzigd door voodooless op 11-12-2006 16:31 ]

Do diamonds shine on the dark side of the moon :?


  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 29-11 20:34
Die string in class.forName wordt vanuit een UI ingegeven. Het idee is dat hij leest welke jars er in een directory staan en de gebruiker dan daar eentje van kan kiezen. Het zal niet nodig zijn om ooit meer dan een plugin te gebruiken. Er wordt dan tijdens het uitvoeren van het programma ook maar één plugin gebruikt (hoewel er meerdere aanwezig kunnen zijn).

Ben nu toch aan het prutsen met classloaders, het is niet zo ingewikkeld als ik dacht.

You can't have everything. Where would you put it?


  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:05

voodooless

Sound is no voodoo!

Dus de gebruiker moet die ellelange classname weten en zelf intypen :?

Lijkt me niet erg handig...

Do diamonds shine on the dark side of the moon :?


  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 29-11 20:34
Nee, de applicatie maakt een lijstje van alle plugins die in nl.company.package.extension staan. Daar kan de gebruiker uit kiezen (dropdown) en dat wordt doorgegeven aan de classloader.
Momenteel hebi k een classloader die werkt, het nadeel is dat hij geen jars kan laden, maar dat is wel op te lossen door de plugins in een zip te plaatsen en deze door het programma uit te laten pakken in de plugins directory.

In ieder geval dank voor de hulp, ik ga zeker nog eens kijken naar JPF (misschien later nog eens interessant).

You can't have everything. Where would you put it?


  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:05

voodooless

Sound is no voodoo!

zip = jar :P

Verder ben je niet erg flexibel als je dat standaard package aan wil houden.

Ik zoukunnen proberen die plugin classes uit de manifest files van de jars te laden. Is best een nette oplossing lijkt me.

Do diamonds shine on the dark side of the moon :?


  • misfire
  • Registratie: Maart 2001
  • Laatst online: 12-10-2024
Als je serieus aan de bak wilt met plug-ins dan denk ik dat OSGi iets is om naar te kijken. De bekendste implementatie van OSGi is Eclipse: http://www.eclipse.org/equinox/. Hier zijn veel "moeilijke" dingen al voor je opgelost: dependency management, registeren van uitbreidingen, enz. Maar wellicht is het overkill voor jouw probleem. Kun je meer vertellen over wat je de plug-ins wilt laten kunnen doen?

  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 29-11 20:34
Het maakt niet uit dat ze allemaal in die package moeten staan. Het gaat om een indexing proces waarbij er wat extra handelingen aan het proces toegevoegd kunnen worden. Die komen dan in de plugin.

O, en Equinox is op het moment inderdaad vreselijk overkill. :)

[ Voor 14% gewijzigd door tweakerbee op 12-12-2006 10:11 ]

You can't have everything. Where would you put it?

Pagina: 1