文章目录
- 1 Overview
- 2 问题分析
- 2.1 sbt 本地问题
- 2.2 IDEA sbt 的配置问题
- 2.3 一些测试
- 3 Summary
1 Overview
有用过 sbt 开发项目的同学应该都有这样的体会,换个环境,sbt 经常会出现编译项目出错的情况,导入 IDEA 又各种报错,尤其是在 github 上找到一个 sbt 编译的项目,想 clone 下来导入 IDEA 中阅读源码,跑跑测试用例,debug 进去看看实现原理等等…
总之一句话,sbt 的项目很麻烦,甚至是见到 sbt 的项目就想躲。
2 问题分析
其实以上的情况是笔者之前经常遇到的问题,所以下定决定花点时间解决这个问题。
首先要明白 sbt 其实是一个 Scala 或者 Java 的一个构建工具,使用上的目的和方式其实跟 Maven 是大相径庭的,如果你是 Maven 的老司机,要解决 sbt 的问题,应该不难。
2.1 sbt 本地问题
其实只要 sbt 在本地可以对项目进行构建,就应该不存在 IDEA 构建不了的问题。所以正常的下载安装 sbt 的流程应该是这样的。
- 到官网 下载对应的版本,对于新手建议直接安装 1.0.0 以上的版本,原因是 0.13 及以上的版本 sbt 团队应该不再维护,而且新版本应该是向上兼容的。
- 下载后,解压到自己的软件安装路径上,例如我的,
/usr/local/sbt
,然后设置环境变量。 - 确认一下 sbt 配置(这个后面会细说)。
关于第三点,这里详细解释一下,正常来说 sbt 安装目录应该是以下这样的。
代码语言:javascript复制➜ sbt tree
.
├── bin
│ ├── java9-rt-export.jar
│ ├── sbt
│ ├── sbt-launch-lib.bash
│ ├── sbt-launch.jar
│ └── sbt.bat
├── conf
│ ├── sbtconfig.txt
│ └── sbtopts
└── lib
└── local-preloaded
// 这里不详细列出来了
跟 Maven 一样,sbt 有个叫 sbtconfig.txt
的文件,看文件名就知道,这个是 sbt 的配置文件。这个文件初始的样子是这样的。
# Set the java args to high
-Xmx512M
-XX:MaxPermSize=256m
-XX:ReservedCodeCacheSize=128m
# Set the extra SBT options
-Dsbt.log.format=true
# 这是我自己添加的
-Dsbt.repository.config=/usr/local/sbt/conf/repositories
注意最后一行的参数是笔者添加的,这里是告诉 sbt,jar 包和 sbt 插件的仓库地址,这里跟 Maven 也是一样的,可以给 sbt 添加阿里云镜像或者其他仓库。这里看看这个文件的具体内容。
代码语言:javascript复制[repositories]
local
maven-central
nexus-aliyun:http://maven.aliyun.com/nexus/content/groups/public
sbt-plugins-repo: http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
以上的仓库基本够用(至少笔者是够用的),如果还需要其他仓库(公司仓库),可以自行添加。更多 sbt 配置参数可以参考官方文档。这里需要提示,当用命令行构建项目的时候,上述参数应该是这样的格式 -Dprop=value
,以下是我构建项目的时候,输入命令的一个例子。
sbt -Dsbt.override.build.repos=true -Dsbt.repository.config=/usr/local/sbt/conf/repositories
另外还需要注意的一点是,sbt 很多插件没有发布到中央仓库,阿里云镜像也没有去同步这些插件仓库,如果你不配置上述文件的 sbt-plugins-repo
的仓库地址,基本上就不要指望可以构建项目成功了,这个也是 sbt 项目比较坑的一个地方。关于这些插件仓库,地址其实已经不是上述文件那样了,只是他会自动跳转到目前的域名,因为这些仓库已经走商业化模式了,所以原来的仓库会有一定的限制,需要留意一下。
2.2 IDEA sbt 的配置问题
如果在本地都能构建项目成功,那么在 IDEA 中也应该成功,因为 IDEA 是支持 sbt 项目的。但这里会有一些坑需要注意一下的。
不管是导入还是创建新的 sbt 项目,都应该检查一下 IDEA 的 sbt 配置,这里以笔者的配置为例。
注意需要留意的是 sbt-lauch.jar,如果不配置,那么用的是 IDEA 的内置的 sbt,为了更灵活的配置 sbt 的一些设置,建议还是使用自己下载安装的 sbt,并且设置 VM 参数,原理等同于上节说的命令行模式的参数。这里就不多做解释了,官网是有专门介绍的。
2.3 一些测试
为了测试 sbt 的配置是否正确了,建议利用 IDEA 创建和导入一个 sbt 项目,尤其是导入一个开源的 sbt 项目,因为这些项目相对比较复杂,sbt 的配置文件中包含了大量的插件和 jar 包,如果可以一次构建成功,那么 sbt 的配置就应该是没有问题了,以后如果碰到问题了,就仔细阅读错误日志,其实最多的问题就是仓库配置不对,导入插件和 jar 无法下载,最终导入构建失败。
3 Summary
本文主要介绍了 sbt 的配置和踩坑经历,碰到 sbt 构建失败不要轻易放弃,毕竟 sbt 的动态编译还是很爽的…