我需要创建用于Android的最小jar的utils库。我正在使用apache commons库中的一些方法(例如IOUtils
,StringUtils
)。但是,每次这样的使用都会导致我导入整个库(commons-lang
,commons-io
等),这在Tomcat下是绝对可以接受的(war
无论如何都是mamoot大小的),但绝对不能接受对于Android项目。
所以,我的目标是,将所有使用过的类从依赖项打包到一个jar中 - 但只包含那些需要的类。我记得曾经接触过完成这项任务的maven插件,不幸的是我不记得它的名字,也没通过Google找到它。
那么请问,你知道maven插件会做什么样的依赖关系最小化,或者任何独立的工具会做同样的事情吗?
答案 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 :) 也许它会有用。
您还可以在自定义库下收集已使用的库类,并在项目中包含此用户创建的库。