我有我的小 program.jar,它使用了巨大的 library.jar 的一小部分。
是否有一种工具可以将几个 jar 重新打包成一个,以便它可以独立运行并且尽可能小?
更新:大小很重要。
最佳答案
有proguard ,带有 ant 和 maven 插件。它删除未使用的代码,可选择混淆并压缩到单个 jar。
Proguard 在两个方面减小了尺寸
- 只有实际使用到的类才会存储在最终的jar中。
- 长名称,例如所有长包名、类名都被重命名为更短的名称,节省了大量空间。
判断一个类是否在java中被使用有点棘手。静态代码分析可以帮助您到目前为止,但您需要对通过反射访问的代码谨慎一些,因为该工具可能无法检测到它。它处理 Class.forName("x.y.z.Foo") 但任何更复杂的东西你都需要将它添加到要包含的类的配置文件中,可以让类加载器生成一个在运行时使用的类列表,所以这并不一定是艰巨的。
您可能还想调查 pack200压缩方案,因为这也可以显着减小 jar 的大小。
关于java - 选择性 jar 装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2888119/