【问题标题】:How to add new java classes to the existing classes in jar file如何将新的java类添加到jar文件中的现有类
【发布时间】:2014-07-17 16:51:47
【问题描述】:

我为用 java 编写的软件创建了新模块。该软件是从 jar 文件运行的。我的课程正在扩展该软件中的课程。我想编写一个插件,将新类添加到 jar 文件中。我知道如何将 jar 文件提取到目录并使用 java.util.jar 包将它们添加到 jar 文件中,但是由于要从文件中提取很多文件,是否可以在不提取文件的情况下添加新类到文件夹,以某种方式直接。

【问题讨论】:

  • 我想起了我的世界模组。出于好奇,您是否编写了这个软件来尝试扩展自己?在这种情况下,使用动态类加载有更好的方法。
  • 无需修改现有的jar文件。只需将类放在自己的 jar 中,并确保两个 jar 都在类路径中。
  • 同一用户可能重复:stackoverflow.com/questions/11852954/…

标签: java jar


【解决方案1】:

您可以使用以下命令

jar uf foo.jar foo.class

【讨论】:

  • 这仅适用于 50%,因为该命令不会将类放入其相应的包树结构中。
  • @m0skit0 要将类放入 tres 结构中,您需要使用目录结构传递类名。 jar uf foo.jar /com/test/foo.class
  • u 选项更新现有 jar c 选项创建新存档。所以,我需要检查文件是否存在,我将使用 u/c。
【解决方案2】:
jar uf jar-file input-file(s)

将允许在 jar 中添加 new files/update 现有文件而无需解压。

【讨论】:

    【解决方案3】:

    您的问题表明您希望以编程方式执行此操作,不使用命令行jar 工具。

    从文档看来,您至少需要从现有的JarFile 获取JarInputStream,使用getNextJarEntry 遍历条目,并使用条目写入JarOutputStream,还添加您自己的新文件使用新的JarEntry 对象为每个新文件。

    Here's 以编程方式从头开始编写 jar 的示例代码,这应该很好地扩展到您的情况,不同之处在于大多数 JarEntry 对象将来自 JarInputStream。

    【讨论】:

    • 根据我对代码的理解,我们在jar中创建新的类文件,并通过流从原始类文件中读取内容,并将它们写入jar中新创建的类文件中。有没有办法直接将class文件整体拷贝到jar中,而不是手动传输字节?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多