2010-08-06 13 views
5

Ich schreibe eine Web-App in Eclipse.Wohin man die ServiceLoader-Konfigurationsdatei in eine Web-App einfügt

Ich versuche, die ServiceLoader-Klasse zu verwenden, um einige Plugins zu laden.

Die Dokumente für ServiceLoader sagen, dass ich eine Datei in META-INF/Dienste platzieren muss.

Ich habe die Datei in den Ordner WebContent/META-INF/service gestellt, aber wenn ich den JUnit Test über Eclipse starte, findet sie keine Plugins.

Ist dies der richtige Speicherort für die Datei?

Wie kann ich weitere Debug-Informationen von ServiceLoader erhalten, z. B. die Ordner, in denen nach der Datei gesucht wird?

Antwort

7

Die META-INF/services sollten die Wurzel der JAR-Datei oder des Ressourcenverzeichnisses im Klassenpfad des Klassenloaders sein, der zum Auffinden von Plugins verwendet wird.

Wenn Sie eine Web-Anwendung haben, dann können Sie die Verzeichnisstruktur wie haben:

<webappname>/WEB-INF/classes/META-INF/services 

Aber der ideale Weg ist, es ist in Ihrem Plugin JAR-Datei zu haben. Wenn Sie zB ein Plugin haben als WEB-INF/lib/myplugin.jar gebündelt und Plugin-Klasse ist com.example.plugin.MyPlugin Dann wird das Glas eine Struktur haben sollte:

myplugin.jar!/META-INF/services/com.example.plugin.MyPlugin 

getan zu haben, dass Sie einen Service-Loader mit Ihrer Web-Anwendung

Klassenlader bekommen
+0

OK, ich habe es jetzt funktioniert! Hätte nie gedacht, dass es in den Ordner WEB-INF geht! Ich werde die Idee verwenden, später eine JAR-Datei zu erstellen, wenn ich ein Ant-Skript bekomme. – ljbade

+0

@Leith cool, aber machen Sie diese Änderung (über JAR-Dateien) früher als später :) – naikus

Verwandte Themen