在Maven项目之间导入协议缓冲区定义

Jul*_*and 12 java protocol-buffers maven

我目前管理一些单独的Maven项目,其中我使用Protobufs作为序列化格式并通过线路.我正在使用David Trott的maven-protoc插件在编译时生成代码.

一切都很好,直到我希望这些项目彼此之间进行通信 - 或者更确切地说,使用彼此的protobufs.protobuf语言有一个"导入"指令,可以完成我想要的操作,但是我面临的挑战是让项目A导出一个".proto"文件(或者可能是一些中间格式?),以供项目B依赖.

Maven提供了一种项目捆绑资源的方法,但是AFAIK,这些是在运行时由代码使用,而不是在编译/源代码生成阶段由目标使用 - 至少我找不到描述的文档我想要实现的目标.

Jul*_*and 6

我找到了另一种方法,它不涉及任何Maven魔法.深入了解maven-protoc插件的代码,我发现这是一个受支持的用例 - 插件将在依赖的jar中查找并收集和.proto文件,并将它们解压缩到一个临时目录中.然后将该目录设置为protoc调用的导入路径.

所有需要发生的事情都是将.proto文件包含在依赖项的包中,我将其作为一种资源:

项目/ A/src目录/主/资源/ a.proto

现在在projects/b/pom.xml中,添加'a'作为常规Maven依赖项,只需从b.proto导入a.proto,就好像它存在于本地:

b.proto:import"a.proto";

这并不理想,因为文件名可能会在各个项目之间发生冲突,但这种情况应该很少发生.


bli*_*oes 2

您可以将 .proto 文件打包在生成它们的项目中的单独 .jar/.zip 中,并使用专用分类器将它们发布到存储库中。使用程序集插件可能有助于发布类似于在发布期间构建的“源 jar”的东西。

然后,在使用它们的项目上,添加先前创建的工件作为依赖项。使用具有“解包依赖项”目标的依赖项插件,并将其绑定到“编译”之前的阶段。

  • 听起来不错,谁能回答一下如何配置 (3认同)