Wir bauen eine gemeinsame Komponente auf, die eine Abhängigkeit für mehrere andere Projekte darstellt.Java/Maven - Saxon ohne SeviceLoader override
Unser Projekt führt einige XSLT-Transformationen durch und wir müssen die Saxon-Engine verwenden.
Wir haben die volle Kontrolle über die spezifische XSLT-Transformation, die Saxon verwenden muss, aber keine Kontrolle über den Klassenpfad der Anwendungen, die von uns abhängig sind, und wir möchten sie nicht zwingen, Saxon für andere XML-Arbeit zu verwenden.
Wir können die Saxon-Bibliothek manuell aufrufen, wenn wir unsere Transformationen mithilfe der von diesen Factories bereitgestellten API ausführen.
Das Problem ist, dass Saxon das ServiceLoader
Muster verwendet, um sich als diese Datei in das Glas mit TransformerFactory
Implementierung zu injizieren:
[saxon.jar]/META-INF/services/javax.xml.transform.TransformerFactory
Dies bedeutet, dass Anwendungen, die uns als Abhängigkeit verwenden könnte sich mit der Sächsischen statt beenden ihrer vorhandenen XML-Bibliotheken. Diese Anwendungen zu bitten, ihren Code so zu ändern, dass sie ihre spezifische Implementierung aufrufen, ist keine Option.
Gibt es eine Möglichkeit, die sächsische Bibliothek zu 'überschreiben', um die Implementierung von ServiceLoader zu entfernen? Entweder mit Maven, Java oder einem anderen Prozess?
Near-Duplikat http://stackoverflow.com/questions/35334749/best-way-to-set-xslt-processor-in-java –
Dies ist kein ähnliches Problem auf die Frage, die Sie verknüpft - wir versuchen, die Art und Weise zu ändern, wie sich unsere transitive sächsische Abhängigkeit auf die Verbraucher unseres Frameworks auswirkt, so dass sie ihre Implementierung nicht manuell aktualisieren müssen. Dies ist ein einfaches Problem, das zu lösen ist, wenn wir unsere abhängigen Projekte zwingen, ihren Code zu aktualisieren. –