【问题标题】:How to modify a .java file in .jar file?如何修改 .jar 文件中的 .java 文件?
【发布时间】:2013-05-14 09:20:16
【问题描述】:

我有 services.jar 文件,并且这个 jar 文件中的包很少。我需要修改其中一个 java 类的代码。

示例 - services.jar

services.jar 中的包 - 搜索、实用程序

搜索包内的类 - Filter.java - 需要编辑此代码并需要制作一个新的 jar 文件。

请指导我。

【问题讨论】:

  • 你可以只用winzip浏览jar,手动更新jar中的文件。
  • 也许,你必须关闭这个问题,因为有stackoverflow.com/questions/12057554/…。唯一的答案对我来说看起来不错。
  • 为什么要修改jar里面的java文件?您应该改为更新类文件。
  • 让我们开始吧,通常情况下,Jars 不包含 .java 文件,没有什么说它们不能,只是通常情况下它们不包含。因此,尝试从 Jar 文件中提取文件似乎毫无意义 - 恕我直言。 *“需要编辑此代码并需要制作一个新的 jar 文件”是你的答案。看看Packing Programs in JAR Files
  • 进一步澄清 NullPointerException 的评论:修改 .java 源文件不会影响相关的 .class 文件,因此不会产生影响关于 jar 文件在您运行(或使用它编译)时的行为。

标签: java


【解决方案1】:

如果您有想要修改的代码,您可以这样做。如果是,那么您必须从命令行或使用任何工具(如 winrar)提取 jar。以下是从命令行提取 jar 的命令:

jar -xvf services.jar

替换提取目录中修改或更新的 /class 文件,并使用命令行中的以下命令重新创建 jar:

jar -cvf services.jar

【讨论】:

  • 还有一个-u 选项可以就地更新jar 文件。有关示例,请参阅this answer。但是,正如其他人所提到的,修改 .java 文件不会对编译的类文件产生任何影响。
【解决方案2】:

您不应该更新 java 文件。 jar 文件用于归档已编译的 java 类

您应该在进行更改后更新类文件

参考这个article

【讨论】:

    【解决方案3】:

    如果必须,您可以在类路径上将另一个放在 jar 文件前面的 jar 文件隐藏起来。但是,如果您不了解自己在做什么,并且错过了一些依赖项,那么您很可能会得到一个NoClassDefFoundError

    如果您需要修改类的部分行为,您可以使用 AspectJ 编织一个方面。如果要替换行为,可以使用 Around 方面。

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 2012-02-16
      • 2021-11-23
      • 2019-10-26
      • 2011-01-28
      相关资源
      最近更新 更多