Frage bzgl. Abhängigkeiten von Plugins (externe jars)​

  • German

2019-04-16: A new hotfix (0.9.5.7) is now available!

  • Frage bzgl. Abhängigkeiten von Plugins (externe jars)​

    Hallo,

    wahrscheinlich kannst du @red51 mir am ehesten diese Frage beantworten, aber ich stelle sie mal allgemein. Ich habe eine jar die ich in 2 Plugins verwende, diese liegt jeweils in /plugins/PLUGIN/lib/externe.jar
    Wenn ich jetzt eins der Plugins aktualisiere und eine neuere Version von externe.jar verwende, läd er aber nicht die aktuellste sondern die, die er zuerst findet. Findet er die ältere, gibt es Fehler.

    Wo ist ein geeigneter Ort um "shared" libs zu speichern, ohne dafür ein eigenes Plugin zu hinterlegen (das evtl wieder nicht vor den anderen geladen wird)

    Viele Grüße
    Devidian
    Gamer aus Leidenschaft
    (Web) Entwickler aus Leidenschaft
    <3 Vater aus Leidenschaft <3
    (prio in aufsteigender Sortierung ;) )

    ~~~~~~~~~~~~~~~~~
    1. Entweder man macht etwas richtig oder lässt es bleiben!
    2. Egal wie lange etwas dauert, Hauptsache es wird fertig (irgendwann)
    ------------------------
    Discord: Devidian#1334
  • Üblicherweise werden die Dependencies in den "lib" Ordner im Plugin-eigenen Unterordner gepackt (also tatsächlich zB "/plugins/PLUGIN/lib/externe.jar"). Du kannst bspw. auch irgendwo einen zentralen Ort für eine shared Lib festlegen (zB "/plugins/sharedLibs/externe.jar"), dafür musst du aber die Manifest Datei im Plugin selbst bearbeiten. Öffne dazu deine Plugin .jar mit einem Zip-Programm, gehe in den META-INF Ordner und öffne die "MANIFEST.MF" Datei. In der Zeile "Class-Path" wird normalerweise der Pfad zur Lib festgelegt, i.d.R. als relativer Pfad. Du kannst aber auch einen absoluten Pfad angeben, zB Class-Path: file:///C:/RisingWorld/shared/externe.jar

    Absolute Pfade sind natürlich äußerst unpraktisch wenn du das Plugin ausliefern möchtest, also kannst du auch einen relativen Pfad angeben und auf ein Parent-Verzeichnis verweisen. Wenn deine Lib also zB in "/plugins/shared/lib/externe.jar" liegt, könnte der Classpath so aussehen: Class-Path: ../shared/libs/externe.jar

    Da Änderungen an der Manifest-Datei aber jedesmal vorgenommen werden müsssen, wenn du das Plugin updatest, würde es sich hier anbieten, bpsw. direkt das build-Script in Netbeans (bzw. der IDE deiner Wahl) anzupassen ;)
  • ok danke, muss ich mal gucken, ich glaube wenn ich eine jar in plugins/ordner/jar.jar packe wird er im log meckern das die jar keine plugin.yml hat. also dann eher plugins/shared/libs/jar.jar wie du schon angemerkt hast :D
    Gamer aus Leidenschaft
    (Web) Entwickler aus Leidenschaft
    <3 Vater aus Leidenschaft <3
    (prio in aufsteigender Sortierung ;) )

    ~~~~~~~~~~~~~~~~~
    1. Entweder man macht etwas richtig oder lässt es bleiben!
    2. Egal wie lange etwas dauert, Hauptsache es wird fertig (irgendwann)
    ------------------------
    Discord: Devidian#1334
  • Devidian wrote:

    ich glaube wenn ich eine jar in plugins/ordner/jar.jar packe wird er im log meckern das die jar keine plugin.yml hat
    Ja, das ist leider das Problem =/ Das Spiel würde denken, es handle sich um ein eigenständiges Plugin, und es wird eine Fehlermeldung geworfen (was an sich zwar kein großes Problem darstellt, aber dennoch unschön ist). Wenn sich die .jar aber in einem Unterordner befindet sollte das kein Problem mehr sein ;)
  • XML Source Code: pom.xml

    1. <plugin>
    2. <groupId>org.apache.maven.plugins</groupId>
    3. <artifactId>maven-jar-plugin</artifactId>
    4. <configuration>
    5. <archive>
    6. <manifestEntries>
    7. <Class-Path>../shared/lib/tools.jar</Class-Path>
    8. </manifestEntries>
    9. </archive>
    10. </configuration>
    11. </plugin>
    Display All
    Ich glaube das Funktioniert, hat zumindest im lokalen SP test funktioniert.
    Gamer aus Leidenschaft
    (Web) Entwickler aus Leidenschaft
    <3 Vater aus Leidenschaft <3
    (prio in aufsteigender Sortierung ;) )

    ~~~~~~~~~~~~~~~~~
    1. Entweder man macht etwas richtig oder lässt es bleiben!
    2. Egal wie lange etwas dauert, Hauptsache es wird fertig (irgendwann)
    ------------------------
    Discord: Devidian#1334