Java 确定用于减少JAR文件大小的库

Java 确定用于减少JAR文件大小的库,java,jar,htmlunit,Java,Jar,Htmlunit,我在一些程序中使用HtmlUnit,我总是有一个问题,每当我使用它时,我必须添加我从HtmlUnit网站下载的所有文件(库),所以我得到的jar文件总是10 mb 以下是我添加的文件: 但在我的大多数计划中,我只包括以下内容: import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.RefreshHandler; import com.gargoylesoftware.htmlunit.We

我在一些程序中使用HtmlUnit,我总是有一个问题,每当我使用它时,我必须添加我从HtmlUnit网站下载的所有文件(库),所以我得到的jar文件总是10 mb

以下是我添加的文件:

但在我的大多数计划中,我只包括以下内容:

import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.RefreshHandler;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
我通常只使用WebClient和HtmlElements(HtmlForm、HtmlTable等),所以我觉得奇怪,我需要所有这些


我的问题是,如果我可以减少包含的库的数量,或者更好,我如何确定我包含的哪些库根本没有被使用。

您不仅要考虑您直接使用的类,还要考虑它们的所有依赖关系。您必须追踪整个对象图,以找出未调用的对象

您不仅要考虑直接使用的类,还要考虑它们的所有依赖关系。您必须追踪整个对象图,以找出未调用的对象

是否确实要检查所有添加库的所有类(如果需要)

我知道这是一个项目的工作。一个流行的开源程序就是

一般来说,ProGuard被称为模糊器(重命名类文件中的所有内容,以便理解反编译的类是困难的),但在使用参数-dontobfuscate时,它可以在不进行模糊处理的情况下使用。此外,我建议您也使用-dontoptimize参数

如果你在你的大罐子上运行ProGuard,你会得到一个小得多的罐子


如果您感兴趣,我可以发布ant构建文件的一小部分,展示如何配置和调用ProGuard。

您真的想检查所有添加库的所有类(如果需要)吗

我知道这是一个项目的工作。一个流行的开源程序就是

一般来说,ProGuard被称为模糊器(重命名类文件中的所有内容,以便理解反编译的类是困难的),但在使用参数-dontobfuscate时,它可以在不进行模糊处理的情况下使用。此外,我建议您也使用-dontoptimize参数

如果你在你的大罐子上运行ProGuard,你会得到一个小得多的罐子

如果您感兴趣,我可以发布ant构建文件的一小部分,展示如何配置和调用ProGuard。

我知道,但我自己还没有尝试过

请记住,库可能只在特定的代码运行期间被访问(例如,取决于输入),因此很难确定是否需要库

如果您去掉了一些库,您的应用程序现在可能可以工作,但在不同的输入上失败,或者在下一个版本中以不同的方式使用HtmlUnit时失败。现在10MB已经不多了,所以可能扔掉一些罐子不值得费心。

我知道,但我自己还没有试过

请记住,库可能只在特定的代码运行期间被访问(例如,取决于输入),因此很难确定是否需要库


如果您去掉了一些库,您的应用程序现在可能可以工作,但在不同的输入上失败,或者在下一个版本中以不同的方式使用HtmlUnit时失败。现在10MB已经不多了,所以可能不值得费心去处理一些JAR。

如果库使用反射创建一些类怎么办?proguard如何处理这个问题?动态加载的类由包含完全限定类名的字符串检测。可以指定通过反射访问的方法和字段,以便它们不会被删除。如果库使用反射创建一些类,该怎么办?proguard如何处理这个问题?动态加载的类由包含完全限定类名的字符串检测。可以指定通过反射访问的方法和字段,以便它们不会被删除。10MB对于移动应用程序可能仍然很重要;对于桌面或局域网托管的网络应用,我同意你的看法。当然,你是对的。由于我对oli206的环境或要求一无所知,所以我只是提出了一个建议(在我的措辞中使用了很多maybes);对于桌面或局域网托管的网络应用,我同意你的看法。当然,你是对的。因为我对oli206的环境或需求一无所知,所以我只是提出了一个建议(并在措辞中使用了很多maybes)。