2010-04-09 180 views
8

我为Java项目开发了一个模块。该模块取决于外部库(fastutil)。问题是,fastutil.jar文件比整个项目本身(14 MB)重两倍。我只使用库中的一小部分类。模块现在已经完成,未来没有人可能扩展它。有没有一种方法可以将相关课程仅提取到某些fastutil_small.jar,以便其他人不必下载所有这些额外的重量?减少外部jar文件的大小

+0

其实你想要什么? – Venkat 2010-04-09 10:00:03

+0

好吧,将我的模块添加到项目中。这是一些相对较小的Java软件包。我想要的只是我对'fastutil'几个类的依赖不应该将项目的规模增加三倍。 – 2010-04-09 10:31:17

回答

8

模糊工具(如ProGuard)通常提供了一个功能,可以从jar文件中删除未使用的类(甚至字段和方法)。但是,您必须小心地确认一切仍然有效,因为您可能正在使用反射来访问ProGuard无法分析的类或方法。

您只能使用该功能,并已得到相当长的一段节省

或者你也可以与其他节省空间的模糊技术(如类和方法重命名)结合起来,以在较硬的成本节省更多空间调试(您的堆栈跟踪将变得更难分析)。

+1

+1前5个字与我的想法完全一致,因为我从proguard指令中读取 – 2010-04-09 10:13:02

+0

'ProGuard要求输入罐的库罐(或战争,耳朵,拉链或目录)为指定。这些本质上是编译代码所需的库。 ProGuard使用它们来重建正确处理所需的类依赖关系。图书馆自己始终保持不变。你仍然应该把它们放在最终应用程序的类路径中。' 但是,减少库jar文件的大小正是我想要的(或者我使用了错误的词汇吗?)。我错过了什么? – 2010-04-09 10:32:44

+0

@joe:你可以很容易地解决这个问题,通过'-injars'指定库而不是'-libraryjars' – 2010-04-09 10:40:10

0

是的一个原油是有你的原始罐的备份。然后从jar中删除所有未使用的类文件。并且可能会有其他类的内部引用,您可以在需要时添加它们。即在执行时可能会抛出一个没有发现异常的类,因此可以将该类从原始jar添加到该jar中。

5

从fastutil的installation instructions

注意,jar文件是巨大的,由于大量的类:如果您打算运往自己的罐子一些fastutil类包括在内,你应该看看AutoJar(也可在JPackage上获得)自动提取必要的类。

+0

是的,我做了rtfm :)我只是没有完全设法做任何有用的事情呢(noob,记住?:)) – 2010-04-09 10:37:19

+1

事实证明,我所要做的就是尝试三次。 – 2010-04-09 11:01:51

2

由于fastutil是LGPL开源软件,您可以将相关的源文件复制到您的项目中,然后删除该jar文件。编译器会告诉你是否有你需要的所有文件。只要保持软件包的原样,并将fastutil许可证文件的副本放在最上面。