sbt配置——數據源問題解決

sbt安裝

環境

  • java 1.8
  • scala 2.12.6
  • sbt 1.2.1
  • idea2.18.3

軟件

  • idea sbt插件
  • idea scala插件
  • sbt安裝包 https://sbt-downloads.cdnedge.bluemix.net/releases/v1.2.1/sbt-1.2.1.msi,非必須,可直接使用idea的sbt插件做對應配置

安裝sbt

  1. 新建sbt安裝路徑,注意:sbt安裝路徑中不能含有空格和中文,將sbt-1.2.1.msi安裝到此路徑。
  2. 配置環境變量
  • 新建變量sbt

SBT_HOME D:\ProgramFile\sbt

  • 添加變量到path中

%SBT_HOME%bin;

配置文件

修改文件onf/sbtconfig.txt,添加以下內容

-Dfile.encoding=UTF8

sbt倉庫設置

方案一

直接修改sbt的jar裏面的配置文件。windows下可通過360壓縮替換掉jar包裏面的文件。

  1. 找到sbt安裝目錄D:\ProgramFile\sbt\bin
  2. 備份sbt-launch.jarsbt-launch.jar.bak
  3. 解壓sbt-launch.jar.bak,打開個sbt.boot.properties文件
  4. [repositories]裏面的local下面添加以下數據源
alirepo1:https://maven.aliyun.com/repository/central
alirepo2:https://maven.aliyun.com/repository/jcenter
alirepo3:https://maven.aliyun.com/repository/public
  1. 使用360壓縮打開sbt-launch.jar,找到sbt.boot.properties文件並替換

方案二

配置sbt的數據源,讓其優先加載我們配置的數據源

  1. D:\ProgramFile\sbt\conf目錄下,新建文件repository.properties
  2. repository.properties中添加以下內容
[repositories]
local
alirepo1:https://maven.aliyun.com/repository/central
alirepo2:https://maven.aliyun.com/repository/jcenter
alirepo3:https://maven.aliyun.com/repository/public
  1. conf/sbtconfig.txt中添加repository.properties文件路徑
-Dsbt.repository.config=D:/ProgramFile/sbt/conf/repository.properties

添加依賴build.sbt

在項目中找到build.sbt文件,此類似於maven中的pom文件 添加spark-corespark-sql等的依賴

name := "sbt-test" // 項目名稱

version := "0.1" // 項目版本號

scalaVersion := "2.11.12" // scala版本號

// 依賴
libraryDependencies ++= Seq(
  "org.apache.spark"  %%  "spark-core"    % "2.2.0",
  "org.apache.spark"  %%  "spark-sql"     % "2.2.0",
  "com.typesafe.scala-logging" % "scala-logging-slf4j_2.11" % "latest.integration"
)

下載依賴

通過以下方式打開執行命令窗口

  • build.sbt同級目錄下打開cmd窗口
  • idea中打開Termail窗口

下載或更新jar

sbt update

編譯文件

sbt compile

打包

sbt package

問題處理

版本不兼容

jdk不兼容

  • idea2018需要jdk8以上
  • spark2.0需要jdk8以上

文件下載緩慢

idea控制檯build界面一直在轉圈,並提示dump project structure from sbt

這裏需要注意,在Intellij Idea啓動時,會執行dump project structure from sbt的操作,也就是把sbt所需要的項目結構從遠程服務器拉取到本地,在本地會生成sbt所需要的項目結構。由於是從國外的遠程服務器下載,所以,這個過程很慢,筆者電腦上運行了15分鐘。這個過程沒有結束之前,上圖中的File->New彈出的子菜單是找不到Scala Class這個選項的。所以,一定要等dump project structure from sbt的操作全部執行結束以後,再去按照上圖操作來新建Scala Class文件。

修改sbt數據源

不靠譜方案

  1. 將數據源改爲maven.oschina.com。此數據源已經失效
  2. sbt.boot.properties中的https改爲http。未生效
  3. sbtvm中配置-Dsbt.override.build.repos=true。此方法效果和-Dsbt.repository.config=D:/ProgramFile/sbt/conf/repository.properties一致,前提是需要配置數據源
  4. 最笨方案,下載jar包,放到本地倉庫C:\Users\sustcoder\.ivy2\cache

修改成阿里雲數據源後依舊下載失敗

  • 配置的sbt版本在阿里雲的倉庫中沒有。排查辦法:可以去maven.aliyun.com去查看對應版本pom文件是否存在
  • 在阿里雲上找到了對應版本但依舊保持。注意查看日誌信息中下載的jar包路徑含有_2.10類似的字樣,比如在build.sbt中配置的是"org.apache.spark" %% "spark-sql" % "2.2.0",但是日誌裏面是[warn] :: com.typesafe.scala-logging#scala-sql_2.10;2.1.2: not found,這個是因爲sbt裏面的%%代表sbt默認會拼接上scala的版本號在pom文件上,下載最適合的jar包,可以將%%改爲%,即改爲"org.apache.spark" % "spark-sql" % "2.2.0",注意區別:僅僅是少了一個百分號。
  • 執行sbt-shell會走默認的倉庫配置,需要在sbt的vm參數中配置-Dsbt.override.build.repos=true ????

查看配置參數是否生效

可在日誌控制檯查看第一行日誌,查看配置參數是否生效,走的是自己安裝的sbt還是idea的插件,如下日誌,在sbtconfig.txt中配置信息會進行加載

"C:\Program Files\Java\jdk8\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=localhost:58502,suspend=n,server=y -Xdebug -server -Xmx1536M 
-Dsbt.repository.config=D:/develop/sbt/conf/repository.properties -Didea.managed=true -Dfile.encoding=UTF-8 
-Didea.runid=2018.2 -jar D:\ProgramFile\sbt\bin\sbt-launch.jar idea-shell

參考鏈接

https://www.scala-sbt.org/0.13/docs/Proxy-Repositories.html

https://segmentfault.com/a/1190000002484978

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章