• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ++wythern++

            X presents Y for a better Z

            What is shade jar, and what is its purpose.

            https://stackoverflow.com/questions/13620281/what-is-the-maven-shade-plugin-used-for-and-why-would-you-want-to-relocate-java


            Uber JAR, in short, is a JAR containing everything.

            Normally in Maven, we rely on dependency management. An artifact contains only the classes/resources of itself. Maven will be responsible to find out all artifacts (JARs etc) that the project depending on when the project is built.

            An uber-jar is something that take all dependencies, and extract the content of the dependencies and put them with the classes/resources of the project itself, in one big JAR. By having such uber-jar, it is easy for execution, because you will need only one big JAR instead of tons of small JARs to run your app. It also ease distribution in some case.

            Just a side-note. Avoid using uber-jar as Maven dependency, as it is ruining the dependency resolution feature of Maven. Normally we create uber-jar only for the final artifact for actual deployment or for manual distribution, but not for putting to Maven repository.


            Update: I have just discovered I haven't answered one part of the question : "What's the point of renaming the packages of the dependencies?". Here is some brief updates and hopefully will help people having similar question.

            Creating uber-jar for ease of deployment is one use case of shade plugin. There are also other common use cases which involve package renaming.

            For example, I am developing Foo library, which depends on a specific version (e.g. 1.0) of Bar library. Assuming I cannot make use of other version of Bar lib (because API change, or other technical issues, etc). If I simply declare Bar:1.0 as Foo's dependency in Maven, it is possible to fall into a problem: A Qux project is depending on Foo, and also Bar:2.0 (and it cannot use Bar:1.0 because Qux needs to use new feature in Bar:2.0). Here is the dilemma: should Qux use Bar:1.0 (which Qux's code will not work) or Bar:2.0 (which Foo's code will not work)?

            In order to solve this problem, developer of Foo can choose to use shade plugin to rename its usage of Bar, so that all classes in Bar:1.0 jar are embedded in Foo jar, and the package of the embedded Bar classes is changed from com.bar to com.foo.bar. By doing so, Qux can safely depends on Bar:2.0 because now Foo is no longer depending on Bar, and it is using is own copy of "altered" Bar located in another package.

            posted on 2017-06-19 11:23 wythern 閱讀(278) 評論(0)  編輯 收藏 引用

            久久久久国产精品嫩草影院| 亚洲午夜久久久精品影院| 亚洲午夜精品久久久久久浪潮| 伊人久久大香线蕉精品不卡 | 1000部精品久久久久久久久| 久久成人精品视频| 久久91精品国产91| 亚洲成色999久久网站| 久久久精品人妻一区二区三区蜜桃| AV无码久久久久不卡蜜桃| 久久久久久久久66精品片| 国产成人久久精品区一区二区| 日本高清无卡码一区二区久久| 99久久精品国产免看国产一区| 无码任你躁久久久久久老妇App| 草草久久久无码国产专区| 亚洲国产另类久久久精品| 色综合久久久久综合99| 国产激情久久久久影院老熟女免费 | 久久棈精品久久久久久噜噜| 久久综合精品国产一区二区三区| 久久国产精品-久久精品| 新狼窝色AV性久久久久久| 亚洲国产天堂久久久久久| 国产精品美女久久久网AV| 免费国产99久久久香蕉| 久久99国产精品久久| 国产精品久久久久9999高清| 亚洲精品国产美女久久久| 一本色道久久99一综合| 97香蕉久久夜色精品国产| 青青草原综合久久大伊人| 久久99国产精品久久99小说| 久久亚洲AV成人无码软件| 2020久久精品亚洲热综合一本| 久久无码AV中文出轨人妻| 亚洲七七久久精品中文国产| 国产成人综合久久精品红| 亚洲中文字幕久久精品无码喷水 | 久久精品国产亚洲av日韩| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 |