我目前管理一些单独的Maven项目,其中我使用Protobufs作为序列化格式并通过线路。我正在使用David Trott的maven-protoc plugin在编译时生成代码。
一切都很好,直到我希望这些项目彼此之间进行通信 - 或者更确切地说,使用彼此的protobufs。 protobuf语言有一个“导入”指令,它可以满足我的需要,但是我面临的挑战是让项目A导出一个“.proto”文件(或者可能是一些中间格式?),以便项目B依赖。
Maven为项目捆绑资源提供了一种方法,但AFAIK,这些是在运行时由代码使用,而不是在编译/源代码生成阶段由目标使用 - 至少我无法找到描述我想要实现的目标的文档。
答案 0 :(得分:6)
我找到了另一种方法,它不涉及任何Maven魔法。深入了解maven-protoc插件的代码,我发现这是一个受支持的用例 - 插件将在依赖的jar中查找并收集和.proto文件,并将它们解压缩到一个临时目录中。然后将该目录设置为protoc调用的导入路径。
所有需要发生的事情都是将.proto文件包含在依赖项的包中,我通过将其作为资源来实现:
项目/一个/ SRC /主/资源/ a.proto
现在在projects / b / pom.xml中,添加'a'作为常规Maven依赖项,只需从b.proto导入a.proto,就好像它存在于本地一样:
b.proto: 导入“a.proto”;
这并不理想,因为文件名可能会在各个项目之间发生冲突,但这种情况应该很少发生。
答案 1 :(得分:2)
您可以将.proto文件打包在生成它们的项目中的单独.jar / .zip中,并使用专用分类器将它们发布到您的存储库中。使用程序集插件可能有助于发布在发布期间构建的“源jar”附近的内容。
然后,在使用它们的项目上,将先前创建的工件添加为依赖项。 将依赖插件与“unpack-dependencies”目标一起使用,并将其绑定到“compile”之前的阶段。