【问题标题】:How to create/edit .class file codes如何创建/编辑 .class 文件代码
【发布时间】:2014-12-01 11:04:14
【问题描述】:

我想知道是否有办法编辑类文件中的代码?因为我似乎无法使用 cmd 将 java 文件编译成类文件,因为它总是会检测到错误。我正在使用的 Jar 文件已经有自己的现有类文件,我想用几行代码更新其中一个 .class 文件。但是当我从类文件中复制代码并将其与我添加的代码行一起放入java文件中,然后尝试使用cmd编译它时,每当我尝试编译它以生成类文件时,cmd都会产生错误。

这是否意味着我需要反编译整个 jar 文件并将其制成 java 文件,然后将其重新编译为类文件,然后再次将其制成新的 jar 文件,?为了实现我想要做的事情?

现在我正在使用这个 JCIFS jar 文件,我想在其中一个类文件中添加一些代码行。我将这个“https://code.google.com/p/android-smb-streaming/”作为指导,我发现这个人能够使用 jar 文件中现有类的相同代码行以及他自己添加的行来自定义/添加一个新的类文件代码。

我可以知道如何实现这一目标吗?谢谢。

【问题讨论】:

  • 在编译器中创建 .class 会处理它,我们不能修改或编辑 .class 文件
  • 那么我可以知道是否有任何可能的方法可以做到这一点,因为根据我发现并发布了上面的链接。我发现这个人已经创建了他自己的 .class,它与现有的 .class 文件具有相同的代码,只是他创建的这个新的 .class 文件在他创建的这个类中添加了一些新的代码行。所以我认为可以创建一个包含到 jar 文件中,但是每当我尝试将 java 文件编译为类文件时,它总是给我错误 T.T
  • 你最好学会理解和修复你的错误。
  • 也就是说,唯一的办法就是拥有整个java文件,然后把它变成一个jar文件?
  • 有像 CGLIB 或 javassist 这样的工具,允许在 Java 类加载到内存后对其进行动态修补。你可以找到编译器的来源。所以是的,.class 文件 文件,您可以修补它们,.jar 也是如此。但是您肯定不想这样做:如果编译器检测到错误,您要添加的代码可能会中断!

标签: java jar executable-jar smb


【解决方案1】:

你需要做的是一个常见的情况:你发现一个开源项目的错误/功能请求。

您可以尝试联系库的作者,提交您的贡献,然后等待它发布新版本,以便它拥有您的新酷功能,而不是破解它。

另一方面,您可以使用公开的 API 来根据您的需要对其进行自定义,例如,创建一个特定的子类来覆盖包含那几行代码的所需方法,并以它使用您的实现的方式使用 API .

如果您想采用 hacky 方式,则无需直接操作类文件(它要复杂得多):简单的方法是下载项目,阅读文档如何设置它(这样您就可以编译它带有 cmd w/o 错误),添加您的补丁,编译它,然后您可以使用新的类文件(或文件:请注意,如果您可能会生成多个文件) '正在使用内部类或 lambdas)。只是不要忘记在文档中的某处提及这一点,否则没有人会知道该库被稍微修改过......

【讨论】:

  • 经过进一步研究,我发现 JCIFS 库由一个包含一堆 java 文件的 zip 文件组成,因此我正在考虑在其中添加一个 java 类并重新编译它以创建一个全新的使用 apache ant 再次生成 jar 文件。但是,似乎在这样做时,每当我输入命令“ant jar”时,都会遇到另一个错误,即“构建失败”。所以我可以知道你是否对我如何解决这个问题有任何想法/提示?谢谢
  • Jar 是一个带有 META-INF 文件夹的 zip 文件。该项目是开源的,他们将 src 与 jar 一起提供(有时会发生,有时 src 有不同的 jar 文件等)。检查项目站点的文档如何编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
相关资源
最近更新 更多