在 java 中重新打包依赖项

Repack dependencies in java

我经常遇到的问题是,我在我的项目中使用实际的库。现在,如果我在旧项目中使用这个 jar,我有 conflicts between the dependencies。最好的例子是Guava。在一些项目中,我的版本是 12/13,而 Guava 的实际版本是 18,我在较新的 projects/libs.

中使用的是

最好将所有依赖项打包到 jar 中,例如,如果我使用 Guava 18,它会在该项目自己的包树中重新打包为自己的 类,因此我可以使用我的旧项目中较新的 jar 具有 Guava 13 的项目依赖性,没有任何 Guava 版本冲突,因为导入的 jar/lib/dependency 仍然使用重新打包的 Guava 版本 18.

有人知道这样做的好方法吗?有没有框架可以做到这一点?希望我已经正确解释了我的问题。

事实(我使用的是什么):Java 1.6-1.8 & Ivy & Eclipse Luna

Jar Jar 链接 https://code.google.com/p/jarjar/ 可用于此目的。它提供了可以用来代替标准jar任务的ant任务,并且有规则元素来定义重命名模式。

另一个选项可能是 Maven Shade 插件,它可以做同样的事情 http://maven.apache.org/plugins/maven-shade-plugin/