2016-06-19 7 views
0

Erst vor kurzem habe ich Eclipse verwendet und bin auf ein Problem beim Exportieren des Plugins gestoßen, an dem ich gerade arbeite. Ich habe versucht zu suchen aber bisher noch kein Glück - aber wenn die Antwort schon da wäre wäre ich dankbar wenn mich jemand darauf hinweisen könnte.Exportieren eines Eclipse-Plugins mit einer Abhängigkeit von einem externen Jar

Ich schreibe ein n OSGi/Equinox-Plugin mit Eclipse. Das Plugin ist für ein Drittanbieter-System, das Erweiterungen erlaubt: Grundsätzlich werden alle im Plug-In-Ordner der Anwendung platzierten Jars beim Start automatisch in die Anwendung geladen. Ich habe es geschafft mein Plugin zusammen zu stellen, es wird geladen und es funktioniert. Das Problem ist, dass ich auf ein anderes Plugin angewiesen bin, das neben meinem im Plugins-Ordner platziert ist. Aus offensichtlichen Gründen möchte ich dieses Plugin nicht in meine JAR-Plugin-Datei packen. Ich habe versucht, die Abhängigkeit als externes Archiv hinzuzufügen, aber das bricht den Export: Wenn ich versuche, mein Plugin-Projekt zu exportieren, beschwert sich Ameisen über fehlende Abhängigkeiten und Typen. (Wenn ich die andere JAR-Datei in mein Plugin einfüge funktioniert alles, aber offensichtlich ist das weniger als ideal.)

Also: wie richte ich meine Plugin-Projektabhängigkeit ein, das ist a) eine externe Abhängigkeit und b) muss nicht mit einem Pfad oder einer Variablen angegeben werden - dh wie sage ich meinem Exporteur: "Mach dir keine Sorgen, es wird direkt neben dir sein"?

Edit: Anscheinend gibt es ein wichtiges Detail, das ich nicht erwähnt habe. Die externe JAR-Datei, von der ich abhängig bin, ist nicht ein OSGi-Plugin, nur eine normale JAR-Datei mit einigen Klassen darin. Dem 3rd-Party-System scheint es egal (alle sind unter dem Plugins-Ordner, alle sind in die Anwendung geladen), aber für Eclipse scheint die Unterscheidung wichtig.

Antwort

0

Am Ende war die Lösung für mein spezifisches Problem, die externe JAR-Datei als Extra Classpath Entry auf der Registerkarte Build-Eigenschaften hinzuzufügen (dies übersetzt in einen "jars.extra.classpath = .jar" -Eintrag im Build. Eigenschaftendatei). Ich habe auch die JAR-Datei zum Projekt selbst hinzugefügt - nach dem Hinzufügen des zusätzlichen Klassenpfadeintrags, der automatisch in eine externe Abhängigkeit geändert wurde.

Mit diesen beiden Änderungen konnte ich mein Plugin erfolgreich exportieren, das die externe JAR-Datei nicht enthielt, aber beim Laden in das 3rd-Party-System darauf verweisen konnte.

2

Wenn Sie das andere Plug-in als Abhängigkeit in der Plug-in-Datei MANIFEST.MF referenzieren, sollte der Export ohne Fehler funktionieren. Das Plug-in sollte in der Liste Require-Bundle in der MANIFEST.MF aufgeführt sein.

Sie können dies im MANIFEST.MF-Editor tun, indem Sie auf der Registerkarte 'Abhängigkeiten' des Editors die Liste 'Erforderliche Plugins' hinzufügen.

Hinweis: Wenn Sie auf andere Plug-Ins verweisen, müssen Sie immer diese Methode verwenden. Versuchen Sie nicht, das Plug-in-JAR für den Java-Erstellungspfad oder ähnliches hinzuzufügen.

Wenn das jar, das Sie verwenden möchten, kein Eclipse-Plug-in ist, müssen Sie es als Teil des Plug-ins einschließen und das jar in der Bundle-Classpath in der MANIFEST.MF auflisten. Wenn Sie dies nicht tun können, können Sie ein externes Gefäß im Bundle-Classpath mit so etwas wie Referenz:

Bundle-Classpath: .,external:$LIB_LOCATION$/lib.jar 

. der normale Eintritt ist in für die Plug-in-Code. external:$LIB_LOCATION$/lib.jar sucht an einem durch die Umgebungsvariable LIB_LOCATION definierten Speicherort nach lib.jar. Diese Methode kann schwierig sein, richtig zu machen.

+0

Leider scheint die Required Plug-ins-Liste nur Plugin-Typ-Gläser zu akzeptieren - während meine externe Jar eine normale JAR-Datei mit einigen Klassen darin ist (siehe meine Bearbeitung oben). Irgendwelche weiteren Vorschläge? – Babszem

+0

Einige Informationen über nicht-steckbare Gläser hinzugefügt –

+0

Ich habe versucht, was Sie vorgeschlagen haben. Ich muss mein zusätzliches Glas als eine externe Glasabhängigkeit mindestens hinzufügen, um es zu bauen. Dann habe ich wie vorgeschlagen den Bundle-Classpath external: .jar hinzugefügt, aber der Export schlägt leider immer noch fehl. Der Fehler lautet: // .jar = src existiert nicht! – Babszem