Java—如何减少第三方JAR的大小以减少应用程序的大小
我正在开发一个java web应用程序,其中包括一个小程序。那个小程序是 依赖于两个jar文件:Java—如何减少第三方JAR的大小以减少应用程序的大小,java,jar,dependencies,Java,Jar,Dependencies,我正在开发一个java web应用程序,其中包括一个小程序。那个小程序是 依赖于两个jar文件: (用于在客户端绘制图形)1.7 mb(大小为 jar文件) MySqlJdbcConnector(用于存储在客户端捕获的数据,以 远程数据库).7 mb(大小为 jar文件) 现在,问题是上面的尺寸 两个jar文件。我房间的总尺寸 applet jar(myApplet.jar)是2.5 mb其中2.4 mb为 因为上面的两个jar文件 我并不是在使用中的所有类 那些jar文件。特别是 jfre
- (用于在客户端绘制图形)1.7 mb(大小为 jar文件)
- MySqlJdbcConnector(用于存储在客户端捕获的数据,以 远程数据库).7 mb(大小为 jar文件)
另一方面,也许您不应该从applet直接连接到数据库。您可以创建一个RMI接口(或类似的接口),将SQL和结果数据传输到实际执行SQL的应用程序服务器。这是小程序的一个重要安全方面,如果您没有在安全的intranet中运行它。是的,您可以通过创建一个只包含小程序所需类的JAR来节省空间。(我见过这个叫做优步罐子的东西。) 有各种各样的工具来做这件事;e、 g.ProGuard,Zelix ClassMaster,一个我忘记名字的Maven插件等等 然而,至少在一般情况下,存在两个问题:
- 如果您的代码使用动态加载(例如通过调用
),这些工具通常无法检测依赖关系。因此,为了避免动态加载的类被遗漏在最终的JAR之外,您需要告诉工具您的应用程序可能以这种方式显式加载的所有类的名称Class.forName(className)
- 您需要查看第三方库的许可证。IIRC,有些许可证要求您在分布式工件中包含库,以允许人们替换库的不同版本。有人可能会说,优步罐让这一点很难做到,因此可能会有问题
最后,如果您想最小化applet JAR的大小,就不应该在JAR中包含源代码。源代码应该放在一个单独的JAR(或ZIP、TAR或其他)文件中。您知道它在多大程度上减少了JAR的大小吗?我知道这完全取决于我使用的类的数量和依赖的百分比。但是它还是能显著地缩小尺寸吗?@Yatendra:老实说,我很久以前就用过一次,而且只是为了一个小的Hello World类型的项目,所以我不能评论现实生活中的场景。由于谷歌在Android上使用Proguard,优化和收缩可能是至关重要的,所以我相信尺寸缩减可能非常重要。非常感谢@darioo,这正是我想要的。如果你准备好在未来十年与Proguard抗争,请使用Proguard。但是你不会赢。@Yatendra-如果你不是指“小程序的实际源代码”,为什么说“小程序的源代码”?我回答了你提出的问题,而不是你头脑中的问题。@Yatendra-话虽如此,我的回答的主要部分是有效的,无论你是否在applet JAR中包含源代码。您确实需要研究许可问题。您的第一个问题有问题,请查看此链接以了解更多信息@HusseinPourakbar-你在说什么?什么“第一期”?什么问题?@Stephen C-我说的是:如果您的代码使用动态加载(例如通过调用Class.forName(“…”),这些工具通常无法检测到依赖性。因此,为了避免动态加载的类被遗漏在最终的JAR之外,yo