我写的一个应用程序使用了几个第三方罐子。有时只使用整个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会更加复杂。 Injection with google guice does not work anymore after obfuscation with proguard
cletus对另一篇文章的回答非常好How to determine which classes are used by a Java program?
答案 0 :(得分:5)
Proguard将是一种选择。它可以消除未使用的类和方法。您也可以使用它进行混淆,这可以进一步减小最终jar的大小。请注意,除非注意保持受影响的类别不被混淆,否则按名称加载类可能会中断。
我发现Proguard非常有效 - 从一开始就可以有点神秘。但我没有任何相似的经验可供比较。
答案 1 :(得分:0)
首先,如果您只使用JAR文件中的一个类,这并不意味着此类不使用该JAR中的其他类。 如果您使用开源JAR,那么您的选择是获取该JAR的源代码,将它们附加到您的项目中,删除不必要的东西并自行构建更改。
答案 2 :(得分:0)
您可以将GenJar添加为Ant任务并使用它来构建JAR。正如它在图书馆的主页上所说的那样,
GenJar是一个专门的Ant任务 根据类构建jar文件 依赖而不仅仅是 目录的内容。
您可以在SourceForge找到它。