环境
java 1.8scala 2.12.6sbt 1.2.1idea2.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
- 新建sbt安装路径,注意:sbt安装路径中不能含有空格和中文,将
sbt-1.2.1.msi安装到此路径。 - 配置环境变量
- 新建变量sbt
SBT_HOME D:\ProgramFile\sbt
- 添加变量到path中
%SBT_HOME%bin;
配置文件
修改文件onf/sbtconfig.txt,添加以下内容
-Dfile.encoding=UTF8
sbt仓库设置
方案一
直接修改sbt的jar里面的配置文件。windows下可通过360压缩替换掉jar包里面的文件。
- 找到sbt安装目录
D:\ProgramFile\sbt\bin - 备份
sbt-launch.jar为sbt-launch.jar.bak - 解压
sbt-launch.jar.bak,打开个sbt.boot.properties文件 在
[repositories]里面的local下面添加以下数据源alirepo1:https://maven.aliyun.com/repository/central
alirepo2:https://maven.aliyun.com/repository/jcenter
alirepo3:https://maven.aliyun.com/repository/public使用360压缩打开
sbt-launch.jar,找到sbt.boot.properties文件并替换
方案二
配置sbt的数据源,让其优先加载我们配置的数据源
- 在
D:\ProgramFile\sbt\conf目录下,新建文件repository.properties 在
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在
conf/sbtconfig.txt中添加repository.properties文件路径-Dsbt.repository.config=D:/ProgramFile/sbt/conf/repository.properties
添加依赖build.sbt
在项目中找到build.sbt文件,此类似于maven中的pom文件
添加spark-core和spark-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不兼容
这里需要注意,在Intellij Idea启动时,会执行dump project structure from sbt的操作,也就是把sbt所需要的项目结构从远程服务器拉取到本地,在本地会生成sbt所需要的项目结构。由于是从国外的远程服务器下载,所以,这个过程很慢,笔者电脑上运行了15分钟。这个过程没有结束之前,上图中的File->New弹出的子菜单是找不到Scala Class这个选项的。所以,一定要等dump project structure from sbt的操作全部执行结束以后,再去按照上图操作来新建Scala Class文件。
修改sbt数据源
不靠谱方案
- 将数据源改为
maven.oschina.com。此数据源已经失效 - 将
sbt.boot.properties中的https改为http。未生效 - 在
sbt的vm中配置-Dsbt.override.build.repos=true。此方法效果和-Dsbt.repository.config=D:/ProgramFile/sbt/conf/repository.properties一致,前提是需要配置数据源 - 最笨方案,下载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
参考链接