2013-11-26 4 views
5

Angenommen, ich habe eine Schnittstelle com.example.Marker und ich habe eine Implementierung von diesem, zB com.example.MarkerImplA. Um eine von ihnen registrierte, muss ich schauen, um eine Textdatei in META-INF/services/com.example.Marker platzieren wie dieseWie haben mehrere SPI-Implementierungen in einem JAR

com.example.MarkerImplA 

Dieses wie ein Charme funktioniert. Jetzt habe ich eine andere Implementierung in der gleichen Jar-Datei, zB com.example.MarkerImpl2. Wie erreiche ich die Registrierung des zweiten?

Antwort

11

Fügen Sie einfach mehrere Zeilen mit dem voll qualifizierten Anbieters Klassennamen

Also, wenn Ihr SPI com.example.Marker ist

META-INF/services/com.example.Marker 

jede Implementierung in einer neuen Zeile hinzufügen

com.example.MarkerImplA 
com.example.MarkerImplB 
com.example.MarkerImplC 

Einzelheiten nehmen ein Blick auf die JAR File Specification

Provider-Konfigurationsdatei

Ein Dienstleister identifiziert sich durch einen Provider-Konfigurationsdatei in den Ressourcen Verzeichnis META-INF/services setzt. Der Name der Datei sollte aus dem vollständig qualifizierten Namen der abstrakten Serviceklasse bestehen. Die Datei sollte eine neue Zeile getrennte Liste von einzigartigen Beton Provider-Klassennamen enthält. Leerzeichen und Tabulatorzeichen sowie Leerzeilen werden ignoriert. Der Kommentar Zeichen ist "#" (0x23); in jeder Zeile alle Zeichen nach dem ersten Kommentarzeichen sind ignoriert. Die Datei muss in UTF-8 codiert sein.

+0

Vielen Dank für diese anstrengende Antwort! – micfra

Verwandte Themen