我编写的应用程序使用了多个第三方 jar。有时只使用整个 50kB 到 1.7mB jar 的一小部分 - 一两个函数调用或类。
减少罐子尺寸的最佳方法是什么?我应该下载源代码并构建一个仅包含我需要的类的 jar 吗?哪些现有工具可以帮助自动化此操作(例如我简要浏览了 http://code.google.com/p/jarjar/)?
谢谢你
编辑1: 我想减小第三方“官方”jar 的大小,例如 swingx-1.6.jar (1.4 MB)、set-3.6 (1.7 MB) Glaledlists-1.8.jar (820kB) 等,以便它们仅包含我需要的最低限度的课程
编辑2: 如果库使用反射,则手动或使用 proguard 等程序最小化 jar 会更加复杂。 使用 proguard 进行混淆后,使用 google guice 注入不再起作用
cletus在另一篇文章中的回答非常好如何确定Java程序使用了哪些类?
Proguard 将是一个选择。 它可以消除未使用的类和方法。 您还可以使用它进行混淆,这可以进一步减小最终 jar 的大小。 请注意,除非注意保持受影响的类不模糊,否则按名称加载类可能会中断。
我发现 Proguard 非常有效 - 一开始可能有点难以理解。 但我没有任何类似的经验来提供比较。
首先,如果您仅使用 JAR 文件中的一个类,这并不意味着该类不使用该 JAR 中的其他类。 如果您使用开源 JAR,您的选择是获取该 JAR 的源代码,将它们附加到您的项目,删除不必要的内容并自行构建更改。
您可以将 GenJar 添加为 Ant 任务并使用它来构建 JAR。正如图书馆主页上所说,
GenJar 是一个专门的 Ant 任务, 基于类构建jar文件 依赖关系而不仅仅是 目录的内容。
您可以在 SourceForge 上找到它。
我使用 JarTighten 作为发行版构建的最后一步。 JarTighten 可以对最终 JAR 文件使用最佳压缩,并可以删除 JavaVM 在打开 JAR 文件时将忽略的各种细节。