2012-10-31 14 views
10

Ich verwalte derzeit einige separate Maven-Projekte, in denen ich Protobufs als Serialisierungsformat und über die Leitung verwende. Ich verwende David Trotts maven-protoc plugin, um den Code zur Kompilierzeit zu erzeugen.Importieren von Protokollpufferdefinitionen zwischen Maven-Projekten

Alles ist gut und gut, bis ich möchte, dass diese Projekte untereinander kommunizieren - oder vielmehr, verwenden Sie die Protobufs gegenseitig. Die protobuf-Sprache hat eine "Import" -Richtlinie, die tut, was ich will, aber ich bin mit der Herausforderung konfrontiert, dass Projekt A eine ".proto" -Datei (oder möglicherweise ein Zwischenformat?) Exportiert, damit Projekt B davon abhängt.

Maven bietet eine Möglichkeit für ein Projekt, Ressourcen zu bündeln, aber AFAIK, diese sollen zur Laufzeit vom Code und nicht von einem Ziel während der Kompilierungs-/Quellengenerierungsphase verwendet werden - zumindest konnte ich das nicht finde eine Dokumentation, die beschreibt, was ich erreichen möchte.

Antwort

2

Sie können Ihre .proto-Dateien in einer separaten .jar/.zip-Datei im Projekt, in dem sie generiert werden, packen und sie mit einem dedizierten Klassifikator in Ihrem Repository veröffentlichen. Die Verwendung des Assembly-Plugins könnte hier helfen, etwas in der Nähe von "Quell-Jars" zu veröffentlichen, die während der Veröffentlichung erstellt wurden.

Fügen Sie dann bei Projekten, die diese verwenden, ein zuvor erstelltes Artefakt als Abhängigkeit hinzu. Verwenden Sie das Abhängigkeits-Plugin mit dem Ziel "entpacken-Abhängigkeiten" und binden Sie es an eine Phase vor dem "Kompilieren".

+0

Nun, das klingt nett, könnte jemand eine Antwort geben, wie das zu konfigurieren –

5

Ich habe einen anderen Weg gefunden zu erreichen, und es beinhaltet keine Maven Magie. Als ich in den Code für das Maven-Protoc-Plugin eintauchte, stellte ich fest, dass dies ein unterstützter Anwendungsfall ist - das Plugin sucht und sammelt und speichert .proto-Dateien in abhängigen Jars und entpackt sie in ein temporäres Verzeichnis. Dieses Verzeichnis wird dann als Importpfad zum Protokollaufruf festgelegt.

Alles, was geschehen muss, ist für die Proto-Datei in der Abhängigkeit des Paket enthalten sein, die ich, indem es eine Ressource tat

Projekte/a/src/main/resources/a.proto

nun in Projekte/b/pom.xml, fügen sie 'a' als eine regelmäßige Abhängigkeit Maven und nur a.proto von b.proto importieren, als ob sie lokal vorhanden:

b.proto: Import „ein .proto ";

Dies ist nicht ideal, da Dateien Namen zwischen verschiedenen Projekten kollidieren können, aber dies sollte selten genug auftreten.

+0

Man sollte nur habin PROT-Dateien in Verzeichnis nach Modulname setzen –

+0

Wie würden Sie das tun, wenn Sie eine Proto-Datei von einem importieren mussten Jar zu einer Proto-Datei in Ihrem Arbeitsprojekt? – Righto

Verwandte Themen