Java 最小化jar依赖项大小

Java 最小化jar依赖项大小,java,jar,dependencies,utility,Java,Jar,Dependencies,Utility,我编写的一个应用程序使用了几个第三方jar。有时只使用整个50kB到1.7mB jar的一小部分—一个或两个函数调用或类 减少罐子大小的最佳方法是什么。我应该下载源代码并用我需要的类构建一个jar吗?有哪些现有工具可以帮助实现自动化(例如我简要介绍的) 多谢各位 编辑1: 我想降低我的第三方“官方”jar的大小,如swingx-1.6.jar(1.4MB)、set-3.6(1.7MB)glazedlists-1.8.jar(820kB)等,以便它们只包含我需要的最小类 编辑2: 如果库使用反射,

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

减少罐子大小的最佳方法是什么。我应该下载源代码并用我需要的类构建一个jar吗?有哪些现有工具可以帮助实现自动化(例如我简要介绍的)

多谢各位

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

编辑2: 如果库使用反射,则手动或使用proguard之类的程序来最小化jar会更加复杂。

克莱特斯在另一篇文章中的回答非常好

将是一个选择。它可以消除未使用的类和方法。您还可以使用它进行模糊处理,这可以进一步减小最终jar的大小。请注意,除非注意使受影响的类不被混淆,否则按名称加载的类很容易中断


我发现Proguard非常有效——一开始理解起来有点晦涩。但是我没有类似的经验来提供比较。

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

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

GenJar是一个专门的Ant任务 基于类构建jar文件 依赖关系,而不仅仅是 目录的内容


您可以在上找到它。

我使用Proguard对我的应用程序jar进行模糊处理,效果很好,并且注意到输出大小较小。正如您所提到的,在将xstream对象添加到“keep”部分之前,我还遇到了关于“断开的类”的问题。不过,我没有使用proguard来减小依赖项jar的大小-这可能吗?@brian_d-是的,应该可以,使用-injars/-outjars。我猜“难度”将与你拥有的罐子数量有关。我使用的一个例子是bouncycastle加密。我能够只包含我需要的类,丢弃所有未使用的算法的代码,等等。我对GenJar感到失望,因为“无法解决”错误。它看起来自2003-03-06年以来也没有更新过。我发现,当我使用Java 7而不是Java 8时,GenJar无法解决的问题消失了,正如我在“编辑2”中提到的,仍然存在问题。我手动将swingx从1.4MB减少到160kB。它构建得很好,但在运行时崩溃了,因为有几个反射方法类调用没有包括在内。