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

Java 升级protobuf jar的命名空间,但不使用.proto,java,jar,namespaces,protocol-buffers,packages,Java,Jar,Namespaces,Protocol Buffers,Packages,我有一个jarmyGenerated.jar,它是由某个版本的Google协议缓冲区(不确定是哪个版本)生成的。该jar包含对命名空间com.foo.bar中类的引用。我想更改它,使类位于命名空间com.baz中。不幸的是,我没有用于生成jar的.proto文件——它似乎已被遗忘 有没有办法在没有.proto的情况下更改生成类的命名空间 或者(因为这很容易得到前面的答案),我可以从现有的jar中对.proto进行反向工程吗?在google或duckduck上键入go for java反编译器 这

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

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


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

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

这里有一些好的


选择standalone或eclipse plugin以获取原始java文件。

在google或duckduck上键入go for java decompiler

这里有一些好的


选择standalone或eclipse plugin以获取原始java文件。

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

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

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

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