sbt配置——資料來源問題解決

weixin_34019929發表於2018-09-14

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

轉載於:https://my.oschina.net/freelili/blog/2051632

相關文章