IWI Geschrieben 12. Dezember 2010 Teilen Geschrieben 12. Dezember 2010 Hi! Ich hab da mal eine Frage zur Abhängigkeit von Projekten. Es geht darum, dass ich ein bestehendes Projekt durch ein Plugin erweitern möchte. Ich erklärs mal am Beispiel, wo genau mein Problem liegt. Um genau zu sein würde ich gerne eine Art Autovervollständigung in das Projekt durch mein Plugin einbauen. Nun aber vollgendes: Wenn mein Plugin nun das Projekt kennt, aber nicht anders herum, wann weiß das Projekt dann, wann das Plugin aktiv werden muss? Ich kann es (das Plugin) im BuildPath nicht referenzieren und kann somit auch keine Instanz davon erzeugen, um eine Methode innerhalb dieses Plugins aufzurufen. Denn wenn ich das Plugin referenziere, kann das Plugin wiederum das Projekt nicht referenzieren, da ich sonst einen unerlaubten Kreislauf habe. Mir ist leider bislang nur der Weg bekannt, dass im Projekt eine Instanz einer Klasse des Plugins erzeugt wird und diese dann im Laufe des Programms aufruft. Schnittstellen sind mir sicherlich bekannt, aber vllt. ist mir die korrekte Verwendung einfach auch noch nicht ganz klar. Prinzipiell stellt das Projekt ja Schnittstellen bereit. Das Plugin kennt diese Schnittstellen und kann sie implementieren. Aber wie merkt das Projekt nun wiederum, dass ein externes Plugin diese Schnittstelle implementiert, ohne ein Instanze einer Klasse dieses Plugins zu erzeugen, da dies ja nicht erlaubt ist (--> Kreislauf)? Gruß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ksg9-sebastian Geschrieben 14. Dezember 2010 Teilen Geschrieben 14. Dezember 2010 (bearbeitet) Dafür gibt es Hunderte von Möglichkeiten. Die bekanntesten sind wohl: - Produkt durchsucht ein Verzeichnis nach Plugins, z.B. im JAR-Format und erzeugt diese (per Reflection) - Plugins werden in einer (XML-)Datei des Produkts registriert - Produkt bietet einen Pluginmanager welcher es erlaubt Plugins zu installieren Du musst unterscheiden zwischen Abhängigkeiten zur Compilezeit (Buildpath) und Abhängigkeiten zur Laufzeit. Mit einem normalen Java SDK/JRE (kein OSGi) gibt es zur Laufzeit keine Definitionen von Abhängigkeiten. Zur Laufzeit sind auch keine Produkte oder Projekte bekannt. Da gibt es nur einen Classpath. Alles was in dem Classpath ist kann referenziert werden. Der Grund warum eine IDE meckert ist logisch: Wenn A von B abhängt und B von A dann kann nicht gebaut werden denn: -Um A zu kompilieren werden die Class-Dateien von B benötigt -Um B zu kompilieren werden die Class-Dateien von A benötigt Und da wäre der Kreis wieder Es macht auch keinen Sinn dass das Produkt seine Plugins kennt, sonst wären es ja keine Plugins. Dadurch hättest du die Abhängigkeit ja so gebaut das für ein neues Plugin jedesmal eine Änderung im Produkt notwendig wäre. Bearbeitet 14. Dezember 2010 von ksg9-sebastian Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.