【问题标题】:Upgrade namespace of protobuf jar without .proto升级没有 .proto 的 protobuf jar 的命名空间
【发布时间】:2016-08-27 21:17:20
【问题描述】:

我有一个 jar myGenerated.jar,它是由某个版本的 Google 协议缓冲区生成的(不确定是哪个版本)。该 jar 包含对命名空间 com.foo.bar 中的类的引用。我想更改它,使类位于命名空间com.baz 中。不幸的是,我没有用于生成 jar 的 .proto 文件——它似乎已经被遗忘了。

有没有办法在没有.proto的情况下更改生成类的命名空间?

或者(因为这很容易导致前面的答案),我可以对现有 jar 中的 .proto 进行逆向工程吗?

【问题讨论】:

    标签: java jar namespaces protocol-buffers packages


    【解决方案1】:

    您应该能够使用协议缓冲区反射 API 对原始 .proto 文件内容进行逆向工程。对于您关心的每个消息类型MyMessage,您可以调用MyMessage.getDescriptor(),然后使用here 描述的API 检查描述符以确定存在哪些字段等等。我认为您无法逐字恢复 .proto 文件内容(例如,可能不是 cmets),但您至少可以恢复所有类型及其字段名称和标签号。 MyMessage.getDescriptor().getFile().toProto() 之类的内容应该会为您提供 .proto 文件中仍然可用的所有信息。

    【讨论】:

      【解决方案2】:

      使用 dirtyJOE 编辑您的字节码并更改所有包名称(和文件夹,如果在 jar 中分层结构化)。

      【讨论】:

        【解决方案3】:

        在google上输入或duckduck go for java反编译器。

        这里有一些不错的http://jd.benow.ca/

        选择standalone或eclipse插件来获取原始java文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-13
          • 2021-11-30
          相关资源
          最近更新 更多