簡體   English   中英

在 Maven 項目之間導入協議緩沖區定義

[英]Importing protocol buffer definitions between Maven projects

我目前管理着幾個單獨的 Maven 項目,在這些項目中我使用 Protobufs 作為序列化格式並通過網絡連接。 我正在使用 David Trott 的maven-protoc 插件在編譯時生成代碼。

一切都很好,直到我希望這些項目相互通信——或者更確切地說,使用彼此的 protobuf。 protobuf 語言有一個“導入”指令,它可以滿足我的要求,但我面臨着讓項目 A 導出“.proto”文件(或可能是某種中間格式?)以供項目 B 依賴的挑戰。

Maven 為項目提供了一種捆綁資源的方法,但 AFAIK,這些是在運行時由代碼使用,而不是在編譯/源代碼生成階段由目標使用 - 至少我無法找到描述我想要達到的目標。

我找到了另一種實現方式,它不涉及任何 Maven 魔法。 深入研究 maven-protoc 插件的代碼,我發現這是一個受支持的用例——該插件將在依賴的 jars 中查找和收集 .proto 文件,並將它們解壓到一個臨時目錄中。 然后將該目錄設置為 protoc 調用的導入路徑。

所有需要發生的是將 .proto 文件包含在依賴項的包中,我通過將其作為資源來做到這一點:

項目/a/src/main/resources/a.proto

現在在 projects/b/pom.xml 中,添加 'a' 作為常規 Maven 依賴項,然后從 b.proto 導入 a.proto,就好像它存在於本地一樣:

b.proto:導入“a.proto”;

這並不理想,因為文件名可能會在不同項目之間發生沖突,但這應該很少發生。

您可以將 .proto 文件打包在生成它們的項目中的單獨 .jar/.zip 中,並使用專用分類器將它們發布到您的存儲庫中。 在這里使用程序集插件可能有助於發布與在發布期間構建的“源 jars”相近的東西。

然后,在使用它們的項目中,將之前創建的工件添加為依賴項。 使用具有“unpack-dependencies”目標的依賴插件,並在“編譯”之前將其綁定到一個階段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM