【问题标题】:Importing protocol buffer definitions between Maven projects在 Maven 项目之间导入协议缓冲区定义
【发布时间】:2012-10-31 18:26:18
【问题描述】:

我目前管理几个单独的 Maven 项目,在这些项目中我使用 Protobufs 作为序列化格式并通过网络传输。我正在使用 David Trott 的 maven-protoc plugin 在编译时生成代码。

一切都很好,直到我希望这些项目在彼此之间进行通信——或者更确切地说,使用彼此的 protobuf。 protobuf 语言有一个“import”指令,它可以满足我的要求,但我面临着让项目 A 导出“.proto”文件(或可能是某种中间格式?)以供项目 B 依赖的挑战。

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

【问题讨论】:

    标签: java maven protocol-buffers


    【解决方案1】:

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

    所有需要做的就是将 .proto 文件包含在依赖项的包中,我通过使其成为资源来做到这一点:

    projects/a/src/main/resources/a.proto

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

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

    这并不理想,因为不同项目之间的文件名可能会发生冲突,但这应该很少发生。

    【讨论】:

    • 应该只是有根据模块名称将.prot文件放入目录的习惯
    • 如果必须将一个 jar 中的 proto 文件导入到工作项目中的 proto 文件中,您会怎么做?
    • 你能举例说明你是如何在你的 POM 中做到这一点的吗?我不确定我是否知道您将其设为“资源”是什么意思
    • 只需将您的 proto 文件放入 src/main/resources — 这是一个标准 Maven 路径,用于将任意文件捆绑到 JAR 中
    【解决方案2】:

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

    然后,在使用它们的项目上,添加以前创建的工件作为依赖项。 使用具有“unpack-dependencies”目标的依赖插件,并将其绑定到“compile”之前的阶段。

    【讨论】:

    • 听起来不错,谁能回答如何配置它
    猜你喜欢
    • 2023-02-23
    • 2010-09-25
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2014-05-02
    • 2011-09-18
    相关资源
    最近更新 更多