Maven的依賴

                                    

依賴包含的元素

1、groupid

2、artifactid

3、version

4、type : 依賴的型別,對應於專案座標定義的packaging

5、scope: 依賴範圍(三種classpath: 編譯、測試、執行)

            compile:    編譯範圍,對編譯、測試和執行都有效

            test:          測試範圍, 只對測試有效 (例子:Junit)

            provided:  對編譯和測試有效,對執行無效(例子:servlet api)

            runtime:   對測試和執行有效,對編譯無效(例子:jdbc)

            system:     對編譯、測試和執行的範圍影響同provided, 但是這個與系統繫結,可移植性不高,

                            在配置時需要通過systemPath元素來指定依賴的路徑。

        import:    對編譯、測試和執行基本無影響;用於一個dependencyManagement對另一個dependencyManagement的繼承

6、optional : 標記依賴是否可選

7、exclusions: 排除傳遞依賴

傳遞依賴

        舉一個例子,A依賴B(compile),B依賴C(compile),那麼A對於B是第一直接依賴,B對於C是第二直接依賴,A對於C是傳遞依賴(compile)。

        第一直接依賴和第二直接依賴的範圍直接影響傳遞依賴的範圍:

有規律的:

           第二直接依賴為compile的,傳遞依賴與第一直接依賴相同

           第二直接依賴為test的,傳遞依賴不可用

           第二直接依賴為provided,只傳遞第一直接依賴為provided的,且傳遞依賴為為provided

          第二直接依賴為runtime, 傳遞依賴與第一直接依賴裡除了compile的依賴相同,第一直接依賴為compile的傳遞依賴為runtime.

依賴調解

為了解決重複依賴的問題,maven有依賴調解機制

依賴調解的二個原則:

1、最短路徑優先; A->B,B->C,C->X(1.0); A->B,B->X(2.0), X(2.0)將被解析使用

2、第一申明者優先;路徑長度相同,誰先申明用誰的。

可選依賴

可選依賴無法傳遞。一般情況下不應該使用可選依賴,物件導向的單一職責原則,同樣適用與maven。例子就不舉了。

最佳實踐

通過:

mvn dependecy:list   ->已經解析的依賴

mvn dependecy:tree  ->依賴關係樹

mvn dependecy:analyze ->使用但是未申明 和 申明但是未使用 兩種情況

來分析專案的的依賴排查問題


(adsbygoogle = window.adsbygoogle || []).push({});

function googleAdJSAtOnload() {
var element = document.createElement(“script”);
element.src = “//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”;
element.async = true;
document.body.appendChild(element);
}
if (window.addEventListener) {
window.addEventListener(“load”, googleAdJSAtOnload, false);
} else if (window.attachEvent) {
window.attachEvent(“onload”, googleAdJSAtOnload);
} else {
window.onload = googleAdJSAtOnload;
}