什么是maven-shade-plugin,为什么要重新定位Java包?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了什么是maven-shade-plugin,为什么要重新定位Java包?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2108字,纯文字阅读大概需要4分钟。
内容图文
我发现某人的pom.xml中使用了maven-shade-plugin.我之前从未使用过maven-shade-plugin(我是Maven n00b),所以我试着理解使用它的原因及其作用.
我看了Maven docs,但我无法理解这句话:
“This plugin provides the capability to package the artifact in an uber-jar, including its dependencies and to shade – i.e. rename – the packages of some of the dependencies.” The documentation on the page doesn’t seem very newbie-friendly.
什么是“超级罐子?”为什么有人想制作一个?重命名依赖项包的重点是什么?我试图通过maven-shade-plugin apache页面上的示例,例如“为Uber Jar选择内容”,但我仍然无法理解“着色”所取得的成就.
任何指向说明性示例/用例的指针(解释为什么在这种情况下需要着色 – 解决了什么问题)将不胜感激.最后,我什么时候应该使用maven-shade-plugin?
解决方法:
简而言之,Uber JAR是一个包含所有内容的JAR.
通常在Maven中,我们依赖于依赖管理.工件仅包含其自身的类/资源. Maven将负责根据项目的构建时间找出项目的所有工件(JAR等).
uber-jar是接受所有依赖项的东西,并且在一个大JAR中提取依赖项的内容并将它们与项目本身的类/资源一起放入.通过拥有这样的超级jar,它很容易执行,因为你只需要一个大的JAR而不是大量的小JAR来运行你的应用程序.在某些情况下,它也便于分发.
只是一个侧面说明.避免使用uber-jar作为Maven依赖,因为它破坏了Maven的依赖性解析功能.通常我们只为实际部署或手动分发的最终工件创建uber-jar,但不是为了放入Maven存储库.
更新:我刚刚发现我没有回答问题的一部分:“重命名依赖项的包有什么意义?”.这里有一些简短的更新,希望能帮助有类似问题的人.
创建uber-jar以便于部署是一个使用shade插件的用例.还有其他常见用例涉及包重命名.
例如,我正在开发Foo库,它依赖于Bar库的特定版本(例如1.0).假设我无法使用其他版本的Bar lib(因为API更改或其他技术问题等).如果我简单地将Bar:1.0声明为Foo在Maven中的依赖关系,则可能会出现问题:Qux项目依赖于Foo,还有Bar:2.0(并且它不能使用Bar:1.0,因为Qux需要使用新功能在酒吧:2.0).这就是困境:如果Qux使用Bar:1.0(Qux的代码不起作用)或Bar:2.0(Foo的代码不起作用)?
为了解决这个问题,Foo的开发人员可以选择使用shade插件来重命名它的Bar的用法,以便Bar:1.0 jar中的所有类都嵌入在Foo jar中,并且嵌入的Bar类的包从com更改.bar到com.foo.bar.通过这样做,Qux可以安全地依赖于Bar:2.0,因为现在Foo不再依赖于Bar,并且它正在使用自己的另一个包中的“已更改”Bar副本.
内容总结
以上是互联网集市为您收集整理的什么是maven-shade-plugin,为什么要重新定位Java包?全部内容,希望文章能够帮你解决什么是maven-shade-plugin,为什么要重新定位Java包?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。