Ist mein Programm in einem Jar-File?


  • Mod

    Hi!

    Wie kann ich innerhalb eines Programms herausfinden, ob sich das Programm in einer JAR-Datei befindet und wie kann ich mit diesen Informationen an die JAR-Datei herankommen (also ein entsprechendes File-Objekt/JarFile-Objekt erstellen)?

    [ Dieser Beitrag wurde am 25.01.2003 um 18:00 Uhr von Gregor editiert. ]



  • Frag mal Cengiz, der müßte das wissen



  • Original erstellt von <nackig>:
    Frag mal Cengiz, der müßte das wissen

    [überflüssiges kommentar]
    Ja, der weiss das bestimmt!
    [/überflüssiges kommentar]

    Wozu brauchst du denn das?
    Ich mein ist deiner Anwendung nicht eigentlich egal?


  • Mod

    Original erstellt von Ingo aka Desert Hawk:
    **
    Wozu brauchst du denn das?
    Ich mein ist deiner Anwendung nicht eigentlich egal?**

    Nein! Ich lasse mein Programm zu Programmstart ein Verzeichnis (das zum Programm gehört) mit seinen Unterverzeichnissen durchlaufen und suche darin bestimmte Dateien bzw. Klassen, die ich dynamisch laden kann. Dummerweise klappt das in Jar-Dateien nicht. Man kommt auf die Art, auf die ich das mache, nicht an die Dateien in den Jar-Dateien heran. Ich habe aber gesehen, dass ich bei Jar-Dateien auf eine andere Art an die Dateien herankommen kann. Das geht natürlich nur, wenn es sich um eine Jar-Datei handelt. Deshalb muss ich erstmal herausfinden, ob sich das Programm in einer Jar-Datei befindet. ...und natürlich brauche die die Jar-Datei dann noch als JarFile, um damit arbeiten zu können.

    [ Dieser Beitrag wurde am 26.01.2003 um 18:30 Uhr von Gregor editiert. ]



  • Ich bin mir nicht sicher, aber kommt man an die Dateien in einer jar-Datei nicht über die Zip-API?


  • Mod

    Original erstellt von Doktor Prokt:
    Ich bin mir nicht sicher, aber kommt man an die Dateien in einer jar-Datei nicht über die Zip-API?

    Jo! ...man kommt da auch direkt mit der Klasse java.util.jar.JarFile ran. Das Problem ist nur, dass man dafür erstmal ein JarFile haben muss.



  • nur mal so eine idee ...
    jar-files enthalten doch immer ein manifest ... könntest du nicht einfach getManifest aufrufen und wenn du null zurückbekommst, dann ist es halt kein jar-file ....



  • gut an 🙂 🙄


  • Mod

    "getManifest" von welcher Klasse bzw. welchem Objekt?



  • aus der von dir genannten java.util.jar.jarfile

    oder habe ich was übersehen?


  • Mod

    Original erstellt von Anfaenger:
    **
    oder habe ich was übersehen?**

    Ja! Leider, es wäre schön, wenn das so leicht gehen würde! 🙂

    ...aber ich habe erstmal garkein JarFile, von dem ich getManifest aufrufen könnte. ...und wenn ich ein JarFile habe, dann weiß ich ja schon, dass es ein JarFile ist.



  • also wenn ich das hier richtig verstehe, musst du nicht wissen, dass es ein jar file ist, damit du es als jar file öffnen kannst:

    The JarFile class is used to read the contents of a JAR file from any file that can be opened with java.io.RandomAccessFile. It extends the class java.util.zip.ZipFile with support for reading an optional Manifest entry. The Manifest can be used to specify meta-information about the JAR file and its entries.

    Aber ich gebe dir recht, dass du dafür erstmal den dateinamen kennen musst 😞



  • Scheint mir sehr Suspekt dein Vorhaben.
    Wenn deine Anwendungen irgendeine Resource im Klassenpfad hat und du dir die URL über getResource ziehst stand, glaube ich, der JAR-Name in der URL wenn die Anwendung in ner JAR liegt ansonsten net.
    Kann mich aber auch täuschen.

    O'Dog


  • Mod

    Ja, ich werde es wohl so machen müssen. ...obwohl mir diese Lösung nicht wirklich gefällt. Eigentlich mag ich nicht gerne irgendwelche Dateinamen aus Strings oder URLs extrahieren. Ich denke, da kann ne Menge schief gehen. ...andererseits mache ich das eh schon und es sollte nicht so schwer sein, da die URL bei einer Jar-Datei mit "jar:" anfängt und hinter der Jar-Datei erstmal ein "!" hat.

    [ Dieser Beitrag wurde am 27.01.2003 um 01:14 Uhr von Gregor editiert. ]


  • Mod

    Hat geklappt! 🙂 🙂 🙂 🙂

    ...sieht aber trotzdem total hässlich aus, aber irgendwie sieht bei mir das dynamische Klassenladen generell hässlich aus. 🙄 ...egal: Jetzt funktioniert JImP wenigstens endlich auch in Form einer Jar-Datei! ...ich glaube, ich mache daraus ein Bildverarbeitungs-Applet! 😃



  • Original erstellt von Gregor:
    ...sieht aber trotzdem total hässlich aus, aber irgendwie sieht bei mir das dynamische Klassenladen generell hässlich aus. 🙄 ...egal: Jetzt funktioniert JImP wenigstens endlich auch in Form einer Jar-Datei! ...ich glaube, ich mache daraus ein Bildverarbeitungs-Applet! 😃

    Hast dir mal überlegt dein Plugin-Geraffel vom Design her vielleicht a bissel anders zu handlen? Irgendwie denke ich das deine Lösung net besonders gut ist 🙂
    Vielleicht etwas in Anlehnung an dem Eclipse-Plugin-Geraffel?

    O'Dog


  • Mod

    Original erstellt von O'Dog:
    **
    Vielleicht etwas in Anlehnung an dem Eclipse-Plugin-Geraffel?
    **

    Wie wird das da gelöst?



  • ich weiss zwar nicht genau, ob das funktioniert...
    ich habs eben nur mal schnell überflogen,
    aber so wie ich das verstanden habe kannst du dir auch den Quellcode von Eclipse anschauen: http://www.eclipse.org/eclipse/faq/eclipse-faq.html#plugin_8

    Wenns das so ist, wie ich mir das jetzt denke, dann könntest Du es Dir da genauer anschauen 😃

    [ Dieser Beitrag wurde am 27.01.2003 um 15:12 Uhr von Ingo aka Desert Hawk editiert. ]



  • Original erstellt von Gregor:
    Wie wird das da gelöst?

    Vom Konzept her das du halt deine Anwendung in den Hauptordner hast und es einen Unterordner "Plugins" gibt wo du für jedes neue Plugin ein Ordner anlegst wo zum einen die JAR der Plugin-Logik liegt und dazu 'ne XML-Datei wo so sachen stehen können wie Menü-Erweiterungen (oder Toolbar) und die Hauptklasse etc.

    Um zu Prüfen ob es einen neues gibt guckst du ob ein neuer Ordner im Plugins-Ordner existiert und validierst die Config(XML)-Datei.

    Hioer mal 'ne Beschreibung wie man für Eclipse ein Plugin baut http://www.eclipse.org/articles/index.html als Inspiration.

    Hab auch net mehr genau in Erinnerung wie das bei dir lief, ich glaub du bist rekursiv alle Dateien (Klassen) durchgegangen und hast geprüft ob es eine bestimmte Super-Klasse hat?

    O'Dog


  • Mod

    Ich habe auch ein Plugin-Verzeichnis mit Unterverzeichnissen, wo alle Plugins drinstehen. ...und da stehen auch größtenteils nur Plugins drin. Ich teste zwar bei jeder Klasse, die ich lade nochmal, ob es sich um ein Plugin handelt, eigentlich müßten aber alle Klassen, die ich lade, Plugins sein (das sind eh nichtmal 15 Stück). Ich mache also eigentlich keine unnütze Arbeit oder so.

    Da Eclipse wohl auch auf Dateien und Verzeichnisse zugreifen muss, um festzustellen, ob es neue Plugins gibt etc, hat man bei so einer Variante zudem das gleiche Problem mit den Jar-Dateien, ist also von daher auch nicht vorteilhaft.

    ...und das mit der Jar-Datei ist mir eigentlich schon wichtig! -> Wie gesagt: Ich möchte da vielleicht ein Applet draus machen. Das Programm wäre dafür auch nicht zu groß. Ich habe vorhin mal überschlagen, dass ich, wenn ich das Startbild weglasse und das Programm eine maximale Größe von 400kB haben dürfte, noch Platz für die 5-fache Funktionalität des aktuellen Programms habe. ...ist natürlich ziemlicher Unsinn, daraus ein Applet zu machen, aber ich kann es tun und das ist Grund genug, es zu tun! 😃

    EDIT : BTW : Hat jemand Lust, ein Office-Paket-Applet zu schreiben?! 😃

    [ Dieser Beitrag wurde am 27.01.2003 um 19:14 Uhr von Gregor editiert. ]


Anmelden zum Antworten