/WEB-INF/classes in Classpath aufnehmen

AceTheFace

Mitglied
Hallo,

folgende Situation:

Mittels eines PluginFrameworks wird der gesamte Classpath nach Klassen gesucht, die ein bestimmtes PluginInterface implementieren. Das funktioniert auch wunderbar, solange es sich um "normale" Java-Anwendungen handelt.
Läuft das ganze allerdings über einen Servlet-Container (bspw. Tomcat) enthält der Classpath den Pfad zu WEB-INF/classes leider nicht, weswegen die entsprechenden Plugins nicht gefunden werden.
Klar könnte ich nun über System.setproperty den lokalen Pfad zum Classpath hinzufügen, aber das wäre ja äusserst unschön.

Da das PluginFramework an sich absolut portabel bleiben soll, kann ich dort auch nicht mit Dingen wie ServletContext arbeiten.
Ein bißchen googlen brachte mir zumindest schon mal mehrere Seite zum Thema Classloader.
Ich komme auch per Thread.currentThread().getContextClassLoader(); an den Classloader (webappClassLoader) des Servlets, der also repository auch /WEB-INF/classes enthält, aber ich habe keine Ahnung was ich damit denn nun anstellen kann.

Eine Alternative wäre es, den PluginLoader so zu ändern, dass er nicht mehr über den Classpath sucht. Dann bräuchte ich allerdings Hilfe, wie ich denn alle für einen ClassLoader sichtbaren Dateien bekommen.

Vielleicht hat ja jemand einen Tipp für mich.

Gruß,
Ace
 
Zuletzt bearbeitet:
Also meine momentane Lösung sieht so aus:

Java:
String classPath = System.getProperty("java.class.path");
try {
            String context = Thread.currentThread().getContextClassLoader().getResource("/").getFile();
            if(!classPath.contains(context)) {
                classPath += ":"+context;
                System.setProperty("java.class.path",classPath);
            }
        }
        catch(NullPointerException e) {    
        }

Funktioniert sowohl bei Servlets als auch bei "normalen" Anwendungen. Wenn jemand noch schönere Lösungen hat, immer her mit :)

Gruß,
Ace
 

Neue Beiträge

Zurück