【发布时间】:2014-05-12 02:13:27
【问题描述】:
我有一个包含大量包和类文件的大型预编译项目。我提取了其中一个类文件并对其进行了反编译并编辑了其中的一些代码。现在我想编译更改的代码并将其重新插入到原来的预编译项目中,但不幸的是,代码在预编译项目中保留了许多对对象的引用,所以如果没有它已经在项目中,我就无法编译这造成了一个相当大的悖论。我有什么可以做的吗?
【问题讨论】:
标签: java jar package decompiling
我有一个包含大量包和类文件的大型预编译项目。我提取了其中一个类文件并对其进行了反编译并编辑了其中的一些代码。现在我想编译更改的代码并将其重新插入到原来的预编译项目中,但不幸的是,代码在预编译项目中保留了许多对对象的引用,所以如果没有它已经在项目中,我就无法编译这造成了一个相当大的悖论。我有什么可以做的吗?
【问题讨论】:
标签: java jar package decompiling
只需使用引用现有类文件(或包含这些类文件的 jar 文件)的类路径编译它。应该没有问题。
但是,请注意,如果您更改文件中的任何常量,这些更改不会反映在引用这些常量的任何其他代码中。
从完整的源代码重新编译通常会更好。使用原始源代码也比仅使用反编译结果更好——您无法访问原始源代码吗? (如果你不这样做,你确定你所做的事情在你的国家是合法的吗?我不是律师,但你至少应该检查一下......)
【讨论】:
我会重新编译整个东西以避免出现问题,但如果你必须,试试这个,让我知道它们是否适合你:
不要在原始项目中加载该类,而是使用 classForName http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html 加载它
请记住,您不能更改方法的签名,因为这将指示不同的对象,因为它不会遵循相同的合同(接口)。
还要记住 serialVersionId What is a serialVersionUID and why should I use it?
【讨论】: