在 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/
我经常遇到的问题是,我在我的项目中使用实际的库。现在,如果我在旧项目中使用这个 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/