不使用.proto升级protobuf jar的命名空间

时间:2016-05-03 00:36:20

标签: java jar namespaces protocol-buffers packages

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

有没有办法在没有.proto?

的情况下更改生成的类的命名空间

或者(因为这很容易导致对前一个问题的回答),我可以从现有的jar中反向设计.proto吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

输入google或duckduck go for java decompiler。

以下是一些不错的http://jd.benow.ca/

选择独立或eclipse插件以获取原始java文件。