Serviceabhängigkeiten über Plugingrenzen und Installationsreihenfolge

Hi,

ich habe mehrere Plugins (nennen wir sie A und B ) in meinem Shop und ein Feature aus Plugin A wird jetzt auch in Plugin B gebraucht. Daraufhin habe ich ein neues Plugin C geschrieben, welches das Feature abkapselt und als Services (services.xml) bereitstellt. Plugin A habe ich umgestellt, so dass es die arbeit nicht mehr selbst erledigt, sondern die Services von Plugin C anfragt.

Jetzt kann ich nur nichts mehr mit meiner Shopware Installation anfangen: Plugins A und B sind schon installiert und aktiviert. Plugin C ist zwar lokal vorhanden, aber noch nicht installiert. Entsprechend findet das System die Services nicht, die Plugin A referenziert. Weder über das Shopware Backend, noch über die Shopware CLI kann ich das Plugin C installieren, da immer zuerst die Serviceabhängigkeiten geprüft werden. Dabei gibt es logischerweise einen Fehler und die Ausführung bricht ab.

Frage: Wie ist denn normalerweise der Workflow für so eine Situation? Es muss doch irgendwie möglich sein, Plugins zu installieren, um die Serviceabhängigkeiten zu erfüllen…

Zwei Szenarien hätte ich im Kopf, aber beide sind nicht wirklich sinnvoll anwendbar:

  1. Die Services von Plugin C nicht direkt als Abhängigkeiten in der services.xml von Plugin A angeben, sondern die Services dynamisch über den DI Container holen. Das ist an sich nicht so toll, weil die Abhängigkeiten im Code versteckt sind und man auch nicht sofort sieht, dass noch ein Plugin installiert werden muss. Es kommt erst zu einem Fehler, wenn der Service aus Plugin C wirklich angefordert wird. (Kommunikation via Events statt Serviceaufrufe hat das gleiche Problem)
  2. Erst Plugin A deaktivieren, dann die Codeanpassungen machen, danach Plugin C installieren und aktivieren und zum Schluss Plugin A wieder aktivieren. Das lässt sich so nicht wirklich machen, wenn Plugin A selbst Abhängigkeit von einem weiteren Plugin ist. Außerdem haben wir mehrere Zielsysteme, (dev, stage, live) auf denen bei Codeänderungen ein automatisches Deployment ausgeführt wird. Solche individuellen Deployments sind da nicht wirklich machbar, ohne die Deploymentpipeline unwartbar zu machen…

 

Gibt es wirklich keine Möglichkeit, ein Plugin zu installieren und zu aktivieren, ohne dass alle Serviceabhängigkeiten schon stehen müssen? Das hat ja dann auch fatale Folgen für den laufenden Betrieb: Wenn mal jemand im Backend ausversehen das falsche Plugin deaktiviert, dann hängt sich Shopware komplett auf und es gibt keine Möglichkeit mehr, das Plugin wieder zu aktivieren…

 

Übersehe ich hier etwas?