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

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

因此,我的目标是将所有使用过的类从依赖项打包到一个jar中 – 但只包含所需的类。 我记得有一次与maven插件联系完成了这项任务,不幸的是我不记得它的名字,也没有通过Googlefind它。

所以,请问,您是否知道maven插件可以最大限度地减少依赖关系,或者任何可以执行相同操作的独立工具?

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

    您不记得的maven插件可能是Apache Maven Shade插件 ,还有minimizeJar选项。 正如Andreas_D注意到的那样,这将不包括使用Class.forName加载的类,因此您需要在配置中明确说明您需要它们。 这是我如何让maven在我的单个jar中包含jdbc驱动程序:

      net.sourceforge.jtds:jtds  **   

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

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

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