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

我需要创build在Android中使用的最小的utils库jar。 我使用了一些来自Apache公共库的方法(比如IOUtilsStringUtils )。 然而,每一个这样的用法都会导致我在Tomcat下完全可以接受的( commons-langcommons-io等)( war总是庞大的),但是绝对不能接受Android项目。

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

所以,请你知道maven插件会做这种最小化的依赖关系,或任何独立的工具,将会这样做吗?

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

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

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

一般来说,不可能自动select应用程序使用的所有类。 只要想一下我们可以用Class.forName(String name)来做什么,或者如果我们使用dependency injection容器并在外部configuration文件中声明types。

我猜如果你使用Eclipse来JAR项目,它给出了一些选项,而JARing :)也许这将是有益的。

您也可以在自定义库下收集使用过的库类,并将该用户创build的库包含在项目中。