sbt 项目导入问题

2020-08-05 16:17:26 浏览数 (1)

文章目录

  • 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. 到官网 下载对应的版本,对于新手建议直接安装 1.0.0 以上的版本,原因是 0.13 及以上的版本 sbt 团队应该不再维护,而且新版本应该是向上兼容的。
  2. 下载后,解压到自己的软件安装路径上,例如我的,/usr/local/sbt,然后设置环境变量。
  3. 确认一下 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 的配置文件。这个文件初始的样子是这样的。

代码语言:javascript复制
# 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,以下是我构建项目的时候,输入命令的一个例子。

代码语言:javascript复制
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 的动态编译还是很爽的…

0 人点赞