前言。
首先聲明本方法絕對真實有效,本人嘗試了網(wǎng)上各種博客媒峡,但是說實話,還真跑不起横蜒,也不知道大神們怎么解決的胳蛮。經(jīng)過實驗室?guī)熜种更c销凑,終于找到了如下方法。
一仅炊。導入代碼斗幼,編譯啥的就不說了,一艘一大堆抚垄,linux 環(huán)境基本都能成功蜕窿,然而真正要調(diào)試源代碼谋逻,卻總有如下錯誤
2016-08-26 16-54-35屏幕截圖.png
二。 解決辦法桐经,找到spark-parent.pom ,注釋掉各種provided 選項如下:
2016-08-26 16-59-10屏幕截圖.png
三毁兆。 完美結(jié)果。如下
2016-08-26 16-59-44屏幕截圖.png
四阴挣。感謝崔師兄气堕,感謝實驗室。接下來畔咧,你可以盡情玩弄 spark 源代碼了茎芭。
具體原理如下:
- compile (編譯范圍)** compile是默認的范圍;如果沒有提供一個范圍誓沸,那該依賴的范圍就是編譯范圍梅桩。編譯范圍依賴在所有的classpath 中可用,
同時它們也會被打包拜隧。 - provided (已提供范圍)** provided 依賴只有在當JDK 或者一個容器已提供該依賴之后才使用宿百。例如, 如果你開發(fā)了一個web 應(yīng)用洪添,你可能在編譯
classpath 中需要可用的Servlet API 來編譯一個servlet犀呼,但是你不會想要在打包好的WAR 中包含這個Servlet API;這個
Servlet API JAR 由你的應(yīng)用服務(wù)器或者servlet 容器提供薇组。已提供范圍的依賴在編譯classpath (不是運行時)可用外臂。它們
不是傳遞性的,也不會被打包律胀。 - runtime (運行時范圍)** runtime 依賴在運行和測試系統(tǒng)的時候需要宋光,但在編譯的時候不需要。比如炭菌,你可能在編譯的時候只需要JDBC API JAR罪佳,而只
有在運行的時候才需要JDBC 驅(qū)動實現(xiàn)。 - test (測試范圍) test范圍依賴 在一般的編譯和運行時都不需要黑低,它們只有在測試編譯和測試運行階段可用赘艳。system (系統(tǒng)范圍)
- system范圍依賴與provided 類似,但是你必須顯式的提供一個對于本地系統(tǒng)中JAR 文件的路徑克握。這么做是為了允許基于本地
對象編譯蕾管,而這些對象是系統(tǒng)類庫的一部分。這樣的構(gòu)件應(yīng)該是一直可用的菩暗,Maven 也不會在倉庫中去尋找它掰曾。如果你將一個
依賴范圍設(shè)置成系統(tǒng)范圍,你必須同時提供一個 systemPath 元素停团。注意該范圍是不推薦使用的(你應(yīng)該一直盡量去從公共或
定制的 Maven 倉庫中引用依賴)旷坦。