• <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 閱讀(277) 評論(0)  編輯 收藏 引用

            久久国产福利免费| 精品久久久久中文字| 97久久婷婷五月综合色d啪蜜芽| 久久亚洲精品无码观看不卡| 久久久久婷婷| 久久婷婷色综合一区二区| 中文字幕久久波多野结衣av| 好属妞这里只有精品久久| 思思久久99热只有频精品66| 无码人妻精品一区二区三区久久| 色综合合久久天天综合绕视看| 日日狠狠久久偷偷色综合96蜜桃| 久久水蜜桃亚洲av无码精品麻豆| 情人伊人久久综合亚洲| 香蕉99久久国产综合精品宅男自 | 久久免费美女视频| 亚洲欧美一区二区三区久久| 国内精品伊人久久久久| 囯产精品久久久久久久久蜜桃| 久久精品一区二区三区不卡| 国产一区二区久久久| 99久久精品这里只有精品| 久久久精品人妻一区二区三区蜜桃| 久久黄色视频| 精品亚洲综合久久中文字幕| 久久精品国产久精国产果冻传媒| 精品久久久久久国产免费了| 久久综合88熟人妻| 精品久久久久久国产| 亚洲欧美日韩精品久久亚洲区 | 午夜精品久久久久久久| 欧美粉嫩小泬久久久久久久| 色综合久久中文综合网| 久久99久久99小草精品免视看| 漂亮人妻被黑人久久精品| 色欲久久久天天天综合网| 久久人人爽人人爽人人片AV高清 | Xx性欧美肥妇精品久久久久久| 69久久夜色精品国产69| 99久久综合狠狠综合久久止| 色妞色综合久久夜夜|