12

我编写的一个应用程序使用了几个第三方 jar。有时只使用整个 50kB 到 1.7mB jar 的一小部分——一个或两个函数调用或类。

减少罐子尺寸的最佳方法是什么。我应该下载源代码并用我需要的类构建一个 jar 吗?哪些现有工具可以帮助实现这一点(例如我简要地查看了http://code.google.com/p/jarjar/)?

谢谢

编辑 1: 我想降低我的第三方“官方”罐子的大小,如 swingx-1.6.jar (1.4 MB)、set-3.6 (1.7 MB) glazedlists-1.8.jar (820kB) 等,以便他们只包含我需要的最低限度的类

编辑 2: 如果库使用反射,则手动或使用 proguard 之类的程序最小化 jar 会更加复杂。 使用 proguard 混淆后,使用 google guice 注入不再起作用

cletus 在另一个帖子上的回答非常好如何确定 Java 程序使用了哪些类?

4

3 回答 3

5

Proguard将是一个选择。它可以消除未使用的类和方法。您还可以使用它来混淆,这可以进一步减小最终 jar 的大小。请注意,除非注意保持受影响的类不被混淆,否则按名称加载类可能会中断。

我发现 Proguard 非常有效 - 一开始可能有点难以理解。但是我没有任何类似的经验来提供比较。

于 2010-09-28T23:17:29.160 回答
0

首先,如果您只使用 JAR 文件中的一个类,这并不意味着该类不使用该 JAR 中的其他类。如果您使用开源 JAR,您可以选择获取该 JAR 的源代码,将它们附加到您的项目中,删除不必要的内容并自己构建更改。

于 2010-09-29T09:48:22.247 回答
0

您可以将 GenJar 添加为 Ant 任务并使用它来构建 JAR。正如图书馆主页上所说,

GenJar 是一个专门的 Ant 任务,它基于类依赖项而不是简单的目录内容来构建 jar 文件。

您可以在SourceForge 上找到它。

于 2010-09-29T10:03:41.050 回答