我为Java项目开发了一个模块。该模块依赖于外部库(fastutil
)。问题是,fastutil.jar
文件比整个项目本身重14倍(14 MB)。我只使用库中的一小部分类。该模块现已完成,未来任何人都不可能扩展它。有没有办法我只能将相关的类提取到一些fastutil_small.jar
,以便其他人不必下载所有这些额外的重量?
答案 0 :(得分:8)
诸如ProGuard之类的混淆工具通常提供从jar文件中删除未使用的类(甚至是字段和方法)的功能。但是,您必须小心验证一切仍然有效,因为您可能正在使用reflecton来访问ProGuard无法分析的类或方法。
您只能使用该功能并且已经获得了相当多的保存
或者您可以将其与其他节省空间的混淆技术(例如类和方法重命名)结合起来,以更难调试的代价节省更多空间(您的堆栈跟踪将变得难以解析)。
答案 1 :(得分:5)
来自fastutil的installation instructions:
请注意,jar文件很大,因为有大量的类:如果你计划运送你自己的jar包含一些fastutil类,你应该看看AutoJar(也可以在JPackage上获得)来提取自动完成必要的课程。
答案 2 :(得分:2)
由于fastutil是LGPL开源软件,您可以将相关的源文件复制到项目中并删除该jar文件。然后编译器会告诉您是否拥有所需的所有文件。只需按原样保存包,并将fastutil许可文件的副本放在最上面。
答案 3 :(得分:0)
是的,一个原油是备份你的原始罐子。然后从jar中删除所有未使用的类文件。并且可能存在对其他类的内部引用,您可以在需要时添加它们。即,在执行它时可能会抛出一个未找到类的异常,因此您可以将该类从原始jar添加到此jar中。