jar-Bibiliotheken dynamisch laden

Von: , Frage gestellt am Di, 18. Mai 2004

Liebe Experten,

ich möchte alle jar-Bibliotheken, die sich in einem bestimmten Verzeichnis befinden, in den Klassenpfad einbinden, ohne alle einzeln angeben zu müssen.

Hat jemand eine Idee, wie das geht?

Vielen Dank im Voraus,

Matthias

9 Antworten zu dieser Frage

  1. Antwort von nach 14 Stunden 0 hilfreich
    Re: jar-Bibiliotheken dynamisch laden

    Hallo Matthias,

    z.B. so:

    build.bat
    ---------
    set CP=
    for %%i in (lib\*.jar) do call cp.bat %%i
    
    cp.bat
    ------
    set CP=%CP%;%1
    


    Gruss, Simon

    • Antwort von nach 17 Stunden 1 hilfreich
      Leider keine Lösung für mich

      z.B. so:

      build.bat
      ---------
      set CP=
      for %%i in (lib\*.jar) do call cp.bat %%i
      
      cp.bat
      ------
      set CP=%CP%;%1
      

      Hallo Simon,

      vielen Dank für deine Antwort. Leider löst das mein Problem nicht, denn ich wollte vermeiden, dass ich ein Startskript brauche (die Applikation soll wirklich betriebssystemunabhängig sein).

      Viele Grüße,
      Matthias

      • Antwort von nach 19 Stunden 0 hilfreich
        Re: Leider keine Lösung für mich

        Hallo,

        warum kopierst Du die Bibliotheken nicht da hin wo sie hingehören, nach c:\Programme\Java\j2resonstnochwas\lib\ext

        Dann kannst Du Dir den CLASSPATH schenken.

        Gruß

        Peter [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

        • Antwort von nach 20 Stunden 1 hilfreich
          Re^2: Leider keine Lösung für mich

          warum kopierst Du die Bibliotheken nicht da hin wo sie
          hingehören, nach c:\Programme\Java\j2resonstnochwas\lib\ext
          Seit wann gehören Applikations-Biblotheken ins ext-Verzeichnis?
          Das ist sicher keine gute Idee (Versionen!!!)
          Der Klassenpfad sollte immer explizit angegeben werden!

          • Antwort von nach 22 Stunden 1 hilfreich
            Re^3: Leider keine Lösung für mich

            Applikationsbibliotheken gehören ins Applikationsverzeichnis und da ist auch kein CLASSPATH nötig. Die richtigen Bibliotheken z.b. die JDBC Treiber usw gehören genau da hin. Auf gar keinen Fall sollte man das einfach willkürlich auf seinen Rechner verteilen. Sonst fehlt bei der Auslieferung die Hälfte.

            Gruß

            Peter [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  2. Antwort von nach 20 Stunden 1 hilfreich
    Re: jar-Bibiliotheken dynamisch laden

    ich möchte alle jar-Bibliotheken, die sich in einem bestimmten
    Verzeichnis befinden, in den Klassenpfad einbinden, ohne alle
    einzeln angeben zu müssen.
    Ich weiss nicht ob das auf Windows geht, aber auf HP-UX mit HP VM habe ich mal einen funktionierenden CLASSPATH mit Wildcards gesehen, da ist dann einfach "verzeichnis\*.jar" drinnengestanden.

    Aber "dynamisch" nachgeladen hat er da auch nicht, sondern einfach nur genommen was beim Hochfahren der VM halt da war.

    Grüße, Robert

  3. Antwort von nach einem Tag 1 hilfreich
    Re: jar-Bibiliotheken dynamisch laden

    Moin

    Das geht durchaus, allerding nicht ganz so voll-automatisch wie das normale Klassensystem:

    URL[] U = new URL[1];
    File jarfile = ....;
    U[0] = jarfile.toURL();
    URLClassLoader URLC = java.net.URLClassLoader (U, ClassLoader.getSystemClassLoader());
    Object WAS_AUCH_IMMER_INSTANZ = URLC.loadClass("WAS_AUCH_IMMER", true).newInstance();
    


    Das muss man mit der ersten Klasse (hier mal der einfachheit halber "K1") tun. Wenn K1 dann nach einer Klasse K2 (aus der gleichen jar) sucht wird automatisch URLC angesprochen.

    Der URLClassLoader kann gut mit lokal gespeicherten jar's. Man muss allerdings das Recht haben einen neuen ClassLoader zu erzeugen und java.net & java-io zu benutzen (Also bei Applets darf man das so nicht) Ausserdem geht es erst ab 1.2.

    Für andere Konstruktoren, Methoden, Felder,... kuck dir java.lang.Class, java.lang.ClassLoader und java.lang.reflect.* an.

    cu

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!