减少jar文件大小

8

有没有一种方法可以减少jar文件的大小?

我想要一个可以减少未使用依赖项的工具。

我使用maven进行依赖管理。


“未使用的依赖”是什么意思?是指您自己的pom文件还是他人的pom文件? - khmarbaise
在我的pom.xml文件中,我包含了大约350kb的Apache Httpclient。它的pom文件有其他依赖文件。我想要一个工具,可以从jar包中减少未使用的类,并减小jar文件的大小。 - user1365737
如果httpclient包含未使用的依赖项,您可以在pom中使用排除来排除传递依赖项。 - khmarbaise
3个回答

6
一个JAR文件通常不包含Maven意义上的依赖。因此,你可能在谈论:
  • WAR或EAR文件等类似文件,
  • 通过组合多个JAR文件生成的所谓的UberJAR文件;例如使用Maven shade插件,或
  • 更细粒度的依赖项,而不是Maven模块。
在前两种情况下,你可以通过在依赖项规范或war或shade插件构建描述符中排除这些名义上依赖的JAR文件。我IRC,shade插件还允许你排除特定的包和类。
最后一种可能需要一个单独的工具来后处理JAR文件。消除未使用的类是混淆器可以做的事情。但是,你需要小心,不要消除由DI / IoC框架或AOP框架反射使用的类或类名称。
(一般来说,这种工具试图通过分析.class文件外部引用的依赖关系来确定使用哪些类。DI / IoC / AOP等引入了其他类型的依赖关系,这些依赖关系在.class文件结构中并不明显。)

4

如果您想了解项目使用的依赖项,只需检查maven-dependency-plugin,该插件可用于分析已使用/未使用的依赖项。

通过以下方式检查您的依赖项:

mvn dependency:analyze

或者像这样查看依赖树:
mvn dependency:tree

或者您可以查看您的IDE(取决于您使用的哪个),例如使用Eclipse(Indigo)和m2e插件,您有一个名为“依赖层次结构”的选项卡,其中显示了包括传递依赖项在内的依赖关系树。

在某些情况下,您需要注意由DI框架使用的依赖关系,这些依赖关系无法通过maven-dependency-plugin或IDE插件进行分析。


1

pack200 可以大幅减少 JAR 文件的大小。但是它很难与 Maven 一起使用,而且在 EE 容器中无法使用。

为什么你有未使用的依赖项?


1
我有一个包含其他jar依赖的jar文件。我只使用其中的1-2个类,并希望减少未使用的类。 - user1365737

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接