Hallo Zusammen,
versuche mich gerade an einem kleinen Projekt mit minimalem Plugin-Konzept (also bei weitem nicht genug für OSGI&Co).
Ich habe mir für diesen Zweck die ServiceLoader API zur Rate gezogen:
Ich habe in Eclipse ein kleines MainProgramm geschrieben, das im Kern nichts anderes macht als die Services auf zu rufen:
dazu habe ich 2 neue Eclipse-Projekte gebaut, die das entsprechende Interface implementieren und die die benötigten Dateien im Projekt beinhalten (meta-inf/services/...).
Wenn ich nun die beiden Service-Projekte als jar-Dateien exportiere und sie zum Testprogramm hinzufüge (ins lib-Verzeichnis und zum Classpath) funktioniert das ganze in Eclipse korrekt: er findet beide Services und ruft die entsprechenden Methoden auf.
Jetzt wollte ich das ganze als ein jar-exporieren.
Also das Main-Programm + die Services im "lib" Ordner. Dazu habe ich ein bisschen mit ant rum gebastelt, sodass ein jar raus komt:
+de/test.... (src des Main Programms)
+lib (enthält die beiden Service-jars)
+META-INF (entält die Manifest-Datei)
Manifest:
Das Programm wird korrekt ausgeführt, die Main Startet, aber er findet KEINE Services?!
Prinzipiell sollte die Class-Path Referenz aber passen, zum test habe ich im Main Programm mal eine Referenz auf einen der Services eingebaut:
>> Funktioniert, also kann er zur Laufzeit die Klassen auflöse... nur der ServiceLoader scheint nicht zu erkennen das die beiden JAR's passende Services sind.
Jemand eine gute Idee? Danke schon mal &
Grüße
Dom
versuche mich gerade an einem kleinen Projekt mit minimalem Plugin-Konzept (also bei weitem nicht genug für OSGI&Co).
Ich habe mir für diesen Zweck die ServiceLoader API zur Rate gezogen:
Ich habe in Eclipse ein kleines MainProgramm geschrieben, das im Kern nichts anderes macht als die Services auf zu rufen:
Java:
ServiceLoader<ExportService> exportServices = ServiceLoader.load(ExportService.class, classLoader);
for (ExportService service : exportServices)
{
System.out.println(service.doExport(MainApplication.getExportData()));
}
dazu habe ich 2 neue Eclipse-Projekte gebaut, die das entsprechende Interface implementieren und die die benötigten Dateien im Projekt beinhalten (meta-inf/services/...).
Wenn ich nun die beiden Service-Projekte als jar-Dateien exportiere und sie zum Testprogramm hinzufüge (ins lib-Verzeichnis und zum Classpath) funktioniert das ganze in Eclipse korrekt: er findet beide Services und ruft die entsprechenden Methoden auf.
Jetzt wollte ich das ganze als ein jar-exporieren.
Also das Main-Programm + die Services im "lib" Ordner. Dazu habe ich ein bisschen mit ant rum gebastelt, sodass ein jar raus komt:
+de/test.... (src des Main Programms)
+lib (enthält die beiden Service-jars)
+META-INF (entält die Manifest-Datei)
Manifest:
Code:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 16.2-b04 (Sun Microsystems Inc.)
Main-Class: de.main.MainApplication
Class-Path: lib/test1.jar lib/test2.jar
Das Programm wird korrekt ausgeführt, die Main Startet, aber er findet KEINE Services?!
Prinzipiell sollte die Class-Path Referenz aber passen, zum test habe ich im Main Programm mal eine Referenz auf einen der Services eingebaut:
Java:
Class c = de.service.test01.service.ServiceExportImpl.class;
System.out.println(c);
Jemand eine gute Idee? Danke schon mal &
Grüße
Dom