从第三方库和JAR中删除不必要的类

时间:2011-09-12 08:11:30

标签: java class jar dependencies proguard

我需要从第三方JAR中删除未使用的类。为什么我应该使用工具?

我已尝试使用ProGuard。但是,它只从项目本身中删除未使用的类,但库罐 - 第三方 - 始终保持不变。

4 个答案:

答案 0 :(得分:5)

您可以创建一个超级jar然后使用ProGuard。将库类重新打包到罐子中将是一个挑战,但从你的问题的精神来看,你会更喜欢超级罐。

正如其他海报所评论的那样,你仍然需要注意通过这么多被滥用和误解的反思机制加载的类。

答案 1 :(得分:1)

@Joonas Pulakka是对的。但是如果您仍然真的想要这样做并确保您的应用程序不会因ClassNotFoundException使用选项-verbose:class运行您的应用程序而失败,请执行所有存在的用例,获取包含所有已加载类的日志。然后列出您的第三方库的所有类,并从库中归档所有从未加载过的类。然后创建只包含“必需”类的替代jar文件并祈祷:)

祝你好运。

答案 2 :(得分:0)

了解您正在使用的类和库是一件好事,即使有风险(如Peter指出的那样)去除未使用的东西,携带任何类型的超重行李也会有成本,而且你不应该这样做。不要累积。如果你使用反射,那么就可以处理你正在使用的反射,并系统地摆脱你不需要的东西。更好理解的更精简的代码库有好处。

答案 3 :(得分:-6)

Java仅在使用时加载类。删除类只会导致问题,并且在运行时无法帮助您。只有一部分代码将被加载,36 MB的代码并不多。你有多少记忆?大多数PC目前至少有2000 MB如果您通过慢速链接下载applet或Java WebStart应用程序,我想你会使用pack200(使jar变小)并且已经包含了最少的库。