使用仅使用的类生成最小化的jar

时间:2012-03-01 14:55:49

标签: java android maven jar minimize

我需要创建用于Android的最小jar的utils库。我正在使用apache commons库中的一些方法(例如IOUtilsStringUtils)。但是,每次这样的使用都会导致我导入整个库(commons-langcommons-io等),这在Tomcat下是绝对可以接受的(war无论如何都是mamoot大小的),但绝对不能接受对于Android项目。

所以,我的目标是,将所有使用过的类从依赖项打包到一个jar中 - 但只包含那些需要的类。我记得曾经接触过完成这项任务的maven插件,不幸的是我不记得它的名字,也没通过Google找到它。

那么请问,你知道maven插件会做什么样的依赖关系最小化,或者任何独立的工具会做同样的事情吗?

4 个答案:

答案 0 :(得分:6)

你不记得的maven插件可能是Apache Maven Shade Plugin,有minimizeJar选项。正如Andreas_D注意到的那样,这不会包含加载Class.forName的类,所以你需要implicity say in configuration,你需要它们。这是我如何让maven在我的单个jar中包含jdbc驱动程序:

<filter>
  <artifact>net.sourceforge.jtds:jtds</artifact>
    <includes>
      <include>**</include>
    </includes>
</filter>

答案 1 :(得分:1)

对不起,也许我不清楚明白的问题。混淆器工具(即ProGuard)可以做到这一点,不是吗?它将几个JAR打包成一个并删除未使用的类。如果您不需要混淆/优化(以防止不必要的副作用),那么您可以禁用它们,并启用“缩小”阶段。

答案 2 :(得分:0)

通常,无法自动选择应用程序使用的所有类。试想一下我们可以用Class.forName(String name)做什么,或者我们是否使用依赖注入容器并在外部配置文件中声明类型。

答案 3 :(得分:-3)

我想如果你把Eclipse用于JAR项目,那么它提供了一些选项来做到这一点,而JARing :) 也许它会有用。

您还可以在自定义库下收集已使用的库类,并在项目中包含此用户创建的库。